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



所以目的是:使用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的素数。只有在for循环结束后,才会处理您的while条件。将您的代码更改为:

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函数(错误地)为2返回False,正如@ddejohn所提到的。

相关内容

  • 没有找到相关文章

最新更新