簡體   English   中英

當我想為輸入5輸入“ True”時,將打印“ None”

[英]'None' is printed when I want 'True' for input 5

在此素數測試程序中,當我輸入素數而不是“ True”時,將打印“ None”。 如何獲得打印“ True”的字樣?

    def main():
        import math
        def check_n(n):
            n_s = int(math.sqrt(n))
            for i in range(2, n_s):
                if (n_s % i) == 0:
                    return False
                    break
                else:
                    return True
        def msg():
            n = int(input('Enter a number, I will return True if it is a prime'))
            return n

        print(check_n(msg()))

    main()

您需要將int(math.sqrt(n))更改為int(math.sqrt(n)+1) ,因為range一直運行到n_s-1 因此,如果輸入為5, range(2,int(math.sqrt(5)))只是range(2,2) ,為空。

另外,您需要在for循環之外使用return True ,否則您的代碼可能會在初期階段停止。 return False之后,您也不需要break語句(該函數將永遠不會到達該行,因為如果輸入到if語句,它將返回False )。

最后,將if (n_s % i) == 0:更改為if (n % i) == 0:因為您需要檢查n是否可被i整除(而不是其平方根)。

這是一個更干凈的版本:

import math
def check_n(n):
    n_s = int(math.sqrt(n)+1)
    for i in range(2, n_s):
        if (n % i) == 0:
            return False
    return True
def msg():
    n = int(input('Enter a number, I will return True if it is a prime'))
    return n
print(check_n(msg()))

第一:您的break語句是多余的。

第二:對於諸如3之類的值,永遠不會執行for循環,因為值n_s小於2,並且由於for循環未執行,因此python返回默認值None(未指定任何值時返回)。 因此,您的check_n(n)函數必須為

def check_n(n):
    n_s = int(math.sqrt(n))
    for i in range(2, n_s + 1):
        if (n_s % i) == 0:
            return False
    return True

一線

check_n = lambda n : sum([i for i in range(2, int(math.sqrt(n)+1)) if n % i == 0]) == 0

不要把事情復雜化..

選擇小於9的范圍時,范圍是(2,2)或None 。因此,要解決您的第一個問題:將2加到n_s (對於輸入3)

您的邏輯也有問題。

您的for循環應檢查n mod i為0,而不是n_s

這應該工作:

def main():
    import math
    def check_n(n):
        n_s = int(math.sqrt(n)+1)
        for i in range(2, n_s):
            if (n % i) == 0:
                return False
        return True
    def msg():
        n = int(input('Enter a number, I will return True if it is a prime'))
        return n

    print(check_n(msg()))

main()

暫無
暫無

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

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