介绍
控制流(Control flow)是单个语句、指令或函数调用被执行或评估的顺序。Python 程序的控制流由条件语句、循环和函数调用来调节。
在这个 Lab 中,你将学习控制 Python 程序执行的核心概念。你将探索使用 if 语句的条件逻辑、各种运算符、新的 match-case 语句,以及使用 while 和 for 循环的迭代。到这个 Lab 结束时,你将能够编写更具动态性和强大功能的 Python 程序。
比较运算符和布尔运算符
在这一步,你将学习如何使用比较运算符和布尔运算符来构建逻辑表达式。这些表达式对于控制流至关重要,因为它们评估的结果是 True 或 False,这决定了程序的执行流程。
比较运算符
比较运算符用于比较两个值。下表列出了一些常用的比较运算符:
| 运算符 | 含义 |
|---|---|
== |
等于 (Equal to) |
!= |
不等于 (Not equal to) |
< |
小于 (Less than) |
> |
大于 (Greater Than) |
<= |
小于或等于 (Less than or Equal to) |
>= |
大于或等于 (Greater than or Equal to) |
这些运算符的评估结果是 True 或 False。例如,42 == 42 的结果是 True,但 42 == '42' 的结果是 False,因为它们的类型(整数和字符串)不同。
布尔运算符
布尔运算符有三个:and、or 和 not。它们用于组合或反转布尔值。它们的优先级顺序是:not 优先,然后是 and,最后是 or。
and 运算符仅当两个表达式都为真时才返回 True。
or 运算符只要至少有一个表达式为真就返回 True。
not 运算符反转布尔值(not True 变为 False)。
混合使用运算符
你可以组合比较运算符和布尔运算符来创建更复杂的逻辑表达式。
注意: 如果你不熟悉使用 WebIDE(类似 VS Code),请先在 这个 Lab 学习如何使用。
例如:
(4 < 5) and (5 < 6)
输出:
True
现在,让我们来练习一下。从左侧的文件浏览器中打开 operators_example.py 文件。将以下代码添加到该文件中。此代码组合了多个运算符来评估单个布尔结果。
## operators_example.py
result = 2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
print(result)
要运行该脚本,请在 WebIDE 中打开一个终端并执行以下命令:
python3 operators_example.py
你应该会看到以下输出,因为该表达式评估结果为 True:
True
If 语句和三元运算符
在这一步,你将学习如何使用 if、elif 和 else 语句来控制程序流,根据特定条件执行代码块。这一步还将介绍三元条件运算符(Ternary conditional operator),用于编写简洁的单行条件表达式。
if、elif 和 else 语句
- 如果
if语句的条件为True,则执行其代码块。 - 如果前面的
if或elif条件为False,则elif(else if)语句检查另一个条件。 - 如果所有前面的
if和elif条件都为False,则else语句执行其代码块。
基本结构如下:
if condition1:
## 如果 condition1 为 True 则执行的代码
elif condition2:
## 如果 condition1 为 False 且 condition2 为 True 则执行的代码
else:
## 如果所有条件都为 False 则执行的代码
三元条件运算符
三元运算符提供了一种在一行中编写简单 if-else 语句的简写方式。其语法是:
<expression1> if <condition> else <expression2>
例如,print('kid' if age < 18 else 'adult') 是编写完整 if-else 块的一种紧凑方式。
现在,让我们练习使用完整的条件块。打开 if_example.py 文件,并添加以下代码。该脚本将检查 name 变量的值,并相应地打印不同的消息。
## if_example.py
name = 'Antony'
if name == 'Debora':
print('Hi Debora!')
elif name == 'George':
print('Hi George!')
else:
print('Who are you?')
从终端运行该脚本:
python3 if_example.py
由于 name 是 'Antony',if 条件和 elif 条件都不满足,因此执行 else 块。
输出:
Who are you?
Switch Case 语句 (匹配 - 案例语句)
在这一步,你将探索结构化模式匹配(Structural Pattern Matching),这是 Python 3.10 中引入的强大 switch-case 等效功能。你将练习匹配字面值、使用 OR 模式,并使用 match 和 case 关键字实现默认情况。
match 语句接受一个表达式,并将其值与一个或多个 case 块中提供的一个或多个模式进行比较。
基本匹配
你可以匹配字面值,如数字或字符串。
OR 模式
你可以使用 | (或) 运算符在单个 case 中组合多个字面值模式。例如,case 200 | 201:。
默认情况
下划线符号 (_) 是一个通配符,用于定义在没有其他任何情况匹配时执行的默认情况。
让我们来练习一下。打开 match_example.py 文件,并添加以下代码。该脚本使用 match 语句根据 HTTP 响应代码确定要执行的操作。
## match_example.py
response_code = 800
match response_code:
case 200 | 201:
print("OK")
case 300 | 307:
print("Redirect")
case 400 | 401:
print("Bad Request")
case 500 | 502:
print("Internal Server Error")
case _:
print("Invalid Code")
从你的终端运行该脚本:
python3 match_example.py
由于 response_code 是 800,它不匹配任何特定的情况,因此执行默认情况 (_)。
输出:
Invalid Code
While 循环和循环控制
在这一步,你将掌握 while 循环,用于只要条件为真就重复执行目标语句。你还将学习如何使用 break 语句来退出循环,以及使用 continue 语句来跳过当前迭代,从而管理循环行为。
while 循环
while 循环只要给定条件为 True,就会重复执行一个目标语句。确保条件最终变为 False 以避免无限循环至关重要。
break 语句
break 语句会终止当前循环,并像 C 语言中的传统 break 一样,在下一条语句处恢复执行。
continue 语句
continue 语句会拒绝循环当前迭代中所有剩余的语句,并将控制权移回循环的顶部。
让我们创建一个简单的 while 循环。打开 while_example.py 文件,并添加以下代码。该脚本将打印五次消息。
## while_example.py
spam = 0
while spam < 5: ## 只要 spam 小于 5 就继续
print('Hello, world.')
spam = spam + 1 ## 增加计数器以避免无限循环
现在,从终端运行该脚本:
python3 while_example.py
只要 spam 小于 5,循环就会执行。在每次迭代中,spam 增加 1。
输出:
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Hello, world.
For 循环和迭代
在这一步,你将使用 for 循环来迭代序列(如列表或字符串)中的项。本步骤涵盖了如何使用 range() 函数循环特定的次数,for 循环中可选的 else 块,以及如何使用 sys.exit() 完全终止程序。
for 循环
for 循环用于迭代一个序列(该序列可以是列表、元组(tuple)、字典(dictionary)、集合(set)或字符串)。
range() 函数
range() 函数生成一个数字序列,这对于循环特定的次数非常有用。
range(stop): 生成从 0 开始到stop(不包括stop)的数字。range(start, stop): 生成从start开始到stop(不包括stop)的数字。range(start, stop, step): 生成从start开始到stop(不包括stop)的数字,步长为step。
使用 sys.exit() 结束程序
可以调用 sys.exit() 函数立即终止程序。你必须先 import sys 才能使用它。
让我们练习使用带 range() 的 for 循环。打开 for_example.py 文件,并添加以下代码。该脚本将打印从 0 到 8 的偶数。
## for_example.py
## range(start, stop, step)
for i in range(0, 10, 2):
print(i)
从终端运行该脚本:
python3 for_example.py
range(0, 10, 2) 函数生成从 0 开始,到 10(不包括 10)结束,步长为 2 的数字。
输出:
0
2
4
6
8
总结
恭喜你完成了本次实验(Lab)!你现在已经掌握了 Python 中控制流的基本概念。
在本次实验中:
- 你学习了如何使用比较运算符和布尔运算符来构建逻辑条件。
- 你练习了使用
if、elif和else语句以及简洁的三元运算符来控制程序执行。 - 你探索了 Python 3.10 中强大的
match-case语句,用于结构化模式匹配(structural pattern matching)。 - 你学习了如何使用
while和for创建循环,并使用break和continue控制它们的行为。
掌握了这些技能后,你现在可以编写更复杂、更智能的 Python 程序,这些程序能够做出决策并重复执行任务。



