3.2.4 带else的循环语句

前面我们介绍了简单的while和for循环结构。与一般程序设计语言不同,Python中的while和for语句后面还可以带有else语句块。

带else的while语句语法如下:

当条件表达式为真(True、非空、非零)时,反复执行循环体。当循环因为while后面的条件表达式为假(False、零、空)而导致循环终止,else语句块执行一次,然后结束该循环结构。如果该循环是因为执行了循环体中的break语句而导致循环终止,else语句块不会执行,直接结束该循环结构。

如果循环体中没有break语句,带else语句块的while循环执行流程可以用图3.8(a)表示。如果循环体中包含break语句,带else语句块的while循环执行流程可以用图3.8(b)表示。图3.8(b)中,循环体1、break语句部分、循环体2共同构成循环体。

图3.8 while-else循环结构的执行流程

【例3-11】 从键盘输入一个正整数n,用while循环找出小于等于该整数n且能被23整除的最大正整数。如果找到了,输出该整数;如果没有找到,则输出“未找到”。

程序代码:

一种执行情况如下:

另一种执行情况如下:

带else的for语句语法如下:

当变量能够从in后面的序列或可迭代对象中取到值,则执行循环体。循环体结束后,变量重新从序列或可迭代对象中取值。当变量从in后面的序列或可迭代对象中取不到新的值,则循环终止,else语句块执行一次,然后终止循环结构。当循环是因为循环体中执行了break语句而导致终止,则else语句块不执行,直接终止循环结构。

如果循环体中没有break语句,带else语句块的for循环执行流程可以用图3.9(a)表示,如果循环体中带有break语句,带else语句块的for循环执行流程可以用图3.9(b)表示。图3.9(b)中,循环体1、break语句部分、循环体2共同构成循环体。

【例3-12】 有一个列表sales=[5000,3000,8000,10600,6000,5000]。该列表中的元素依次表示某产品1~6月的销售额。请用for循环遍历该列表,找到第一个销售额大于等于6000的元素,并打印该元素的值。如果没有找到,则输出“未找到”。

程序代码:

程序运行结果:

图3.9 for-else结构执行流程图