创建包含前 100 个质数的列表时出现无限错误

Endless error while creating a list containing first 100 prime numbers

所以目的是:使用 while 循环和你的 is_prime 函数,定义一个包含前 100 个素数的列表。

我的 is_prime 函数代码如下:

def is_prime(n):
    if isinstance(n,int) == False:
        return False
    if n%2==0 or n<2: 
        return False
    if n==2 or n==3: 
        return True
    if n%3 == 0: 
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

有效,然后我写道:

first_primes = []
while len(first_primes)<100:
    for j in range(0,10**6):
        if is_prime(j) == True:
            first_primes.append(j)
first_primes

然而,代码无休止地运行,当我停止它时,我得到

KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-20-0abfdab33706> in <module>
      2 while len(first_primes)<100:
      3     for j in range(0,10**6):
----> 4         if is_prime(j) == True:
      5             first_primes.append(j)

<ipython-input-18-a97bbcf0d07f> in is_prime(n)
      9         return False
     10     for i in range(2, n):
---> 11         if n % i == 0:
     12             return False
     13     return True"

为什么会出现这个错误?我该如何解决?感谢您的帮助!

这不是一个无限循环,只是一个很长很慢的循环。你的 for 循环无论如何都会完成,所以你要等到找到所有小于 10^6 的素数。您的 while 条件只会在 for 循环完成后处理。将您的代码更改为:

first_primes = []
for j in range(0, 10**6):
    if is_prime(j):
        first_primes.append(j)
    if len(first_primes) >= 100:
        break

如果这是一个赋值并且你必须使用while循环,那么试试:

first_primes = []
j = 2
while len(first_primes) < 100:
    if is_prime(j):
        first_primes.append(j)
    j += 1

另请注意,您的 is_prime 函数(错误地)returns False for 2 如@ddejohn 所述。