Jua*_*tro 1 python if-statement break
这是我的代码:
primes = [2, 3]
while len(primes) != 1001:
a = primes[-1] + 2
for i in primes:
if a % i == 0:
break
else:
print(primes)
primes.append(a)
print(primes[1002])
Run Code Online (Sandbox Code Playgroud)
这应该创建一个列表,直到第1001个素数,然后打印第1001个数字.它首先取列表中的最后一个数字并加2,然后检查给定数字是否可被素数列表的任何成员整除.如果它是可整除的,则for循环中断并跳过else子句.如果不是,则将该数字附加到素数列表.重复该过程,直到列表的长度为1001.循环结束后,将打印最后一个数字.
但是,输出如下:
[2, 3]
[2, 3, 5]
_
Run Code Online (Sandbox Code Playgroud)
并且在手动执行之前程序不会终止.你能告诉我我做错了什么吗?
这是因为,在primes[-1] + 2不是素数的情况下,没有状态被改变(因此程序永远循环).
更好的方法可能是这样的:
from itertools import count
primes = [2, 3]
for a in count(5, step=2):
for p in primes:
if a % p == 0:
break
else:
primes.append(a)
if len(primes) > 1001:
break
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |