![Python程序设计教程(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/531/34752531/b_34752531.jpg)
3.2.4 带else的循环语句
前面我们介绍了简单的while和for循环结构。与一般程序设计语言不同,Python中的while和for语句后面还可以带有else语句块。
带else的while语句语法如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image942.jpg?sign=1738957364-NnohPjfvQEv7wuBHHdGINAZGiWifhuDB-0-ee1ca277c165d87a374b56ee4ae9de47)
当条件表达式为真(True、非空、非零)时,反复执行循环体。当循环因为while后面的条件表达式为假(False、零、空)而导致循环终止,else语句块执行一次,然后结束该循环结构。如果该循环是因为执行了循环体中的break语句而导致循环终止,else语句块不会执行,直接结束该循环结构。
如果循环体中没有break语句,带else语句块的while循环执行流程可以用图3.8(a)表示。如果循环体中包含break语句,带else语句块的while循环执行流程可以用图3.8(b)表示。图3.8(b)中,循环体1、break语句部分、循环体2共同构成循环体。
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image941.jpg?sign=1738957364-ChjyRItfO6xHAMsTgD5BB5cEJDIM53qv-0-5fdff9b39aad7e7b5992c6cc453fa642)
图3.8 while-else循环结构的执行流程
【例3-11】 从键盘输入一个正整数n,用while循环找出小于等于该整数n且能被23整除的最大正整数。如果找到了,输出该整数;如果没有找到,则输出“未找到”。
程序代码:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image943.jpg?sign=1738957364-E66IwUDEiK2g3ZTHusIgpiAG7w6Qy8S9-0-835056a42ccdb276a43bca7d63231d60)
一种执行情况如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image944.jpg?sign=1738957364-bHguEQJsgu16TKgKxai5aPLl5NBY5OFo-0-c69b6c72093070876da4ecc200c59757)
另一种执行情况如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image945.jpg?sign=1738957364-5ESH24Vvm4qtvvpXWJQN93YPcSEgK5t8-0-dab73c9babaeae94349a0aeb157011af)
带else的for语句语法如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image946.jpg?sign=1738957364-ly0loFXwBbMZyUthSfu1deah0KWl6bPu-0-15ad9761c93d521f0d8880d5e533962a)
当变量能够从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的元素,并打印该元素的值。如果没有找到,则输出“未找到”。
程序代码:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image947.jpg?sign=1738957364-N2uXbGFeN6SR7iRQAbjnbfo79J4Ps5oF-0-1c3e6132dc2c537fef2271a74fc228ca)
程序运行结果:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image949.jpg?sign=1738957364-uzdAJi7zR5GXcDcGfgk9OB5xSvGE0faA-0-37bbff2342183c52c7f309aa049a12fd)
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image948.jpg?sign=1738957364-irSfu05TH047MawLf9gH0DiZJKzyhsJc-0-806793cd3c8f138f0563f7c53dbef77d)
图3.9 for-else结构执行流程图