我希望我的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整除。有没有办法从一开始就重申或者我应该尝试查找素数做其他事情?感谢
答案 0 :(得分:3)
您可以通过添加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
为“懒惰”,因此只要False
返回cur % num == 0
。