![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=1739662025-FCLmz1i5ORDLTHj8oz9UdaYtt0kgarIg-0-cc2d3af3eccc5f88cb30e58649f871d4)
7-4-1 基本while循环
程序实例ch7_26.py:这个程序会输出你所输入的内容,当输入q时,程序才会执行结束。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P98_54962.jpg?sign=1739662025-LFnQro0l53vboBtVHbjWpzuASus0bPh2-0-412df88c56fd8ea1a09294f785e5ddc5)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P98_54985.jpg?sign=1739662025-qicm7HRPOScWVot2x748M9NOAn8mGRGG-0-48d1dc096930b840e661fdddf6125fc8)
上述程序最大的缺点是,当输入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=1739662025-0VRguxRKxJ92giNaZaT9SCDliGLZFUHQ-0-aa3319caddbdc2dd79fe7ba2780103c7)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55405.jpg?sign=1739662025-VS5V3x70uOat9TDwm1QKMo17I4g5t7oD-0-9fc0ec21acf972e112fdbab7014e6f60)
上述程序尽管可以完成工作,但是当我们在设计大型程序时,如果可以有更明确的标记记录程序是否继续执行将更佳,下列笔者将用一个布尔变量值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=1739662025-FUuDQMiaQunFKjcuk06pvYlnybbdQUbJ-0-1599b48864e545787064cc04faf099e0)
执行结果 与ch7_27.py相同。
程序实例ch7_29.py:猜数字游戏,程序第2行用变量answer存储欲猜的数字,程序执行时用变量guess存储所猜的数字。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55390.jpg?sign=1739662025-6SbxzpmiFzA7cy9k1qI5Gie45YsTfDuf-0-80819224ad6d64fa874cd19d5c511eb4)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55396.jpg?sign=1739662025-eJm5kcY6Z6ulTgLftD5jc4EtXBc9LLOK-0-4de17c0e92c9feac841980fd39c804e4)
下列是使用while循环,已经知道要执行多少次循环了的实例。
程序实例ch7_30.py:while循环索引值变化的观察。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55399.jpg?sign=1739662025-StNRaYhkjxGS2ShSB7B6dDBYkgR9hAUL-0-31b8c3c6722ef60df91817d43fd584d4)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P99_55419.jpg?sign=1739662025-eNleQt7IRV1IL0OfKFUJcksuHJlCpebm-0-773392a26c53410a2dc0cf6017fe98ef)
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=1739662025-8ob3geFL2e3NKo6suIBoMxpASjqd2vUJ-0-1ddba9f5b0b42b818dbccd881e122452)
执行结果 与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=1739662025-oRKuETVaomatfBO3LmNbH1cXwSu2bzGu-0-57de2909b46809c8c84898ca1d44dd23)
程序实例ch7_32.py:这个程序会先建立while无限循环,如果输入q,则可跳出这个while无限循环。程序内容主要是要求输入水果,然后输出此水果。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_12998.jpg?sign=1739662025-qiIkE4zbsQMQj8TRV8CS0u9Vx9hq7E8q-0-4b3aa1a97245feb6e1bdfc3a118f7c70)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_13004.jpg?sign=1739662025-QIjWWYsfwvb0yWmDL6B0eLEGF3LqWLb7-0-3d6936df05c7b12dddeedac82b92092e)
程序实例ch7_33.py:使用while循环重新设计ch7_22.py。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P100_13007.jpg?sign=1739662025-tTWMjdWHHf6Uzhb6mnzG6QwjJmVkVxXm-0-686872a1a7595ff257eb7046e7315aad)
执行结果 与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=1739662025-Qiuk7pKpfa3a2GVVU9EatC36gcwlWZn8-0-3fa0f4ee730c5b3e337db289da09840c)
程序实例ch7_34.py:列出1至10之间的偶数。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13417.jpg?sign=1739662025-Cl8al67yOreSBNuJJ7UrUN1lCJHQCXg0-0-e1970eaad9affb7546641f86d980cb53)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13423.jpg?sign=1739662025-g97SqcYDIHihYbnjenaq9FkFm11O3WOL-0-dce53c584bf6ce1d4a25f97bce81436b)
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=1739662025-w970lLyLfcjcaufy6Dod7W16tUdk5icx-0-a74793ab72aaaead407187eb353e8bc2)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13433.jpg?sign=1739662025-Oiq4UZeyCrCBknTUZYeCaaJDLMqeQcXa-0-5f3fcf4ca50706f284db78f60155e2f6)
程序实例ch7_36.py:有一个列表buyers,此列表内含购买者和消费金额,如果购买金额超过或达到1000元,则归类为VIP买家vipbuyers列表。否则是Gold买家goldbuyers列表。
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13436.jpg?sign=1739662025-9IVqRELCfXuD3GNLmYGJ58TxxOd3ljhI-0-3b36ae09774fa451ff49818229e24cd8)
执行结果
![](https://epubservercos.yuewen.com/6532E4/17214367404798806/epubprivate/OEBPS/Images/Figure-P101_13442.jpg?sign=1739662025-SyiLnIr07z0QbiSnDzoRCs3AvMDZQiQV-0-1474cafc07dce48361f9ec50896c7a4c)
上述程序第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=1739662025-xUvvC0Yog9uBXQGSwzR9G1ouXZSyFloZ-0-1c597c01770f4e40a819d320d2bd0ba3)
执行结果 没有任何数据输出。