2017-04-12 29 views
0

私は、数値が素数かどうかを判断するPythonプログラムを作成しています。これは私が持っているものです:Python素数プログラムが動作しない

print("Please enter your number:") 
number = int(input()) 


if number > 2: 
    for i in range (2,number): 
     if (number % i) == 0: 
      print(number, "is not prime") 
      break 
     else: 
      print(number, "is prime") 
      break 
else: 
    print(number, "is not prime") 

2以外のすべてのユースケースで機能します。なぜですか?それをどうやって修正することができますか?

+2

これは_not_作業を行います「2を除くすべてのユースケース」に対して。数字9で試してみてください。 'print 'はループの中で素数ですが、ループ全体が終了するまで素数であることは分かりません。また、数字が2の場合は「素数ではありません」とまっすぐにスキップしています。 – khelwood

+0

私はそれを修正しました。私はforループの外側に "else:number is prime"を入れなければなりませんでした。 –

答えて

3

2は2より大きくないため、else条件になります。

print("Please enter your number:") 
number = int(input()) 

if number > 2: 
    for i in range (2,number): 
     if (number % i) == 0: 
      print(number, "is not prime") 
      break 
    else: 
      print(number, "is prime") 
elif number == 2: 
    print(number, "is prime") 
else: 
    print(number, "is not prime") 

編集を::

あなたは2のための特別なケースを作成する必要があり、それを修正するには@Azat Ibrakovは私のコードの下に見つけてください

+1

これはまだ素数を見つけるためには正しく動作しません。これによると、9は素数です。 – khelwood

+0

@khelwood固定でなければならない – fedterzi

+1

'int = input())int型は有効なPython構文ではなく、OPコードの一部ではありません[OP、_ORiginal_コードの一部です。これも走っていますか? – DSM

0

を示唆するようにするために、他の使用して、私は2

をバイパス

値 '2'はforループを経由しないので、デフォルトで 'Prime'を出力します。

他のすべてについては、期待どおりに動作します。

for i in range (1,100): 
    self.bar(i) 

def bar(self,number): 

    if number > 1 : 
     for i in range(2,number): 
      r = number % i 
      if r == 0 : 
       return 
     print(str(number) + ' : Prime') 

2:プライム3プライム5:プライム7:プライム11:プライム13:プライム17:
プライム19:プライム23:プライム29:プライム31:プライム37:41プライム:
プライム43:プライム47:プライム53:プライム59:プライム61:プライム67:
プライム71:プライム73:プライム79:プライム83:プライム89:プライム97: プライム

関連する問題