【问题标题】:How can I convert hamming number code in a while or for loop python如何在一段时间内或for循环python中转换汉明数字代码
【发布时间】:2021-03-12 05:32:56
【问题描述】:
def is_hamming_numbers(x):
    if x == 1:
        return 1
    if x % 2 == 0:
        return is_hamming_numbers(x/2)
    if x % 3 == 0:
        return is_hamming_numbers(x/3)
    if x % 5 == 0:
        return is_hamming_numbers(x/5)
    return 0

    def hamming_numbers_sequence(x):
        if x == 1:
            return 1
        hamming_numbers_sequence(x-1)
        if is_hamming_numbers(x) == True:
            print("%s" % x, end=' ')


    print(is_hamming_numbers(7))
    print(is_hamming_numbers(1))
    
    hamming_numbers_sequence(24)
    print()

您好,我需要打印汉明数,但我只能使用 if 循环来完成。如何使用 for 或 while 循环来做到这一点?

【问题讨论】:

    标签: python for-loop while-loop hamming-code hamming-numbers


    【解决方案1】:

    此实现使用优先级队列,通过堆实现。

    from heapq import heappush, heappop
    from itertools import islice
     
    def hamming_number_seq():
        heap = [1]
        while True:
            h = heappop(heap)
            while heap and h == heap[0]:
                heappop(heap)
            for m in [2,3,5]:
                heappush(heap, m*h)
            yield h
     
    print(*(islice(hamming_number_seq(), 15))) # This prints the first 15 numbers of the sequence.
    

    输出:

    1 2 3 4 5 6 8 9 10 12 15 16 18 20 24
    

    【讨论】:

      【解决方案2】:

      这样的?

      def is_hamming_numbers(x: int) -> bool:
          if x == 1:
              return True
          if x % 2 == 0:
              return is_hamming_numbers(x/2)
          if x % 3 == 0:
              return is_hamming_numbers(x/3)
          if x % 5 == 0:
              return is_hamming_numbers(x/5)
          return False
      
      
      for n in range(1, 25):
          if is_hamming_numbers(n):
              print(n)
      

      【讨论】:

      • @cursedchild19,是的,此方法是递归的并且使用迭代方法。递归意味着您使用该方法调用该方法,而迭代是for 循环。这一行:return is_hamming_numbers(x/2) 正在从自身调用方法(递归),这一行:for n in range(1, 25): 使用 for 循环(迭代)。
      • 与下面的 heapq 导入相比,这显然是一个很好的答案。谢谢!吉斯!
      【解决方案3】:

      检查和打印汉明数的另一种方法,希望对您有所帮助。

      Python 代码:

      # Hamming number has only prime factors as 2,3,5
      
      def is_hamming_number(n):
          
          factors = [];
          
          hammingNumberCheck = {1,2,3,5,n}
          
          for i in range(1, n + 1):
              if n % i == 0:
                  factors.append(i)
          
          factors_set = set(factors)
          
          if(factors_set.issubset(hammingNumberCheck)):
              return ":" + str(n) + ", is a hamming number"
          else:
              return ":" + str(n) + ", is not a hamming number"
      
      print (is_hamming_number(10))
      

      Ans - :10,是一个汉明数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        • 2018-08-04
        • 2023-01-22
        • 2021-11-14
        • 1970-01-01
        相关资源
        最近更新 更多