
6.6 循环结构程序举例
循环语句主要就是在满足条件的情况下反复执行某一个操作。根据循环执行次数的确定性,循环可以分为确定次数循环和不确定次数循环。确定次数循环指循环体对循环次数有明确的定义,循环次数限制采用遍历结构中元素个数来体现,也称有限循环,在Python中称之为遍历循环(for语句);不确定次数循环被称为无限循环,在Python中用while语句实现。
6.6.1 while循环结构

while循环判断比较简单,当条件判断为True时,循环体就会去重复执行语句块中的语句;当条件判断为False时,则终止循环语句的执行,同时去执行与while同级别的后续语句。其格式如下:

下面通过一个例子来看看while循环。
【例6-11】输入一个运算数,然后将这个数乘以2,循环5次。

程序运行结果如图6-23所示。

图6-23 循环5次结果

图6-24 循环5次流程图
其运行的流程图如图6-24所示。
在while中使用else语句,其格式如下:

【例6-12】输入一个小于5的数,每次加1,直到其不小于5为止。

程序运行结果如图6-25所示。

图6-25 程序执行结果
6.6.2 for循环结构

for语句通常由两部分组成,一是条件控制部分,二是循环部分。for语句语法格式如下所示。

其中,“循环变量”是一个变量名称,“遍历结构”则是一个列表。在Python中for语句之所以称为“遍历循环”,是因为for语句执行的次数是由“遍历结构”中元素的个数决定的。遍历循环就是依次从“遍历结构”中取出元素,置入循环变量中,并执行对应的语句块。“遍历结构”可以是字符串、文件、组合数据类型或range()函数。else语句只在循环正常执行并结束时才执行。else语句通常是被省略的。
【例6-13】定义一个字符串,然后使用for语句遍历字符串。

程序运行结果如图6-26所示。

图6-26 循环遍历结果
【例6-14】定义一个链表,将链表里面的数字按大小顺序从小到大输出。

程序运行结果如图6-27所示。

图6-27 排序结果
6.6.3 break和continue语句

在程序运行过程中,根据程序的目的,有时需要程序在满足另一个特定条件时跳出本次循环,或者跳出本次循环去执行另外的循环。在Python中要实现循环的自由转场就要用到两个辅助保留字:break和continue,它们用来辅助控制循环。
break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。
要特别注意,不要滥用break和continue语句。break和continue会造成代码执行逻辑分叉过多,容易出错。大多数循环并不需要用到break和continue语句,都可以通过改写循环条件或者修改循环逻辑,去掉break和continue语句。
有些时候,如果代码写得有问题,会让程序陷入“死循环”,也就是永远循环下去。这时可以按Ctrl+C组合键退出程序,或者强制结束Python进程。
1. break语句
【例6-15】在银行取钱的时候,经常看见输入密码只有三次机会,如果三次密码都输错了,那么就输入不了了。我们都知道,这是通过循环来判断账号与密码是否匹配,如果输入了对的密码,将使用break跳出循环。break语句可以在循环过程中直接退出循环。

程序运行结果如图6-28所示。

图6-28 登录账号结果
2. continue语句
continue语句可以提前结束本轮循环,并直接开始下一轮循环。
【例6-16】在数字匹配游戏中,可以清晰地感受到break与continue的不同,当匹配的数字是4时,在结束循环时,输出的是数字5。

程序运行结果如图6-29所示。

图6-29 字符匹配结果