2.5 控制流的元素
控制流语句的开始部分通常是“条件”,接下来是一个代码块,称为“子句”。在开始学习具体的Python 控制流语句之前,我将介绍条件和代码块。
2.5.1 条件
你前面看到的布尔表达式可以看成是条件,它和表达式是一回事。“条件”只是在
控制流语句的上下文中更具体的名称。条件总是求值为一个布尔值,True 或False。控制流语句根据条件是True 还是 False,来决定做什么。几乎所有的控制流语句都使用条件。
2.5.2 代码块
一些代码行可以作为一组,放在“代码块”中。可以根据代码行的缩进,知道
代码块的开始和结束。代码块有 3 条规则。
1.缩进增加时,代码块开始。
2.代码块可以包含其他代码块。
3.缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了。
看一些有缩进的代码,更容易理解代码块。所以让我们在一小段游戏程序中,
寻找代码块,如下所示:
if name == 'Mary':
➊ print('Hello Mary')
if password == 'swordfish':
➋ print('Access granted.') else:
➌ print('Wrong password.')
第一个代码块➊开始于代码行print('Hello
Mary'),并且包含后面所有的行。在这个代码块中有另一个代码块➋,它只有一行代码:print('Access
Granted.')。第三个代码块➌也只有一行:print('Wrong password.')。
2.6 程序执行
在第 1 章的 hello.py 程序中,Python
开始执行程序顶部的指令,然后一条接一条往下执行。“程序执行”(或简称“执行”)这一术语是指当前被执行的指令。如果将源代码打印在纸上,在它执行时用手指指着每一行代码,你可以认为手指就是程序执行。
但是,并非所有的程序都是从上至下简单地执行。如果用手指追踪一个带有控制流语句的程序,可能会发现手指会根据条件跳过源代码,有可能跳过整个子句。
2.7 控制流语句
现在,让我们来看最重要的控制流部分:语句本身。语句代表了在图 2-1 的流程图中看到的菱形,它们是程序将做出的实际决定。
2.7.1 if 语句
最常见的控制流语句是 if 语句。if 语句的子句(也就是紧跟 if 语句的语句块),
将在语句的条件为True 时执行。如果条件为 False,子句将跳过。
在英文中,if 语句念起来可能是:“如果条件为真,执行子句中的代码。”在 Python
中,if 语句包含以下部分:
• if 关键字;
• 条件(即求值为 True 或 False 的表达式);
• 冒号;
• 在下一行开始,缩进的代码块(称为 if 子句)。
例如,假定有一些代码,检查某人的名字是否为 Alice(假设此前曾为 name
赋值)。
if name == 'Alice': print('Hi, Alice.')
所有控制流语句都以冒号结尾,后面跟着一个新的代码块(子句)。语句的 if
子句是代码块,包含 print('Hi, Alice.')。图 2-3 展示了这段代码的流程图。
图 2-3 if 语句的流程图
2.7.2 else 语句
if 子句后面有时候也可以跟着 else 语句。只有 if 语句的条件为 False 时,else子句才会执行。在英语中,else
语句读起来可能是:“如果条件为真,执行这段代码。否则,执行那段代码”。else 语句不包含条件,在代码中,else 语句中包含下面部分:
• else 关键字;
• 冒号;
• 在下一行开始,缩进的代码块(称为 else 子句)。
回到 Alice 的例子,我们来看看使用 else 语句的一些代码,在名字不是 Alice
时,提供不一样的问候。
if name == 'Alice': print('Hi, Alice.')
else:
print('Hello, stranger.')
图 2-4 展示了这段代码的流程图。