2015-05-31 51 views
1

我試圖在Python中創建一個函數,用來檢查一個給定的號碼是否是數,所以我寫了這個代碼:素數乘以3所示爲素數

def is_prime(x): 
    if x<2: 
     return False 
    elif x==2: 
     return True 
    else: 
     for n in range(2,x): 
      if (x%n)==0: 
       return False 
      else: 
       return True 

出於某種原因,每個總數爲(Prime_number * 3)的數字顯示爲素數(例如,這些數字顯示爲素數:9,21,15,25 ...) 任何人都可以看到我的代碼有問題?

+2

這將是一個很好的閱讀給你:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

回答

1

因爲您return在循環的第一次迭代。直到循環耗盡之後,才能知道某些東西是素數。因此,在迭代完成之前不要返回True

def is_prime(x): 
    if x<2: 
     return False 
    elif x==2: 
     return True 
    else: 
     for n in range(2,x): 
      if (x%n)==0: 
       return False 
     return True 
2

出現這種情況,是因爲你從is_prime環路上的第一個迭代返回。您測試x是否可以被2除,如果是則返回True,否則返回False

從循環中刪除else子句並在其結束後返回True

def is_prime(x): 
    if x<2: 
     return False 
    elif x==2: 
     return True 
    else: 
     for n in range(2,x): 
      if (x%n)==0: 
       return False 
     return True 
0

一個更有效的方法只會迭代到x的平方根。

import math; 
def isPrime(x): 
    if x < 2: 
     return False; 
    elif x == 2: 
     return True; 
    else: 
     for n in range(2, int(math.sqrt(x))+1): 
      if x%n == 0: 
       return False; 
     return True; 

# Test the method for first 50 natural numbers 
for i in range(51): 
    if isPrime(i): 
     print i;