>>> from env_helper import info; info()
页面更新时间: 2020-11-19 20:18:58
操作系统/OS: Linux-4.19.0-11-amd64-x86_64-with-debian-10.6 ;Python: 3.7.3

2.6. 控制流语句

现在,让我们来看最重要的控制流部分:语句本身。 语句代表了在流程图中看到的菱形,它们是程序将做出的实际决定。

2.6.1. if 语句

最常见的控制流语句是if语句。if 语句的子句(也就是紧跟 if 语句的语句块), 将在语句的条件为 True 时执行。如果条件为 False ,子句将跳过。

在英文中, if 语句念起来可能是:“如果条件为真,执行子句中的代码。”。 在 Python 中, if 语句包含以下部分:

  • if 关键字;

  • 条件(即求值为 TrueFalse 的表达式);

  • 冒号;

  • 在下一行开始,缩进的代码块(称为 if 子句)。

例如,假定有一些代码,检查某人的名字是否为 Alice (假设此前曾为name赋值)。

>>> name ='Alice'
>>> age =12
>>> if name == 'Alice':
>>>     print('Hi, Alice.')
Hi, Alice.

所有控制流语句都以冒号结尾,后面跟着一个新的代码块(子句)。语句的 if 子句是代码块,包含 print('Hi,Alice.’)

2.6.2. else 语句

if 子句后面有时候也可以跟着 else 语句。只有 if 语句的条件为 False 时, else 子句才会执行。在英语中, else 语句读起来可能是:“如果条件为真,执行这段 代码。否则,执行那段代码”。 else 语句不包含条件,在代码中, else 语句中包 含下面部分:

  • else 关键字;

  • 冒号;

  • 在下一行开始,缩进的代码块(称为 else 子句)。

回到 Alice 的例子,我们来看看使用 else 语句的一些代码, 在名字不是 Alice 时,提供不一样的问候。

>>> name ='Alice'
>>> if name == 'Alice':
>>>     print('Hi, Alice.')
Hi, Alice.

2.6.3. elif 语句

虽然只有 ifelse 子句会被执行,但有时候可能你希望,“许多”可能的子句 中有一个被执行。 elif 语句是“否则如果”,总是跟在if或另一条 elif 语句后面。它 提供了另一个条件,仅在前面的条件为 False 时才检查该条件。在代码中, elif 语句 总是包含以下部分:

  • elif 关键字;

  • 条件(即求值为 TrueFalse 的表达式);

  • 冒号;

  • 在下一行开始,缩进的代码块(称为 elif 子句)。 让我们在名字检查程序中添加 elif ,看看这个语句的效果。

>>> if name == 'Alice':
>>>     print('Hi, Alice.')
>>> elif age < 12:
>>>     print('You are not Alice, kiddo.')
Hi, Alice.

这一次,检查此人的年龄。如果比12岁小,就告诉他一些不同的东西。

如果 age <12True 并且 name == 'Alice'Falseelif 子句就会执行。 但是,如果两个条件都为 False ,那么两个子句都会跳过。 “不能”保证至少有一个子句会被执行。如果有一系列的 elif 语句,仅有一条或零条子句会被执行。 一旦一个语句的条件为 Tme ,剩下的 elif 子句会自动跳过。 例如,打开一个新的文件编辑器窗口,输入以下代码,保存为 vampire.py

>>> if name == 'Alice':
>>>     print('Hi, Alice.')
>>> elif age < 12:
>>>     print('You are not Alice, kiddo.')
>>> elif age > 2000:
>>>     print( 'Unlike you, Alice is not an undead, immortal vampire.')
>>> elif age > 100:
>>>     print('You are not Alice, grannie.')
Hi, Alice.

这里,我添加了另外两条 elif 语句,让名字检查程序根据 age 的不同答案而发

但是,elif 语句的次序确实重要。让我们重新排序,引入一个缺陷。回忆一下, 一旦找到一个 True 条件,剩余的子句就会自动跳过。

>>> if name == 'Alice':
>>>     print('Hi, Alice.')
>>> elif age < 12:
>>>     print('You are not Alice, kiddo.')
>>> elif age > 100:
>>>     print('You are not Alice, grannie.')
>>> elif age > 2000:
>>>     print('Unlike you, Alice is not an undead, immortal vampire.')
Hi, Alice.

假设在这段代码执行之前, age变量的值是3000。 你可能预计代码会打印出字符串 'Unlike you, Alice is not an undead, immortal vampire.' 。 但是,因为 age > 100 条 件为真(毕竟3000大于100), 字符串 'You are notAlice,grannie.' 被打印出来, 剩下的语句自动跳过。别忘了,最多只有一个子句会执行, 对于 dif 语句,次序是很重要的。

你可以选择在最后的 elif 语句后面加上 else 语句。在这种情况下,保证至少一 个子句(且只有一个)会执行。如果每个 ifelif 语句中的条件都为 False ,就执行 else 子句。例如,让我们使用 ifelifelse 子句重新编写 Alicee 程序。

>>> if name == 'Alice':
>>>     print('Hi, Alice. ')
>>> elif age < 12:
>>>     print('You are not Alice, kiddo.')
>>> else:
>>>     print('You are neither Alice nor a little kid.')
Hi, Alice.

在英语中,这类控制流结构会使得:“如果第一个条件为真,做这个。否则, 如果第二个条件为真,做那个。否则,做另外的事。” 如果你同时使用这3个语句,要记住这些次序规则。

  • 首先,总是只有一个 if 语句。所有需要的elif语句都应该跟在 if 语句之后。

  • 其次,如果希望确保至少一条子句被执行,在最后加上 else 语句。