2

素数を生成するプログラムをPythonで作成しました。これがプログラムです。

def genPrimes(n):
    primes = [2]  # primes generated so far
    last = 3  # last number tried
    while last <= n:        
        for p in primes:
            if last % p == 0 and math.sqrt(p) <= last:
                break
        else:
            primes.append(last)
        last += 2
    return primes

http://codepad.org/d33tsQyT

このプログラムは正しい答えを生み出しています。else:ステートメントのインデントが表示されている場合は、間違って配置されています。ブロックインタープリターがメモリエラーを示している場合にelseステートメントを配置しようとすると。なぜこれが起こっているのか誰にも分かりますか?

よろしくお願いしますマリーズ

4

2 に答える 2

4

else実際にはforループに接続されており、プログラムがループから抜け出さない場合に実行されます。あなたの場合、素数のどれも数に分割されない場合に実行されるので、数は素数であり、リストに追加されます。

ドキュメントも参照してください。

于 2013-01-24T01:03:29.193 に答える
2

間違って配置されていません。Pythonはfor-elseループを使用していると想定しています。

ドキュメントから:

ループとともに使用すると、else句はifステートメントよりもtryステートメントのelse句との共通点が多くなります。tryステートメントのelse句は例外が発生しない場合に実行され、ループのelse句はブレークが発生しない場合に実行されます。 。

于 2013-01-24T01:03:37.747 に答える