【发布时间】:2017-02-27 17:35:14
【问题描述】:
如果我没有恰当地命名这个,我深表歉意,但我无法执行以下代码。 for 循环参数似乎至少是问题的一部分。如果我将 for 循环中的“limit”替换为“num”以产生“for j in range(1, limit)”,则循环执行并给出所需的输出。但是使用 num 而不是 limit,我应该能够更精确地控制循环的迭代,但它不会完成但不会出现错误。
from collections import Counter
limit = int(input('What number do you want to factor?'))
num = limit
factors = []
while num != 1:
for j in range(2, num):
if (num % j == 0):
num = num // j
factors.append(j)
break
factorEnum = Counter(factors)
print(factors)
print(factorEnum)
代码的目的是产生给定数字的素数分解。例如,对于数字 28,素因子是 {2, 7},但我正在寻找素因子分解,它是 {2, 2, 7}。此代码是另一个脚本的一部分,该脚本查找数字范围(例如 1 - 40)的最小公倍数。这是 ProjectEuler 的一个问题。
【问题讨论】:
-
if (num % j == 0):当那不是真的时,你不会改变num所以你的循环会永远运行。假设num为2,那么for j in range(2, num)不运行,num 不减少,同样的事情也会发生。 -
添加几张照片,您就会发现哪里出错了。更好的是,在
pdb3调试器中运行它。 -
@tdelaney 只有在某些时候“j”的值不等于“num”时才会如此。即使这个数字是素数,它仍然会循环直到 'j == num' 并且 'num' 将被设置为 'num' // 'j' 这将是 1。然后 break 语句退出 for 循环并且'num' 的值为 1 退出 while 循环。 ...我认为。
-
这不是真正的答案。但我认为第二个参数的值并不重要,因为即使它设置为“限制”,它也永远不会超过“num”的值。但我仍然想知道为什么这不起作用。
-
range不包括端点,因此 j 永远不会等于 num。我添加了一个打印并使用 15 运行您的代码。它永远在 5 上旋转。
标签: python for-loop while-loop counter integer-division