2017-04-12 51 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'是prime',但是在整個循環結束之前你不知道它是素數。另外,如果數字是2,則直接跳到「不是素數」。 – khelwood

+0

我修正了它。我不得不在for循環外面加上「else:number是prime」。 –

回答

3

由於2不大於2,所以它落入else條件。

要解決它,你必須爲2創建一個特殊情況:

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") 

編輯:使用換其他的@Azat Ibrakov建議

+1

這仍然無法正常工作找到質數。據此,9是素數。 – khelwood

+0

@khelwood應該固定 – fedterzi

+1

'number = int(input())作爲int類型是無效的Python語法,並且不是OP代碼的一部分[啊,它是OP的_original_代碼的一部分。這是甚至運行? – DSM

0

請在下面找到我的代碼,我繞過2.

值'2'永遠不會經過循環,因此默認打印'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: 總理