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中传递多个参数

python--循环

python 3.6和ValueError:循环参数必须与Future一致

Python lambda不记得for循环中的参数[重复]

python locust 性能测试:locust 参数化(list) ---循环取数据,数据可重复使用

python locust 性能测试:locust参数-保证并发测试数据唯一性,循环取数据