循环结构

循环结构

在日常生活中,我们经常会重复一个动作多次,如扫地、抄词n遍、背诵n遍等,这在程序语言中可以用循环结构实现。循环结构允许我们执行一个语句或语句组多次,但注意不是无限多次(陷入死循环)。什么时候会终止循环呢?这就需要设置终止条件,一种是设置循环的次数,另一种是在循环中设置循环终止的条件。

图3-4给出大多数编程语言中的循环语句的一般形式,图3-5给出火攻曹营的计算机编程循环结构。

图3-4 循环语句的一般形式

图3-5 火攻曹营的循环结构

Python提供了两种循环语句:while循环和for循环。

while循环是给定判断条件为真时执行循环体;而for循环是判断某个变量在一个范围内时执行循环体,如遍历某个区间、某个字符串或者列表。循环可以进行嵌套,例如,在while循环中嵌套for循环,在for循环中嵌套for循环。

除了通过判断条件来结束循环之外,在循环体执行时,如果满足某个条件需要退出循环,可以采用break语句和continue语句来实现,这两个都是循环控制语句。其中,break语句在语句块执行过程中终止循环,并且跳出整个循环;continue语句在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。假设一个循环要执行10次,在执行到第5次时,若满足某个条件触发break语句,则循环就此停止;而若是触发continue语句,则仅仅是第5次循环的循环体语句不执行,而第6次仍然继续执行。

另外,若仅仅为了测试程序的执行顺序而不执行具体内容,可以加入pass语句(空语句),来保持程序结构的完整性。

while循环语句

while的基本形式为:

while后面的判断条件为真(True)时,重复执行某段程序,执行语句可以是单个语句或语句块。一旦判断条件为假(False)时,循环结束。以孔明借东风的故事为例:

1.一个简单的例子

先给一个简单的例子体会while的使用:

以上代码执行的输出结果:

2.奇偶数分开

小P 来解决

Q:给出含有奇数和偶数的一组数。要求:将奇数放在一起,偶数放在一起。

小P 想:

第一,需要将这一组数放在一个变量中,而这组数的个数未知;

第二,需要逐一取数,这是一个重复的工作;

第三,取数取到所有数都取完为止;

第四,将奇数和偶数分别放入新的变量中。

解决该问题的思路:首先将一些数放入一个列表变量中,然后逐一取数,判断是奇数还是偶数,将奇数放入一个新的列表中,将偶数放入另一个新的列表中。由于逐一取数是一个重复的工作,可以采用循环来实现。

目前需要解决几个关键点,一是循环终止条件如何设置,二是如何取数和放数,三是判断奇数和偶数。循环终止的条件应设置为取完所有的数。由于不知道有多少个数,因此有如下几个途径:一是计算列表的长度,当循环次数达到列表长度时程序就终止;二是同样利用列表长度,每取走一个数,列表长度就减1,当列表长度为0时,循环就可以终止了。计算列表长度用len()函数来实现,取数可以用pop()函数来实现,而加数可以用append()函数来实现。判断奇数和偶数可以依据数学上的判据,能被2整除(余数为零)的就是偶数,反之为奇数。

因此这个程序用while循环可以这样实现:

结果为:

for 循环语句

for循环语句可以遍历任何序列的项目,如一个列表或者一个字符串。for循环的语法格式如下:

for循环语句的流程图如图3-6所示。

图3-6 for 循环语句的结构

可以改写上面取奇数和偶数的例子:

for 通过序列索引迭代

同样还可以采用索引的方式进行迭代,range()函数能够返回一个序列的数,如range(10)返回的是1,2,…,10。利用len()函数可以求得序列的个数,以便于循环条件的设定。如下实例:

以上实例输出结果:

循环使用else 语句

在Python的循环语句中,同样可以搭配使用else,用于执行循环之后的语句。for-else表示这样的意思:for中的语句和普通的if没有区别,else中的语句会在循环正常执行完(即for不是通过break跳出而中断的)的情况下执行。while-else也是一样。在循环中可以单独使用else语句,此时while循环部分相当于if条件为True的情况,而else执行循环条件为False的情况。例如:

以上实例输出结果:

break 语句和continue 语句

在循环语句中,特别是使用while语句时,还可以采用两个重要的命令continue、break来跳过或者跳出循环。continue用于跳过该次循环,break则用于退出循环。此外“判断条件”还可以是个常值,表示循环必定成立。

循环中的break语句和continue语句的基本流程图分别如图3-7和图3-8所示。

图3-7 循环中的break 语句

图3-8 循环中的continue 语句

如果将取奇数和偶数的程序进行修改,加入break和continue,对比如表3-1所示。

表3-1 break语句和continue语句的对比

如果因编写程序错误而出现无限循环,可以使用Ctrl+C键来中断循环。