创建包含前 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 所述。
所以目的是:使用 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 所述。