在进行程序设计的过程中,我们经常需要进行逻辑判断,根据不同的结果做不同的事,或者重复做某件事,我们对类似这样的工作称为流程控制。在Python中,流程控制语句是编写程序时必不可少的一部分,它们控制了整个程序运行的步骤,实现不同的功能。流程控制可以分为顺序执行、条件判断和循环控制。顺序执行顾名思义就是让程序按照从头到尾,从上到下的顺序依次执行每一条Python代码,不重复执行任何代码,也不跳过任何代码。条件判断是通过if语句实现的,使程序能够根据不同的条件执行不同的代码块。循环控制主要通过for循环和while循环来实现,使程序能够重复执行某段代码,从而处理重复性的任务,而无需重复编写相同的代码。
1、if判断
Python程序开发中经常会用到条件判断,例如,用户登录时,需判断用户输人的用户名和密码是否全部正确,进而决定用户是否能够成功登录。类似这种需求的功能,都可以使用if语句实现。在所有的编程语言中,都有if语句的存在,if语句的作用就是按照条件选择执行不同的代码片段,“if”可以理解为“如果”,if语句的基本语法如下:
if 条件语句:
执行代码1
执行代码2
......
动手练一练:
a = 10
if a > 1:
print("代码1") # 前面有四个空格的缩进,不能省略
print("代码2") # 前面同样有四个空格的缩进,不能省略
b = 10
if b < 1:
print("代码3") # 前面有四个空格的缩进,不能省略
print("代码4") # 前面同样有四个空格的缩进,不能省略
执行以上代码,输出结果为:
代码1
代码2
注意上面的例子中,print()前面的空格缩进(相对于if行有四个空格开头)不能省略,且if条件语句后面必须跟着英文冒号“:”。if关键字可以理解为“如果”,根据if后面条件语句测试的值为“True”或“False”来决定是否执行if语句中的代码。当条件语句测试的值为“True”时,则执行if语句后面的代码块;当值为“False”时,Python就会忽略这些代码不去执行。上面第二个if条件语句“if b < 1”测试的值为“False”,后面的print()函数没有被执行。
if条件测试不仅支持布尔类型“True”或“False”,还适用于数字,例如:
动手练一练:
a = 8
if a:
print("代码1") # 前面有四个空格的缩进,不能省略
b = 0
if b:
print("代码2") # 前面有四个空格的缩进,不能省略
执行以上代码,输出结果为:
代码1
上面的例子中,如果if的判断条件测试的内容是数字,则只有数字是“0”时,条件测试的结果才为“False”,所以上面第二个代码块中的print()函数没有被执行。
不仅仅是布尔类型和数字,if语句中的条件测试还可以使用字符串、列表、元组、字典等其它数据类型。只有当条件测试中出现空字符串、空列表、空元组、空字典时,条件测试的结果才为“False”,其余都是“True”。
动手练一练:
# 使用字符串作为 条件测试
if "Python":
print("字符串条件测试的结果为True")
if "":
print("字符串条件测试的结果为False")
# 使用列表作为 条件测试
if [4, 5, 6]:
print("列表条件测试的结果为True")
if []:
print("列表条件测试的结果为False")
# 使用元组作为 条件测试
if (4, 5, 6):
print("元组条件测试的结果为True")
if ():
print("元组条件测试的结果为False")
# 使用字典作为 条件测试
if {1:"a", 2:"b", 3:"c"}:
print("字典条件测试的结果为True")
if {}:
print("字典条件测试的结果为False")
执行以上代码,输出结果为:
字符串条件测试的结果为True
列表条件测试的结果为True
元组条件测试的结果为True
字典条件测试的结果为True
上面的例子中,空字符串、空列表、空元组、空字典条件测试的结果均为“False”,代码块中的print()函数均没有被执行。
当if条件为“None”时,也不会执行if语句中代码,因为常数None表示一个空的对象,没有任何的值,也就是“什么都没有”的意思。
2、else语句
在Python中,“else”可以理解为“否则”。“else”语句通常与“if”语句一起使用,用于当“if”的条件测试为“False”的时候执行“else”后边的语句,“if”语句后面并不一定非要有“else”,但是“else”不能单独出现,必须跟在“if”后面。例如:
动手练一练:
a = -8
if a > 0:
print("a为正数")
else:
print("a不是正数") # 由于a<0,所以执行“else”后面的语句
执行以上代码,输出结果为:
a不是正数
上面的例子中,由于“-8<0”,导致“a > 0”的条件测试是“False”,所以“if”后面的语句不会被执行,但是“else”后面的语句被成功执行了。
3、elif语句
在Python中,关键字“elif”是“else if”的缩写,可以理解为“否则如果”。“if”语句常用于对不同的条件进行判断,并根据不同的条件执行不同的代码块。但是,有些情况下,需要对多个条件进行判断,这时就需要使用“elif”语句了。“elif”语句同样不能单独出现,必须跟在“if”语句后边。
动手练一练:
a = 75
if a > 90:
print("优秀")
elif a > 80:
print("良好")
elif a > 60:
print("及格")
执行以上代码,输出结果为:
及格
上面的例子中,代码执行了第二个“elif”后面的语句。从运行结果可以看出,“elif”语句的执行逻辑是逐个检查条件,一旦找到“a > 60”为“True”的条件,就执行对应的代码块,并跳过其它条件内容。
如果“if”和“elif”仍然不能满足条件,还需要再添加“else”语句时,“else”必须放在最后,不能插在elif之前,例如:
动手练一练:
a = 56
if a > 90:
print("优秀")
elif a > 80:
print("良好")
elif a > 60:
print("及格")
else:
print("不及格")
执行以上代码,输出结果为:
不及格
上面的例子中,a变量不满足“if”和“elif”的条件,所以执行了“else”后的语句。
4、Python中的代码缩进规则
这里我们重点了解一下Python的代码缩进规则,解释一下为什么代码块中“空格缩进”不能省略。由于Python采用缩进作为代码块的标识,所以在编写Python程序的过程中,很容易遇到缩进错误的问题。
在Python中,可分为单行代码和代码块。顾名思义,单行代码就是一行的Python代码,并且每一行开头都没有空格缩进。而代码块是以冒号作为开始,用缩进划分相同作用域,这样的结构称之为代码块,是一个整体,例如:
动手练一练:
# 单行代码
a = 123
# 单行代码
print('True')
# 代码块
if a == 123: # 代码块以冒号“:”作为开始
print('True') # 前面有四个空格的缩进,不能省略
执行以上代码,输出结果为:
True
True
上面的例子中,“if a == 123:”和“print('True')”组合就是一个代码块,“print('True')”前面的四个空格缩进不能省略。由于Python编程语言比较独特,主要通过缩进来识别代码块,所以我们不能随意缩进,否则会导致输出错误。Python要求代码块缩进(一般1~4个空格或者1个Tab键),但却没有要求缩进量,建议使用4个空格来作为缩进,这是Python官方推荐的缩进风格。同一个代码块中每一行的缩进量一定要相同,缩进量不同的不属于同一个代码块。不需要缩进的地方千万不要缩进,特别是代码第一行,否则Python解释器会报错,一旦缩进就会产生一个新的代码块,例如:
# 单行代码
a = 123 # 错误:单行代码不能缩进
# 单行代码
print('True')
# 代码块
if a == 123:
print(a)
print('True') # 错误:同一个代码块中的缩进量要和上面一样
执行以上代码,输出结果为:
IndentationError: unexpected indent
上面的例子中,Python解释器会提示错误信息“缩进错误:意外缩进”。