2017-08-26 61 views
0

我需要編寫一個函數is_prime(),它取整數n> 1,如果數字是素數,則返回TRUE,否則返回False。但是當我輸入2時,它總是返回False。無論如何要糾正這一點?在Python中查找素數

def is_prime(x): 
    if(x > 1): 
     for i in range(2,x+1): 
      if(x % i == 0): 
       return False 
      else: 
       return True 
    else: 
     return False 
+0

你已經寫了錯誤的代碼。檢查它15.你的代碼將顯示它是素數 –

+0

它將返回True對所有奇數 –

+0

嗨!有什麼方法可以改變它嗎?真的很感謝你的幫助。 – Marcus

回答

1

兩個問題:
首先的問題是,範圍包括本數,這意味着它總是會返回true(換號> 1),因爲素數可劃分自己...

修復:改變range(2,x+1)到:range(2, x)

第二個問題,第一else應該對齊的for(我們只是想所有的號碼,並確保他們沒有劃分x後返回true)

固定碼:

def is_prime(x): 
    if x > 1: 
     for i in range(2,x): 
      if x % i == 0: 
       return False 
     else: 
      return True 
    else: 
     return False 
+0

你好!如果我改變範圍爲你提到的。當我在shell中輸入is_prime(2)時,它不會顯示任何內容。 – Marcus

+0

@Marcus'範圍(2,x)'包含2並排除'x'。所以'is_prime(2)'將會返回true - 就像它應該那樣。 – alfasin

+0

我可以再問你一個嗎?可以說x = 2。x%我會== 0嗎? – Marcus

0

雖然@ alfasin的解決方案是正確的(+1),我發現使用else使它稍微更具挑戰性的理解。

的上尤其是forelse需要我,因爲大多數消息人士說,else意味着重讀Python文檔沒有中斷,但它確實意味着正常完成,這是事實的情況下一個根本沒有運行的循環!

這裏是我的返工除去未嚴格要求的else聲明:

def is_prime(x): 
    if x > 1: 
     for i in range(2, x): 
      if x % i == 0: 
       return False 

     return True 

    return False 

正如其他人會指出,這可能是低效率的一個主要的測試,你可以寫。但它的工作。

2

而不是做這個的,你也可以使用SymPy模塊

import sympy 

sympy.isprime(5) 

結果:

True