
4.2 for循环
循环是指程序中需要重复执行的代码,Python的循环结构有for循环和while循环。for循环是一种迭代循环机制,迭代即重复相同的逻辑操作,每次操作都是基于上一次结果而进行的。Python的for循环可以遍历任何序列的对象,如字符串、元组列表和字典等,其语法如下:

根据for循环的语法,我们使用流程图进一步了解for循环的执行过程,如图4-2所示。

图4-2 for循环流程图
从图中可以知道,循环体是一个可迭代的对象,常用的迭代对象有字符串、列表、字典和range对象。我们通过代码对这些迭代对象实现for循环遍历,具体代码如下:

在上述4个例子中,对于字符串、列表和字典的遍历循环是相对容易理解,range对象是for循环中经常使用的循环对象,同时也说明for循环是支持对象的遍历,对象是由类实例化生成的,有关类的知识会在第6章讲述。代码运行结果如图4-3所示。

图4-3 for循环的运行结果
在for循环中,我们还可以嵌套for循环和if语句。这两种嵌套方式是实际开发中最为常见的,具体的代码示例如下:

for循环中嵌套if语句通常是对循环体进行一个判断筛选,根据当前循环值的不同而执行不同的处理,如上述例子中,嵌套if语句是将0到9之间的范围值进行分类筛选。如果for循环是嵌套for循环,可将运行结果看作一张二维表格,最外层的循环就如表格的行数,嵌套里面的循环是表格的列数。上述代码的运行结果如图4-4所示。

图4-4 带嵌套的for循环的运行结果
4.3 while循环
从上一节我们知道,Python的循环结构有for循环和while循环,while循环是根据条件的判断结果而决定是否执行循环。只要条件判断结果为True,程序就会执行循环,直至条件判断结果为False,具体语法如下:

根据while循环的语法,我们使用流程图进一步了解while循环的执行过程,如图4-5所示。

图4-5 while循环流程图
从图中发现,while循环和for循环的执行过程是大致相同的,只不过两者的循环条件判断方式有所不同。在一些特定的情况下,不同的循环方式决定了代码质量的高低。通过以下例子来讲述如何使用while循环,代码如下:

上述代码只执行一次循环,因为在循环里设置了变量bool的值为False,当第二次循环开始之前,由于条件判断结果为False,使得第二次循环被终止,从而终止了整个while循环。除此之外,while循环也支持if语句嵌套和循环嵌套,具体的实现方式与for循环是相同的,此处不再详细讲述。
在循环过程中,如果想终止整个循环或者直接跳过当前循环的剩余语句而执行下一轮循环,可以分别使用break语句和continue语句。这两个语句只能在循环里面使用,如果在循环外使用,程序会提示错误信息。以下面的例子来讲述如何在for循环和while循环中使用break语句和continue语句,代码如下:

两个循环方式分别使用break语句和continue语句,而且实现的功能是非常相似的,这样可以深入了解两个语句对不同的循环方式所造成的差异。运行上述代码,结合运行结果分析两者的差异,运行结果如图4-6所示。

图4-6 break和continue的执行结果
从运行结果可以看出,for循环和while循环都分别循环10次。当变量i等于5的时候,break语句会将整个循环终止,所以列表的元素值只有0到4;而continue语句将当前的循环跳出,继续执行下一轮的循环,所以列表的元素值从0到9并且不含5。