重申一个for循环?

时间:2014-07-25 10:35:08

标签: python python-2.7

我希望我的for循环每次从头开始迭代而不是从它停止的地方开始。

primes = [2]
cur = 3
count = 1
while count < 10:
    for num in primes:
        if cur % num == 0:
            cur += 2
    primes.append(cur)
    print cur
    cur += 2
    count += 1
print primes

我暂时无法弄清楚出了什么问题,而且我一直把27分作为素数。将my code 放入PythonTutor中会显示我将其标记为素数,因为它在检查后开始迭代27以查看它是否可被3整除。有没有办法从一开始就重申或者我应该尝试查找素数做其他事情?感谢

1 个答案:

答案 0 :(得分:3)

您可以通过添加while循环并使用breakelse来适当地控制流量来解决此问题:

primes = [2]
cur = 3
count = 1
while count < 10:
    while True:
        for num in primes:
            if cur % num == 0:
                cur += 2
                break # restart 'for' loop
        else: # reached end of 'for' loop without restarting
            break # leave 'while' loop
    primes.append(cur)
    cur += 2
    count += 1

但是,这很尴尬!您可以简化为:

primes = [2]
cur = 3
while len(primes) < 10:
    if all(cur % num for num in primes):
        primes.append(cur)
    cur += 2

请注意all为“懒惰”,因此只要False返回cur % num == 0