重新迭代一个for循环?

0 投票
1 回答
3231 浏览
提问于 2025-04-18 14:44

我希望我的循环每次都从头开始,而不是从上次停下的地方继续。

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被认为是质数。把我的代码放到PythonTutor里后,我发现27被标记为质数是因为在检查它是否能被3整除后,它开始从27继续循环。有没有办法让它每次都从头开始,还是我应该尝试用其他方法找质数呢?谢谢

1 个回答

4

你可以通过添加一个 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 是“懒惰”的,所以一旦 cur % num == 0 成立,它就会立即返回 False

撰写回答