Skip to main content
 首页 » 编程设计

python之For循环在while循环中中断

2025年05月04日18pander-it

这是我的代码:

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]) 

这应该创建一个列表直到第 1001 个质数,然后打印第 1001 个数。它首先取列表中的最后一个数字并加 2,然后检查给定数字是否可以被素数列表中的任何成员整除。如果它是可整除的,则 for 循环中断并跳过 else 子句。如果不是,则将该数字附加到素数列表。重复该过程,直到列表的长度为 1001。循环结束后,打印最后一个数字。

然而,输出如下:

[2, 3] 
[2, 3, 5] 
_ 

直到手动终止程序才会终止。你能告诉我我做错了什么吗?

请您参考如下方法:

这是因为,在 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