虽然循环意味着在第一个循环后无限冻结

时间:2017-07-15 16:26:56

标签: python while-loop primes infinite

我的目标是创建一个程序,在屏幕上打印它可以找到的所有素数,但我有这个问题,while循环只运行一次,而不是永远重复。

def isPrime(num):
    if num < 2:
        return False
    if num == 2:
        return True
    if num % 2 == 0:
        return False
    i = 3
    while i * i <= num:
        if num % i == 0:
            return False
            i += 2

x = 1
while True:
    x += 1
    if isPrime(x):
        print (x)

我也尝试在代码的最后添加print("You can see this."),然后运行,但只运行一次。 我确定这是一个常见的错误,因为Python对缩进非常严格,但是你能帮助我发现它吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

i +=2缩进太深,内循环永不退出。

应该阅读

while i * i <= num:
    if num % i == 0:
        return False
    i += 2

否则i永远不会增加,循环会继续打开和继续。

答案 1 :(得分:2)

最后一个循环之后和之外,你需要return True。否则函数结束而不显式返回任何内容,因此它隐式返回None,它被解释为false。