2017-07-15 257 views
3

我的目標是製作一個程序,它可以在屏幕上打印所有它可以找到的素數,但是我有這個問題while循環只運行一次,而不是重複永久。while循環意味着第一次循環後無限凍結

def isPrime(num): 
    if num < 2: 
     return False 
    if num == 2: 
     return True 
    if num % 2 == 0: 
     return False 
    i = 3 
    while i * i <= num: 
     if num % i == 0: 
      return False 
      i += 2 

x = 1 
while True: 
    x += 1 
    if isPrime(x): 
     print (x) 

我也試圖在代碼的末尾添加print("You can see this."),它運行,但只有一次。 我確定這是一個常見的錯誤,因爲Python對縮進非常嚴格,但是你們能幫我發現嗎?提前致謝。

回答

2

i +=2縮進太深,內循環不會退出。

它應該閱讀

while i * i <= num: 
    if num % i == 0: 
     return False 
    i += 2 

否則i永遠不會增加,循環的推移和和。

+0

你能改說嗎?我不明白你的意思,對不起... –

+0

哦,這是我的一個愚蠢的錯誤......謝謝。仍然無法正常工作,但... –

2

您需要return True在最後的循環之後。否則函數結束時沒有顯式返回任何東西,所以它隱含地返回None,這被解釋爲false。