![]() |
2.4 Python中的控制流 |
在 Python 中程序代码总是按照一定顺序执行的,如果想改变代码的执行顺序,比如我们有时需要从上到下按顺序执行,有时需要跳转执行,有时需要选择不同的分支执行,有时甚至需要循环地执行,这时就要用到控制流。我们通常根据不同的需要来选择控制语句,以控制某些代码段的执行方式,这些不同功能的控制语句就叫作控制流。
控制流的功能就是控制代码的执行方式,下面通过两种方式来实现同一功能。方式一:
方式二:
例如,若要实现一个分支判断功能:如果天气晴朗(sunny),就输出“basketball”,否则,输出“badminton”。按照正常的顺序执行方式,是无法实现该功能的,此时就可以选择使用if语句,我们会在后面详细介绍具体的使用方法:
与许多编程语言相同,在 Python 中程序通常是由上向下执行的,而有时我们为了改变程序的执行顺序,会使用控制流语句控制程序的执行方式。
在 Python 中有三种控制流类型:第 1 种是顺序结构,指按顺序执行的结构;第 2 种是分支结构,指选择执行的结构,常用的语句为if;第3种是循环结构,指循环多次执行的结构,常用的语句为for、while。下面分别通过代码实例认识这三种结构。
顺序结构的代码实例如下:
分支结构的代码实例如下:
循环结构for的代码实例如下:
循环结构while的代码实例如下:
if语句在Python中表示选择性地执行,虽然形式简单,但功能相当强大。选择性执行是常规程序设计中的主要控制机制之一,是计算机能够执行复杂任务的关键组成部分。
if语句的格式用法如下:
按照上面的格式规定,我们通过实例来讲解if语句在几种选择情况下的使用:
注意,由于同时满足了条件a==10、a>8与a>6,所以Python会优先执行最先满足的条件下的代码。
if语句的使用要点如下。
◎ 各分支尽量不重复,并且尽量包含全部可能性。
◎ 在if语句里还可以再写if语句,形成if语句的嵌套。
◎ elif语句和else语句永远只是可选的。
◎ 在Python中没有switch语句。
Python 中的 for…in 语句是指在一系列的对象上进行迭代,即逐一使用序列中的每个项目。
for…in语句的格式用法如下:
根据上面对for…in语句的格式规定,我们通过实例来讲解for…in语句的使用方法。
最基本的for语句为搭配列表使用:
在for语句中使用range函数时,range函数中的第1个元素代表起始数字,第2个元素代表终止数字,第3个元素代表步长,如果不指定第3个元素,则默认步长为1:
在Python中,for…in语句经常与“迭代器”组合使用,“迭代器”指任何可以进行迭代操作的对象,比如在前面提到的列表、字符串、元组、字典、文件,等等。
for...in语句的使用要点如下。
◎ 适当运用range、xrange函数。
◎ 在for中还可以再写for,形成循环嵌套。
◎ 合理地运用lambda代替for循环,可以提高运行速度。
在Python中while语句也可以用来控制一段语句的重复执行,即在某个条件下循环执行某段程序,以处理需要重复处理的相同任务。
while语句的格式用法如下:
下面根据while语句的格式规定,通过实例讲解while语句的使用方法。
如下所示是最简单的没有else部分的例子,这是一个死循环,请不要轻易尝试:
接下来是有else部分的例子:
我们再来看看更复杂一些的有嵌套的while语句:
while语句的使用要点如下。
◎ 配合if分支语句使用。
◎ 要恰当地运用break和continue语句,以便适时结束循环;
◎ 在while语句中还可以再写while语句,从而形成循环嵌套。
在Python中用于终止循环的语句有break语句和continue语句,这两种语句跳出循环的层次不同,但各有用处。
break语句是用来终止程序的执行的。当在循环结构中出现break语句时,即使在循环条件中没有false条件,或者序列还没被完全递归完,也会终止循环语句。如果break语句出现在嵌套循环中,则应当终止执行最深层的循环,并开始执行下一行代码。
break语句在while循环中的示例如下:
break语句在for循环中的示例如下:
将break语句用在双层循环语句中,跳出最内层的循环的示例如下:
continue 语句的功能是强制停止循环中的这一次执行,直接跳到下一次执行。即跳过当前循环的剩余语句,继续进行下一轮循环。
continue语句在while循环中的示例如下:
输出结果全部为奇数,因为当n为偶数时跳出本次循环。continue语句在for循环中的示例如下:
输出结果同样全为奇数,因为当n为偶数时跳出本次循环。continue语句在双层循环语句中的示例如下:
continue 语句指的是结束执行本次循环中剩余的语句,然后继续下一轮的循环;而break语句指的是直接结束这个循环,包括结束执行该循环的剩余的所有次循环。
请区分以下两个程序。
程序1如下:
程序2如下:
在程序 2 中,i=15 及之后均没有输出,因为执行遇到 break,直接跳过了剩余的所有循环,而程序1仅跳过了i=15这一次循环。