Python 控制流
最后修改于 2024 年 1 月 29 日
在本文中,我们将介绍如何控制 Python 程序的流程。
控制流
当 Python 程序运行时,代码是从上到下执行的。程序流可以通过各种关键字来改变,包括 if/else、for、while 和 match。
控制流结构可用于有条件地或多次执行代码。
if 语句
if 关键字用于检查一个表达式是否为真。如果为真,则执行一个语句。该语句可以是一个单独的语句,也可以是一个复合语句。复合语句包含由代码块括起来的多个语句。
#!/usr/bin/python
import random
r = random.randint(-5, 5)
print(r)
if r > 0:
print('The r variable is positive')
生成一个随机数。如果该数字大于零,我们向终端打印一条消息。
r = random.randint(-5, 5)
我们生成一个介于 -5 .. 5 之间的随机整数。
if r > 0:
print('The r variable is positive')
使用 if 关键字,我们检查生成的数字是否大于零。if 关键字后面是一个求值为布尔值的表达式。如果布尔值为 True,则执行代码块。在我们的例子中,字符串 *The r variable is positive* 被打印到终端。如果随机值为负数,则不执行任何操作。
else 语句
我们可以使用 else 关键字来创建简单的分支。如果 if 关键字后面的表达式求值为 False,则会自动执行 else 关键字后面的代码块。
#!/usr/bin/python
import random
r = random.randint(-5, 5)
print(r)
if r > 0:
print('The r variable is positive')
else:
print('The r variable is negative or zero')
要么执行 if 关键字后面的代码块,要么执行 else 关键字后面的代码块。
elif 语句
我们可以使用 elif 关键字创建多个分支。仅当前一个条件未满足时,它才会测试另一个条件。请注意,我们可以在测试中使用多个 elif 关键字。
#!/usr/bin/python
import random
r = random.randint(-5, 5)
print(r)
if r > 0:
print('The r variable is positive')
elif r == 0:
print('The r variable is zero')
else:
print('The r variable is negative')
如果第一个条件求值为 True,例如输入的值小于零,则执行第一个代码块,并跳过其余两个代码块。如果第一个条件不满足,则检查 elif 关键字后面的第二个条件。如果第二个条件求值为 True,则执行第二个代码块。如果不满足,则执行 else 关键字后面的第三个代码块。如果前面的条件均未满足,则始终执行 else 代码块。
while 语句
while 关键字用于创建循环。while 循环中的语句将一直执行,直到表达式求值为 False。
#!/usr/bin/python
numbers = [22, 34, 12, 32, 4]
mysum = 0
i = len(numbers)
while i != 0:
i -= 1
mysum = mysum + numbers[i]
print("The sum is:", mysum)
我们想计算 numbers 列表中所有值的总和。我们使用 while 循环。我们确定列表的长度。while 循环一遍又一遍地执行,直到 i 等于零。在循环体中,我们递减计数器并计算值的总和。
$ ./main.py The sum is: 104
break 语句
break 关键字用于在需要时中断循环。
#!/usr/bin/python
import random
while True:
val = random.randint(1, 30)
print(val, end=" ")
if val == 22:
break
print()
在我们的示例中,我们打印随机整数。如果数字等于 22,则使用 break 关键字中断循环。while True 创建一个无限循环。break 用于跳出这个无限循环。
$ ./main.py 20 9 27 28 1 12 3 3 13 15 29 27 8 13 17 29 8 1 22
continue 语句
continue 语句用于中断当前循环而不跳出整个循环。它启动一个新的循环。
#!/usr/bin/python
num = 0
while num < 1000:
num = num + 1
if num % 2 == 0:
continue
print(num, end=" ")
print()
在示例中,我们打印所有小于 1000 且不能被 2 整除的数字。
for 语句
for/in 关键字用于按其在容器中出现的顺序迭代集合的项。
#!/usr/bin/python
lyrics = """
Are you really here or am I dreaming
I can't tell dreams from truth
for it's been so long since I have seen you
I can hardly remember your face anymore
"""
for i in lyrics:
print(i, end=" ")
在示例中,我们有一个 lyrics 变量,其中包含一首歌的诗节。我们遍历文本,逐个字符打印文本。print 语句中的逗号阻止每个字符打印在新行上。
$ ./main.py A r e y o u r e a l l y h e r e o r a m I d r e a m i n g I c a n ' t t e l l d r e a m s f r o m t r u t h f o r i t ' s b e e n s o l o n g s i n c e I h a v e s e e n y o u I c a n h a r d l y r e m e m b e r y o u r f a c e a n y m o r e
for 语句具有丰富的语法,并在 Python for 循环 中得到了更详细的介绍。
模式匹配
模式匹配是一种强大的控制流结构,它允许我们将一个值与一系列模式进行比较,并根据匹配的模式执行代码。它比 if/else 语句更高级。
模式匹配具有复杂的语法,并在 Python 模式匹配 中进行了介绍。
#!/usr/bin/python
grades = ['A', 'B', 'C', 'D', 'E', 'F', 'FX']
for grade in grades:
match grade:
case 'A' | 'B' | 'C' | 'D' | 'E' | 'F':
print('passed')
case 'FX':
print('failed')
我们有一个成绩列表。对于 A 到 F 的成绩,我们通过了示例。对于 FX 成绩,我们考试不及格。
grades = ['A', 'B', 'C', 'D', 'E', 'F', 'FX']
我们定义了一个成绩列表。
for grade in grades:
首先,我们使用 for 循环遍历列表。
match grade:
case 'A' | 'B' | 'C' | 'D' | 'E' | 'F':
print('passed')
case 'FX':
print('failed')
在每个 for 循环中,我们将一个值与给定的模式进行匹配。第一个 case 分支与用 | 分隔的多个值进行匹配。在第二个分支中,我们匹配单个值 'FX'。
$ ./main.py passed passed passed passed passed passed failed
来源
在本文中,我们研究了 Python 中的程序控制流。
作者
列出所有 Python 教程。