繁体   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