8.10 再谈else语句

在C(以及大多其他语言中),你不会在条件语句范围外发现else语句,但Python不同,你可以在while和for循环中使用else语句。它们是怎么工作的呢?在循环中使用时,else子句只在循环完成后执行,也就是说break语句也会跳过else块。

展示while语句中else用法的一个例子就是寻找一个数的最大约数。我们已经实现了完成这个任务的函数,使用while循环和else语句。例8.1(maxFact.py)利用这个语法完成了showMaxFactor()函数。

例8.1 while-else循环举例(maxFact.py)

8.10 再谈else语句 - 图1

这个程序显示出10~20中的数字的最大约数。该脚本也会提示这个数是否为素数。

showMaxFactor()函数中第3行的循环从amount的一半开始计数(这样就可以检查这个数是否可以被2整除,如果可以,那就找到了最大的约数)。然后循环每次递减1(第10行),直到发现约数(第6~9行)。如果循环递减到1还没有找到约数,那么这个数一定是素数。11~12行的else子句负责处理这样的情况。程序的主体(14~15行)用数字参数调用showMaxFactor()。执行该程序将得到这样的输出:

8.10 再谈else语句 - 图2

同样地,for循环也可以有else用于循环后处理(post-processing)。它和while循环中的else处理方式相同。只要for循环是正常结束的(不是通过break),else子句就会执行。我们在8.5.3已经见过这样的例子。

8.10 再谈else语句 - 图3

a. pass在任何需要语句块(一个或多个语句)的地方都可以使用(例如elif、elif、clasa、def、try、except和finally)。