![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=1738962728-4EbQgJ4RKywCOIpv06r0f2AbsUszzO7i-0-8984b1297a0ee1a519f486e3e02c37f6)
当条件表达式为真(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=1738962728-gnuNXchH8hcVibWHKFHsFhJ1921tK7N6-0-0028d8dda744fabf48c2de59bf44bc66)
图3.8 while-else循环结构的执行流程
【例3-11】 从键盘输入一个正整数n,用while循环找出小于等于该整数n且能被23整除的最大正整数。如果找到了,输出该整数;如果没有找到,则输出“未找到”。
程序代码:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image943.jpg?sign=1738962728-TYkl628Z2Jia9Z71Tb4Qxrmhd9nON4O7-0-e1a3920354808e5c2e8aa6f99a53c743)
一种执行情况如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image944.jpg?sign=1738962728-O3bgbMtC3ojTGjQo543hsih8mjIKsCBs-0-32aba7f410033334b38fdc5409259e54)
另一种执行情况如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image945.jpg?sign=1738962728-fXJQqhd4wjyVTCThFIzSzhwtCk1rFc51-0-5e83e1a2b2142863716d3652c62b9686)
带else的for语句语法如下:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image946.jpg?sign=1738962728-gqVKlQw3cVnb06CFO9W52chMaxkJ1VbQ-0-fde7ad874d873a5a6ae0258fe89ff027)
当变量能够从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=1738962728-a6Uo1s6JqfMBMKWIBMCwqkXd7In28yjr-0-82f109e3a685fbe50e3a5f2fb6e300b4)
程序运行结果:
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image949.jpg?sign=1738962728-UjH7gS5wbats6wM9n28sncZI3duCuIVP-0-a95e4a47ba52160383c8e7fa0dd66f37)
![](https://epubservercos.yuewen.com/8599B6/18562449808364906/epubprivate/OEBPS/Images/image948.jpg?sign=1738962728-UP9f05ZiyO89NtdJWB4AjIvvCweP90cS-0-a02daaf4add9402a3c5fef93fa073ab5)
图3.9 for-else结构执行流程图