part4-1 流程控制一(if分支结构、断言)

Python 中两种流程控制结构:分支结构和循环结构。
分支结构:根据条件选择性的执行某段代码。由 if 语句提供分支支持。
循环结构:根据循环条件重复执行某段代码。由 while、for-in 语句提供。
控制循环结构的语句:break 和 continue。

顺序结构:程序从上到下一行一行地执行,中间没有任何判断和跳转。

一、 if 分支结构

if 分支的控制条件是布尔表达式或布尔值。if 分支可作为语句使用,也可作为表达式使用。if 语句常用三种形式。
第一种形式,单个条件判断:
if expression :
statements ...
第二种形式,if-else判断:
if expression :
statements ...
else:
statements ...
第三种形式,多个条件判断 if-elif-...-else:
if expression :
statements ...
elif expression :
statements ...
... # 可以有 0 条或多条 elif 语句
else:
statements ...

在第二种形式和第三种形式中,如果第三种形式的 elif 语句块不出现,就是第二种形式。

在 if 的分支语句中,如果 if 的条件为“真”,就执行 if 条件后面的多条语句;否则会依次判断 elif 条件(如果有的话),如果 elif 条件为“真”,就执行 elif 条件后面的多语句,......;如果前面的所有条件都为假,就执行 else 后面的代码块(如果有话)。在多条语句中,以缩进作为代码块(缩进通常以4个空格为单位),一个代码块当成一个整体来运行(除非在运行代码块的过程中遇到return、break、continue等关键字),这个代码块也被称为条件执行体。

1、 注意缩进
Python中是以缩进作为代码块的,要注意缩进,如果不缩进就不是代码块。另外,缩进的空格数量建议是4个,当然也可以是其它数量的空
格,也可以是1个 tab 键位。

不正确使用缩进的话,程序的运行结果可通会超出预期。

在同一个代码块内必须保持相同的缩进,既不能多、也不能少。

另外,在不使用代码块的地方,不要随意使用缩进,否则程序会报错。

2、 注意冒号
Python 冒号表示代码块的开始点,在条件执行体、循环体、函数体、类体中都要遵守该规则。结束点在与开始点的语句有相同缩进的位置。

3、 if 条件的类型
Python 执行 if 语句时,会判断 if 条件是 True 还是 False。if 的条件不是只能用 bool 类型表达式,if 条件可以是任意类型,当下面这些值作为 bool 表达式时,会被解释器当作 False 处理。
False、None、0、""、()、[]、{}
除了 False 本身,各种代表“空”的 None、空字符串、空元组、空列表、空字典都会被当成 False 处理。示例如下:
 1 s = ""      # 定义一个空字符串
 2 if s:         # if 条件使用字符串类型
 3     print('s 不是空字符串')
 4 else:
 5     print('s 是空字符串')
 6 my_list = []      # 定义一个空列表
 7 if my_list:         # if 条件使用列表类型
 8     print('my_list 不是空列表')
 9 else:
10     print('my_list 是空列表')
11 my_dict = {}      # 定义一个空字典
12 if my_dict:          # if 条件使用字典类型
13     print('my_dict 不是空字典')
14 else:
15     print('my_dict 是空字典')

4、 if 分支的逻辑错误
要注意 if 分支中的逻辑判断顺序,使用正确的逻辑判断顺序,避免产生预期之外的结果。对于任何 if-else 或者 if-elif-else 语句中,else 的隐含条件是对前面条件取反。示例如下:
1 age = 50
2 if age > 20:
3     print("青年人")
4 elif age > 40:
5     print("中年人")
6 elif age > 60:
7     print("老年人")

上面这段代码输出的结果是 “青年人”,没有输出预期的结果“中年人”。这里逻辑判断没有错,但是逻辑判断的顺序不对。在 if 分支语句中,只要前面的一个条件满足,就会不再执行后面的条件,所以这里执行了第一个 if 语句,后面的 elif 语句不会执行。所以在做逻辑判断时,应先判断条件范围小的,再判断条件范围大的。修改的示例如下:
1 age = 50
2 if age > 60:
3     print("老年人")
4 elif age > 40:
5     print("中年人")
6 elif age > 20:
7     print("青年人")

现在的输出结果是“中年人”,输出在预期之内,逻辑判断的顺序是非常重要的。

5、pass 语句
pass 是Python 中的空语句。在程序中占一个位置,但不希望这条语句做任何事情,就放一条 pass 语句。pass 语句可以让程序更完善。

二、 断言

断言(assert)语句和 if 分支有点类似,用于对一个 bool 表达式进行断言,如果该 bool 表达式为 True,该程序可以继续向下执行;否则程序引发 AsertionError 错误。示例如下:
age = int(input("请输入年龄:"))
assert 20 < age < 80
print("你的年龄在20到80之间")

运行上面的代码,输入一个20到80之间的数正常输出,若输入的数不在这个范围,则报 AssertionError 错误。

断言是一种特殊的分支结构,assert 断言执行的逻辑是:
if 条件为False:
程序引发 AssertionError 错误
上一篇:Windows性能计数器应用(PART4)


下一篇:11.17 笔记