![Python 3.6零基础入门与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/591/26793591/b_26793591.jpg)
3.3 用while循环
循环语句用于解决多次重复性的计算问题,如穷举问题和迭代问题,该语句充分发挥了计算机的快速计算能力。Python提供了while和for两种循环形式,本节先来介绍while。
3.3.1 while语句基本格式
while循环语句的语法如下:
while expr …语句1 …语句2
while循环语句首先对expr的返回值进行判断,如果为True,就执行代码块中的语句;反之,一次也不执行。如图3.6所示为while语句执行的流程图。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P82_49966.jpg?sign=1738949269-QB6NXhBIestZAmpgOXFq9U4CZgQ9ow0K-0-cb3d2fdf1d74d1104efd9323a82b6904)
图3.6 while语句流程图
3.3.2 while语句的应用
前面if选择判断用户工作的例子,用户输入一次就退出程序了,这里加入一个循环,让用户可以输入多次。
【示例3-3】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P82_49967.jpg?sign=1738949269-O7OQwQ3LyL6WanJn7ZlitUKb4urX2dI7-0-60d3fdc5aa5cac39a67318333e073746)
首先需要将flag设为True,这样才能通过判断执行while代码块中的语句。当用户输入0时,将flag设置为False,这样while循环就不会继续了。代码结果如图3.7所示。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P83_17352.jpg?sign=1738949269-df65SByqu7L6qgf3A3qscUigWsuuJ4KA-0-f51b039907e62d56d668e06d86d5cb45)
图3.7 while语句应用
3.3.3 无限循环(死循环)
当while的条件永远为真(True)时,程序就会进入无限循环,也称死循环。比如去掉上一节代码的flag,修改代码如下:
【示例3-4】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P83_49968.jpg?sign=1738949269-00Kyanyv5XurthX2oDhSnTxog4UNUzWX-0-821f1cdc349ad01deb63ae2bdd557b34)
因为这里去掉了输入0后切换flag的代码,所以循环条件一直是True,即无限循环,此时无论输入什么内容,程序都会一直要求用户进行选择,如果要退出程序,可使用Ctrl+C组合键。最终结果如图3.8所示。
一般的循环程序,写作时都要求开发人员注意无限循环的漏洞,应尽量避免,但有一种特殊情况,如果无限循环用在客户端/服务器端的交互编程中,会有更好的作用。因为服务器端需要连续运行,这样客户端才可以在需要时与其进行通信。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P84_17476.jpg?sign=1738949269-6YUUMpqn9yZg3BCxDRoAtLTzrRVcV2D3-0-7981bd064194c34b7cf94424a334f309)
图3.8 无限循环
3.3.4 带else的while循环
前面已经学过,if条件不满足时,可以执行else语句块,当while条件不满足时,也可以执行else语句块。语法如下:
while expr …语句1 …语句2 else: …语句1 …语句2
考虑一个简单的例子,输出0、1、2、…、9,如果超过9,就输出“超过9了”:
num1 = 0 #判断的标志 while (num1<10): print(num1) else: print("超过9了")
这段代码看上去很简单,先是设置一个初始值为0,再判断这个值,然后决定不同的输出。当运行这段代码后,发现一直输出0,成了无限循环。这是因为num1的值一直没有变化,所以需要在它输出一次结果后自动加1。
【示例3-5】
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P84_49972.jpg?sign=1738949269-B6kOAa576Plt1F11ukwuvfSu5Bf4JZ1X-0-79f10075804515e39478d098aa1353c1)
这样就可以输出我们需要的结果了,如图3.9所示。
![](https://epubservercos.yuewen.com/7779CF/15253385805231106/epubprivate/OEBPS/Images/Figure-P85_17602.jpg?sign=1738949269-1YigZcA64cDcFAyPTpwypm6Wx9Y7sAdE-0-83c5f8c8352589dd137ac573cef9d5b7)
图3.9 带else的while循环应用
在while语句中,经常需要改变变量的值,这个时候就会用到num1=num1+1或num1=num1-1之类的表达式,这就是变量递增或递减的语句。Python也支持更简化的方式,就是+=和-=。也就是说,下面的语句是等价的,读者可以试一试:
• num1+=1和num1=num1+1。
• num1-=1和num1=num1-1。