所以目的是:使用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"
為什么會發生這個錯誤?我該如何解決?感謝您的任何幫助!
uj5u.com熱心網友回復:
這不是一個無限回圈,只是一個很長很慢的回圈。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功能(錯誤地)回傳False用于2為@ddejohn提及。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314083.html
上一篇:我想忽略動態值中的“\”
