2017-07-15 2 views
3

私の目標は、画面上にすべての素数を表示するプログラムを作ることですが、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と解釈されます。

関連する問題