![Python王者归来](https://wfqqreader-1252317822.image.myqcloud.com/cover/412/31794412/b_31794412.jpg)
7-4 while循环
这也是一个循环,基本上循环会一直执行直到条件运算为False才会离开循环,所以设计while循环时一定要设计一个条件可以离开循环,相当于让循环结束。程序设计时,如果忘了设计条件可以离开循环,程序造成无限循环状态,此时可以同时按Ctrl+C键,中断程序的执行离开无限循环的陷阱。
一般while循环常应用在不知道循环何时可以结束的状况,for循环在使用时是早已经知道循环即将执行的次数。不过我们也可以透过一些技巧,让while循环也可以应用在已经知道循环即将执行的次数上。它的语法格式如下:
while 条件运算: 程序区块
下列是while循环语法流程图。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P98_54958.jpg?sign=1738885854-pzfpYd1KPFHRLznrzLipJvUU0ppru6x5-0-c4b419ef986bf4346567e084ce5c66ca)
7-4-1 基本while循环
程序实例ch7_26.py:这个程序会输出你所输入的内容,当输入q时,程序才会执行结束。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P98_54962.jpg?sign=1738885854-ESauZPBKHTajqkfrtxIHfgIbzpbzb2tS-0-eb5fbc9a2360c603a80399ba91db6be0)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P98_54985.jpg?sign=1738885854-TSbYLZaEJTg6Ez1N8XhODdZLg7CLGMoA-0-f635367b4b3dc0348c2416a9c7b5737f)
上述程序最大的缺点是,当输入q时,程序也将输出q,然后才结束while循环,我们可以使用下列第8行增加if条件判断方式改良。
程序实例ch7_27.py:改良程序ch7_26.py,当输入q时,不再输出q。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55386.jpg?sign=1738885854-h3fGcgGzfHHZPG1kBJSl5F4EAXxLNvTZ-0-a1d861af0be5c988ed679fff8da3c4bb)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55405.jpg?sign=1738885854-vp8XER5GVuOi5ScrGa5YHKu2uXCBw9gQ-0-0037a0005930ab35ab7f18751cb3781e)
上述程序尽管可以完成工作,但是当我们在设计大型程序时,如果可以有更明确的标记记录程序是否继续执行将更佳,下列笔者将用一个布尔变量值active当作标记,如果是True则while循环继续,否则while循环结束。
程序实例ch7_28.py:改良ch7_27.py程序的可读性,使用标记active记录是否循环继续。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55406.jpg?sign=1738885854-ku9E3FMfDhvUDVEw7q8Ha58mhOSNuPzM-0-5f430ed437eab7b79b743406a294bc19)
执行结果 与ch7_27.py相同。
程序实例ch7_29.py:猜数字游戏,程序第2行用变量answer存储欲猜的数字,程序执行时用变量guess存储所猜的数字。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55390.jpg?sign=1738885854-7f3o46ZiD0auSfnpLTRVA5askji1lFp5-0-a72b53ae416b6c7cbdf4d2f078ebd140)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55396.jpg?sign=1738885854-V3SKN446bK3Xx1MupOTco6zh1U8nzXBh-0-5ddb5354cc4834d74e9e5d364457e61e)
下列是使用while循环,已经知道要执行多少次循环了的实例。
程序实例ch7_30.py:while循环索引值变化的观察。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55399.jpg?sign=1738885854-H16o8S5bjXq6uodGhu3M2k07hs0jLgkW-0-8f15ef624d166df5087e015e94e940b0)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55419.jpg?sign=1738885854-aO6QN4BOjGNiIdqlp4xw546e1HPBid1c-0-1fa59825c33a3bbdf791ff68a0f1b375)
7-4-2 嵌套while循环
while循环也允许嵌套循环,此时的语法格式如下:
while 条件运算: # 外层while循环 … while 条件运算:# 内层while循环 …
程序实例ch7_31.py:使用while循环重新设计ch7_19.py,打印九九乘法表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_12988.jpg?sign=1738885854-QrdLGU9rwGBGpplTcdRihcXlEW7mGFmM-0-b2bcf97db5017c5c92e89405f9431b8e)
执行结果 与ch7_19.py相同。
7-4-3 强制离开while循环-break指令
7-3-2节所介绍的break指令与观念,也可以应用在while循环。在设计while循环时,如果期待某些条件发生时可以离开循环,可以在循环内执行break指令立即离开循环,这个指令通常是和if语句配合使用。下列是常用的语法格式:
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_238704.jpg?sign=1738885854-iEP45abSf1gWKTaxCQ2LEJA2QaxCzI1M-0-32f35ad225ae3d20f184d06c17f70819)
程序实例ch7_32.py:这个程序会先建立while无限循环,如果输入q,则可跳出这个while无限循环。程序内容主要是要求输入水果,然后输出此水果。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_12998.jpg?sign=1738885854-NGfFppc37R0aI7cA0gYIZFj3QQfEYarY-0-3e5cc5427e143d6c910c884bfc237ab9)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_13004.jpg?sign=1738885854-6jkRm83u965jlWVvIs1274Y8RwznCWiv-0-17fc7be2e39e5479497450cd6f51799a)
程序实例ch7_33.py:使用while循环重新设计ch7_22.py。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_13007.jpg?sign=1738885854-R551Nssnkak6CNsHMZnOY5pfKHqurtir-0-5dba91f97ae943e3ceded8d736cffd6a)
执行结果 与ch7_22.py相同。
上述程序第6行的“index < len(players)”相当于是语法格式的条件表达式A,控制循环是否终止。程序第7行的“index == n”相当于是语法格式的条件表达式B,可以控制是否中途离开while循环。
7-4-4 while循环暂时停止不往下执行-continue指令
在设计while循环时,如果期待某些条件发生时可以不往下执行循环内容,此时可以用continue指令,这个指令通常是和if语句配合使用。下列是常用的语法格式:
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_238705.jpg?sign=1738885854-eyBnX9LLKBj1tHU0AsxW08LAyDzv6YG9-0-5d2cbc148c1addc8a7ab4c73ebcb89f8)
程序实例ch7_34.py:列出1至10之间的偶数。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13417.jpg?sign=1738885854-VVFyGPdTJFipNV9Xl0wylA2P1SvP33mX-0-818e2a42532269e514ef36a3876e0668)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13423.jpg?sign=1738885854-x2pWUFVq6S0HI44DwKHaurvlIDsuifoh-0-584208fad933328603999fe0cc8681da)
7-4-5 while循环条件表达式与对象
while循环的条件表达式也可与对象(列表、元组或字典)配合使用,此时它的语法格式如下:
while 条件表达式:# 与有关的条件表达式
程序区块
程序实例ch7_35.py:删除列表内的apple字符串,程序第5行,只要在fruits列表内可以找到变量apple,就会传回True,循环将继续。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13427.jpg?sign=1738885854-VctGuHY0rE5clgeNWAdXFJg8tdOjcoa0-0-ba17b877bbb9bc9bdc3dfc5a1f724ad3)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13433.jpg?sign=1738885854-8ZDpcoglQSvFt9bnjhlsiP2bzNpp6za7-0-eaab1f9d4625aed1cfd5e52d95855c39)
程序实例ch7_36.py:有一个列表buyers,此列表内含购买者和消费金额,如果购买金额超过或达到1000元,则归类为VIP买家vipbuyers列表。否则是Gold买家goldbuyers列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13436.jpg?sign=1738885854-HB0x5Z1VbQ2wsRGpaGk6u3n0EXPL58Jn-0-13d55d81dcc9f0692626a2d32cecdf05)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13442.jpg?sign=1738885854-FPa4WxZRTuF9f7YqOETtH2btO50CIMYT-0-067815e6dcd5ea531ae827f5ec66a989)
上述程序第9行只要列表不是空列表,while循环就会一直执行。
7-4-6 pass
pass指令是什么事也不做,如果我们想要建立一个无限循环可以使用下列写法。
while True: pass
不过不建议这么做,这会让程序进入无限循环。这个指令有时候会用在设计一个循环或函数(将在第11-8节解说)尚未完成时,先放pass,未来再用完整程序代码取代。
程序实例ch7_37.py:pass应用在循环的实例,这个程序的循环尚未设计完成,所以笔者先用pass处理。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P102_13851.jpg?sign=1738885854-aeJlBxNGCofGTjZDcOPXGxciFjKH4LL4-0-c2bee6b92ca42bb27cad68600387fa14)
执行结果 没有任何数据输出。