重新迭代一个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被认为是质数。把我的代码放到PythonTutor里后,我发现27被标记为质数是因为在检查它是否能被3整除后,它开始从27继续循环。有没有办法让它每次都从头开始,还是我应该尝试用其他方法找质数呢?谢谢
1 个回答
4
你可以通过添加一个 while
循环,并使用 break
和 else
来合理控制程序的执行流程,这样就能解决这个问题:
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
。