python代码提供错误的输出

时间:2016-03-11 21:02:32

标签: python

我在python中编写了下面的代码来打印出素数,但它的输出如下:

3,5,7,**9**,11,13,**15**,17,19,**21**,23,25............99

下面是代码:

def isprime(n):
    if n == 1:
        return False
    for x in range(2, n):
        if n % x == 0:
            return False
        else:
            return True

def primes(n = 1):
    while(True):
        if isprime(n): yield n
        n += 1
for n in primes():
    if n > 100: break
    print(n)

2 个答案:

答案 0 :(得分:4)

在数字无法被一个号码整除后,您将返回True。检查所有数字后,您需要返回true。相反,你应该写

def isprime(n):
    if n == 1:
        return False
    for x in range(2, n):
        if n % x == 0:
            return False

    return True

另一个注意事项:如果您正在测试素数,则只需要测试数字的平方根。如果数字不能被任何小于其平方根的数字整除,那么它也不能被任何更大的数除尽,因此必须是素数。这有助于提高代码的效率。

答案 1 :(得分:1)

您的isprime函数说:

for x in range(2, n):
    if n % x == 0:
        return False
    else:
        return True

这意味着在第一次迭代(当x==2时),如果n%x不为零,它将返回True。因此,对于任何奇数(大于1,你跳过),它将返回True。

相反,如果循环中的数字的 none 是因子,则要返回True。

for x in range(2, n):
    if n % x == 0:
        return False
# the loop finished without returning false, so none of the numbers was a factor
return True