Python中的if..else

2 投票
2 回答
2409 浏览
提问于 2025-04-17 13:28

我写了一个用Python生成素数的程序,下面是这个程序的代码:

def genPrimes(n):
    primes = [2]  # primes generated so far
    last = 3  # last number tried
    while last <= n:        
        for p in primes:
            if last % p == 0 and math.sqrt(p) <= last:
                break
        else:
            primes.append(last)
        last += 2
    return primes

http://codepad.org/d33tsQyT

这个程序的结果是正确的。不过,如果你注意到else:语句的缩进,它的位置是错的。如果我尝试把else语句放在if块里面,解释器就会显示内存错误。有人能告诉我为什么会这样吗?

提前谢谢大家!
Maries

2 个回答

2

这个位置并没有放错,Python 认为你在使用一个 for-else 循环。

根据文档

在循环中使用的 else 子句,其实和 try 语句的 else 子句更相似,而不是和 if 语句的 else 子句。try 语句的 else 子句是在没有发生异常时执行,而循环的 else 子句是在没有遇到 break 时执行。

4

其实,else是和for循环连在一起的,它会在程序没有跳出循环的时候执行。在你的例子中,如果没有任何质数能整除这个数字,那么else就会执行,这说明这个数字是质数,然后就把它加到列表里。

你可以查看这个文档了解更多。

撰写回答