Python中的流程控制语句(第1节)


在进行程序设计的过程中,我们经常需要进行逻辑判断,根据不同的结果做不同的事,或者重复做某件事,我们对类似这样的工作称为流程控制。在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解释器会提示错误信息“缩进错误:意外缩进”。