3.3 用while循环
循环语句用于解决多次重复性的计算问题,如穷举问题和迭代问题,该语句充分发挥了计算机的快速计算能力。Python提供了while和for两种循环形式,本节先来介绍while。
3.3.1 while语句基本格式
while循环语句的语法如下:
while expr …语句1 …语句2
while循环语句首先对expr的返回值进行判断,如果为True,就执行代码块中的语句;反之,一次也不执行。如图3.6所示为while语句执行的流程图。
图3.6 while语句流程图
3.3.2 while语句的应用
前面if选择判断用户工作的例子,用户输入一次就退出程序了,这里加入一个循环,让用户可以输入多次。
【示例3-3】
首先需要将flag设为True,这样才能通过判断执行while代码块中的语句。当用户输入0时,将flag设置为False,这样while循环就不会继续了。代码结果如图3.7所示。
图3.7 while语句应用
3.3.3 无限循环(死循环)
当while的条件永远为真(True)时,程序就会进入无限循环,也称死循环。比如去掉上一节代码的flag,修改代码如下:
【示例3-4】
因为这里去掉了输入0后切换flag的代码,所以循环条件一直是True,即无限循环,此时无论输入什么内容,程序都会一直要求用户进行选择,如果要退出程序,可使用Ctrl+C组合键。最终结果如图3.8所示。
一般的循环程序,写作时都要求开发人员注意无限循环的漏洞,应尽量避免,但有一种特殊情况,如果无限循环用在客户端/服务器端的交互编程中,会有更好的作用。因为服务器端需要连续运行,这样客户端才可以在需要时与其进行通信。
图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】
这样就可以输出我们需要的结果了,如图3.9所示。
图3.9 带else的while循环应用
在while语句中,经常需要改变变量的值,这个时候就会用到num1=num1+1或num1=num1-1之类的表达式,这就是变量递增或递减的语句。Python也支持更简化的方式,就是+=和-=。也就是说,下面的语句是等价的,读者可以试一试:
• num1+=1和num1=num1+1。
• num1-=1和num1=num1-1。