Python:isPrime函数会打印太多答案

时间:2015-12-09 18:55:41

标签: python for-loop

问题是我的代码打印

"The number you entered is prime"

很多次取决于我输入的数字,然后是

"That number is not prime"

如果数字不是素数。我知道为什么它这样做(这是因为if语句继续循环返回for循环,直到它找到一个均匀分割的数字,然后它打印出“not prime”结果),但我问的是我是怎么做的解决它?

def isprime(n):
try:
    npnc = "Neither prime nor composite"
    if isinstance(n, complex) == True:
        print("Sorry, trial division doesn't like negative numbers. Try again.")
    elif n == 0:
        return npnc
    elif n == 1:
        return npnc
    else:
        for m in range(2, (int(n**.5)+1)):
            if n%m == 0:
                print("That number is not prime")
                break
            elif n%m > 0:
                print("The number you entered is prime")

注意:它确实有一个“我没有包含的”ValueError“。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用for..else。如果你没有突破循环,那么程序会在else之后执行for部分。

for m in range(2, (int(n**.5)+1)):
    if n%m == 0:
        print("That number is not prime")
        break
else:
    print("number is prime")

与:

相同
found = False
for m in range(2, (int(n**.5)+1)):
    if n%m == 0:
        print("That number is not prime")
        found = True
        break
if not found:
    print("number is prime")

docs

答案 1 :(得分:0)

在你的函数中使用它 - 分解任务总是很好,而在这个的情况下,它允许早期返回:

def isprime_impl(n):
    for m in range(2, (int(n**.5)+1)):
        if n%m == 0:
            return False
    return True