ZetCode

Python 控制流

最后修改于 2024 年 1 月 29 日

在本文中,我们将介绍如何控制 Python 程序的流程。

控制流

当 Python 程序运行时,代码是从上到下执行的。程序流可以通过各种关键字来改变,包括 if/elseforwhilematch

控制流结构可用于有条件地或多次执行代码。

if 语句

if 关键字用于检查一个表达式是否为真。如果为真,则执行一个语句。该语句可以是一个单独的语句,也可以是一个复合语句。复合语句包含由代码块括起来的多个语句。

main.py
#!/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 关键字后面的代码块。

main.py
#!/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 关键字。

main.py
#!/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

main.py
#!/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 关键字用于在需要时中断循环。

main.py
#!/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 语句用于中断当前循环而不跳出整个循环。它启动一个新的循环。

main.py
#!/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 关键字用于按其在容器中出现的顺序迭代集合的项。

main.py
#!/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 模式匹配 中进行了介绍。

main.py
#!/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 中的程序控制流。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出所有 Python 教程