簡體   English   中英

Prime 的布爾檢查不正確

[英]Incorrect boolean checking for Prime

為什么下面的代碼應該返回 False 時返回 True。 試圖測試數字是否為素數。

代碼的目的是循環 this range(2,n) ,如果有任何數字 i 除以 n(余數為 0),則返回 False。 代碼為 25 返回 True(不正確),但為 20 返回 False(正確)。當循環達到 5 時,25%5 為 0,因此它應該返回 False。 我哪里做錯了。 還有其他方法可以檢查數字是否為素數,但我想知道為什么這種方法不適用於 25 但適用於 20。

def isPrime(n):
    """ 
    """
    for i in range(2,n):
        if n%i == 0:
            return False
        else:
            return True

def main():
    print isPrime(25) #Should return False


if __name__ == '__main__':
    main()

這是另一個沒有返回語句的實現,它得到了我想更好地理解的代碼區域。

for i in range(2,n+1):
    if n%i == 0:
        print 'for i =',i,'n%i =',n%i,'Therefore',n,'is not a prime'
        print 'Should break out of loop here and return False'
    else:
        print 'for i =',i,'n%i =',n%i

這是示例輸出。

for i = 2 n%i = 0 Therefore 10 is not a prime
Should break out of loop here and return False
for i = 3 n%i = 1
for i = 4 n%i = 2
for i = 5 n%i = 0 Therefore 10 is not a prime
Should break out of loop here and return False
for i = 6 n%i = 4
for i = 7 n%i = 3
for i = 8 n%i = 2
for i = 9 n%i = 1

那么,不應該在 i 是 2 的地方或當 n 是 10 的時候我是 5 嗎? 為什么不呢?

在您的代碼中,您正在檢查該范圍內的每個數字,同時您返回 true 或 false,這是一個壞主意。 如果該范圍內的所有數字與您的條件不匹配,您必須返回 false。 而不是在您的編碼中檢查每個元素。

def isPrime(n):
    """ 
    """
    for i in range(2, n):
        if n % i == 0:
            return False
    else:
            return True
print isPrime(25)

因此,如果您使用for loop編寫else ,它將首先對范圍內的所有元素執行,如果沒有任何匹配項,它將轉到 else 部分,而不是檢查該范圍內的每個元素的if:..Else:..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM