Python:循环参数
Posted
技术标签:
【中文标题】Python:循环参数【英文标题】:Python: Loop Parameters 【发布时间】: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 上旋转。
【参考方案1】:
参见上面 tdelaney 的 cmets。这几乎解决了我的问题。
由于“范围”函数不包含端点,所以 for 循环永远不会退出。对于任何数字都是如此。但是对于除素数之外的所有数字,使用 'limit' 会将 for 循环的范围扩展到超出 'num' 的值。因此,除非数字是素数,否则“限制”有效。
我将代码更改为“num + 1”作为第二个参数,效果很好。
谢谢@tdelaney。
【讨论】:
以上是关于Python:循环参数的主要内容,如果未能解决你的问题,请参考以下文章
python 3.6和ValueError:循环参数必须与Future一致