第三章 循环迭代
第三章 循环迭代
循环迭代是计算机编程中最重要的语法之一,不仅在Python语言里,在几乎所有的编程语言里,循环迭代都是不可或缺的。我们利用计算机编程来处理问题的重要目的之一,就是帮助人们高效的处理重复繁琐的任务。 而循环迭代就是这样的利器,也是后续章节的基础。
关于循环迭代让我想到古希腊神话中的西西弗斯,西西弗斯被惩罚必须将一块石头推上山顶,而每次到达山顶后巨石又滚回山下,如此永无止境地重复下去。西西弗斯往往用于形容永无尽头而又徒劳无功的任务,文艺复兴时期的画家提香就有下面这个著名的作品。但是,只要你在编程中使用得当,这种循环是非常有效率的。如果你创建了一个循环迭代的语句,千万不要让它“徒劳无功”。

3.1. while循环
3.1.1. 基础语法
Python语言有多种方式来实现循环迭代的操作,第一种是while循环迭代,如下所示。
n = 3
while n > 0:
print(n)
n = n - 1
print('Happy New Year!')
这个例子是一个类似新年钟声的零点倒计时程序。这个例子中从第2行开始,出现了一个新的语法的引导关键词while。while关键词在第2行开始引导,第3行和第4行前面分别有空格,所以它们从属于第2行的while循环。
在while关键词后面紧跟着的是一个布尔表达式。第1行我们给n赋了3这个值,所以,在这个程序运行之初,while后面这个布尔表达式的布尔值是True。只要这个布尔表达式的值是True,那么从属于这个循环的语句就会一遍又一遍的运行,直到这个布尔表达式的值变成False。当循环结束了以后,就会运行第5行的打印Happy New Year,到这里整个程序也就运行结束了,所以最后的运行流程如下:
3 #第1轮循环,因为n=3,所以n>0为True,打印n并且n=n-1,n的值为2
2 #第2轮循环,因为n=2,所以n>0为True,打印n并且n=n-1,n的值为1
1 #第3轮循环,因为n=1,所以n>0为True,打印n并且n=n-1,n的值为0
Happy New Year! #第四轮循环,因为n=0,所以n>0为False,结束循环
注意
大家也许观察到了,如果要循环能够结束,则while后面跟着的布尔表达式的值必须要变成False才行。如果循环不能结束,则会成为一个无限循环,如下所示。
n = 3
while True:
print(n)
n = n - 1
print('Happy New Year!')
这个循环是永远不会终止的,你的电脑会一直运行下去。如果要打断它,请按下ctrl+c(win或者macOS都是一样)。 在编程中,一定要避免写出这种无限循环的代码。
3.1.2 break and continue
除了让布尔表达式变成False外,还有另外一种强行终止循环的办法,就是用到break这个关键词。
n = 3
while True:
enter = input('please enter: ')
if enter == 'q':
break
print(n)
n = n - 1
print('Happy New Year!')
我们在之前的代码上添加了第3,4 ,5行作为终止循环的语句。这里break这个关键词如果被触发了,则会直接跳出while循环。在这个例子中,enter用来接收你输入的值,输入除了q以外任何值,都会进入下一轮循环。如果你输入了q,就会跳出循环,直接到达第8行。所以一般情况下,break会和条件判断结合起来使用。
另一个在循环中会用到的关键词continue用来略过这一轮循环,有点类似于skip的意思。
n = 3
while True:
enter = input('please enter:')
if enter == 'q':
break
if enter == 's':
continue
print(n)
n = n - 1
print('Happy New Year!')
我们添加了第6,7行来,如果你输入了s,则continue被触发了,所以第8,9行都不会运行,但是仅限这一轮循环,并没有跳出整个循环,所以之后你会被要求继续输入。可能的运行结果如下。
please enter:a #此处你输入了a
3
please enter: #此处你什么都没输入,直接回车
2
please enter:s #此处你输入了s,触发了continue
please enter:q #此处你输入了q,触发了break
Happy New Year!