【问题标题】:List all factors of number列出数字的所有因数
【发布时间】:2017-11-01 22:50:14
【问题描述】:

我正在尝试列出一个名为 count 的数字的所有因数。每当我运行它时,它都会返回1。例如:if 6 = count,那么调用findFactor(6)时应该返回的是1 2 3 6。返回的是 1

divisors = ""
def findFactor(count):
    divisors = ""
    valueD = 0
    for i in range(1, count+1):
        valueD = count/i
        if isinstance(valueD,int) == True:
            divisors = str(valueD)+" "
    print divisors

【问题讨论】:

  • 这不是 Java 代码。你是不是碰巧使用了python标签?
  • 尝试在循环中连接结果,例如divisors += str(valueD)+" "
  • 如果这是 Python 3,if isinstance(valueD,int) == True 永远不会为真,如果是 Python 2,它将始终为真,假设 count 始终是 @987654329 @
  • @ethanlee 好吧,这是一个不同的问题,至少你现在有不同的输出并且可以调试更多
  • 是的,您使用isinstance,但这不是您想知道的。它要么是alwaysint,要么是always float(python 没有double 类型)

标签: python factors


【解决方案1】:

这可以使用list comprehension在一行上完成。

def factorize(num):
    return [n for n in range(1, num + 1) if num % n == 0]

【讨论】:

    【解决方案2】:

    你可以参考这段代码:

    def find_factor(n):
      factor_values = []
      for i in range(1, n + 1):
        if n % i == 0:
          factor_values.append(i)
    
      values = ""
      for v in factor_values:
        values += str(v) + " "
    
      return values
    

    函数将返回1 2 3 6

    【讨论】:

    • 谢谢你
    【解决方案3】:

    首先,您有一个缩进错误。 print divisors 需要在 for 循环中加标签。

    divisors = ""
    def findFactor(count):
        divisors = ""
        valueD = 0
        for i in range(1, count+1):
            valueD = count/i
            if isinstance(valueD,int) == True:
                divisors = str(valueD)+" "
            print divisors
    

    此外,就像@juanpa.arrivillaga 提到的那样,您的结果在 Python 2 和 Python 3 之间会有所不同。

    但是,如果您希望您的divisors 以您想要的顺序打印,即从1 开始,您需要将您的范围更改为for i in range(count,0, -1)。您将获得多个 1's ,但这是我将留给您解决的问题。一个小挑战,如果你愿意的话。 ;)

    【讨论】:

      【解决方案4】:

      这是我想出的全部代码。谢谢大家的帮助。

      def findFactor(n):
        factorValues = []
        for i in range(1, n + 1):
          if n % i == 0:
            factorValues.append(i)
      
        values = ""
        for v in factorValues:
          values += str(v) + " "
      
        print values.count(" ")
        # prints the number of factors
      
      
        print values
      findFactor(21)
      

      它将打印因子的数量,然后在下一行打印因子。

      【讨论】:

        【解决方案5】:

        目前给出的答案都是蛮力法。

        对于 n=10000,他们将不得不迭代一万次。

        以下只会迭代 100 次:

        def find_factors(n):
            factors = []
            i = 1
            j = n
            while True:
                if i*j == n:
                    factors.append(i)
                    if i == j:
                        break
                    factors.append(j)
                i += 1
                j = n // i
                if i > j:
                    break
            return factors
        

        如果有可用的素数列表,它可以更快。

        【讨论】:

          猜你喜欢
          • 2021-02-25
          • 1970-01-01
          • 2016-03-17
          • 1970-01-01
          • 1970-01-01
          • 2010-10-19
          • 1970-01-01
          • 2014-07-17
          相关资源
          最近更新 更多