2014-04-15 117 views
0
def is_prime(number): 
    for i in range(2, number): 
     if number % 1 == 0 and number % i == 0: 
      return False 
     else: 
      return True 
print(is_prime(13))  
print(is_prime(55)) #True ##Why ??? 
def prime_numbers(a, b): 
    lst = [] 
    for i in range(a,b+1): 
     if is_prime(i): 
      lst.append(i) 
    return lst 

print(prime_numbers(50, 100)) 

這是我的代碼,假設我有prime_numbers(50, 100)查找範圍內的素數

它應該返回[53, 59, 61, 67, 71, 73, 79, 83, 89, 97]而不是

[51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

那麼我的代碼有什麼問題?

+0

[isPrime Function for Python Language](http://stackoverflow.com/questions/15285534/isprime-function-for-python-language) –

+0

但您真的很渴望地返回'True'。 –

+1

這已經在下面得到了回答,但我只是補充說,遍歷範圍'(2,數字)'沒有意義。你只需要走到'數字'的一半,因爲任何大於這個數字的數字都不能均勻地分成數字。我可能還要確保'number'是一個整數,否則'range'可能會引發錯誤。 – elParaguayo

回答

2

重新定位return True行:

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

    return True 


print(is_prime(13)) # True 
print(is_prime(55)) # False 

您的代碼不工作,因爲你第一次迭代時返回TrueFalse

+0

然後print(is_prime(13))也將爲false – user3419984

+0

應該在這種情況下爲真 – user3419984

+0

@ user3419984否,'is_prime(13)'爲真 – vaultah