如何在 Python 中使用 if 语句控制程序执行流程
发布日期:
本文内容
理解条件测试之后,就可以开始编写 if
语句了。if
语句的形式多样,具体选择哪一种取决于需要测试的条件数量。在之前讨论条件测试时,我们已经看到了一些 if
语句的例子。接下来,我们将更深入地探讨这个主题。
简单的 if 语句
最基本的 if
语句由一个条件测试和一个相应的操作组成:
|
|
这里的 conditional_test
可以是任何返回布尔值(True
或 False
)的表达式。如果测试结果为 True
,Python 会执行紧跟其后的缩进代码块;如果结果为 False
,则跳过这些代码。
例如,如果你想知道某个人是否达到了投票年龄,可以这样编写代码:
|
|
在此示例中,Python 检查变量 age
是否大于或等于 18。如果是,它将执行缩进的 print()
函数调用:
|
|
与 for
循环相似,在 if
语句中,缩进决定了哪些代码会在条件满足时被执行。如果条件成立,所有缩进的代码行都将被执行;否则,它们将被忽略。
你可以根据需求,在 if
语句后的代码块中添加多个操作。比如,在告知用户他们已达到投票年龄的同时,询问他们是否已完成选民登记:
|
|
当条件测试通过时,两个 print()
语句都会被执行:
|
|
然而,如果 age
小于 18,整个代码块将不会有任何输出。
if-else 语句
在许多情况下,你可能需要根据条件测试的结果执行不同的操作:如果条件通过,则执行一个操作;如果条件不通过,则执行另一个操作。在这种情形下,可以使用 Python 提供的 if-else
语句。if-else
语句不仅允许你在条件为真时执行特定代码块,还能让你指定当条件为假时要执行的操作。
考虑下面的例子,其中我们检查一个人是否达到了投票年龄,并根据不同情况显示不同的消息:
|
|
在这个示例中,如果第二行处的条件测试(age >= 18
)为 True
,就会执行第一组缩进的代码块,输出两条消息告知用户他们已达到投票年龄,并询问是否已经登记投票。但如果条件测试结果为 False
,程序则会跳到第四处的 else
代码块,执行另一组打印语句,提示用户他们还未达到投票年龄,并鼓励他们在年满 18 岁时登记投票。
由于这次 age
值小于 18,因此条件测试未通过,程序执行了 else
部分的代码:
|
|
上述代码展示了 if-else
结构的一种常见用法,它非常适合用于处理只有两种可能的情形——要么满足某个条件,要么不满足。无论条件测试的结果如何,在这种简单的 if-else
结构中,总会执行两个代码块中的一个。
if-elif-else 语句
当你需要检查超过两个条件时,可以使用 Python 提供的 if-elif-else
语句。在这种结构中,Python 只会执行其中一个代码块。它会依次检查每个条件测试,直到找到第一个通过的条件测试为止。一旦某个条件测试通过,Python 将执行紧跟在其后的代码,并跳过剩余的条件测试。
在现实世界中,常常需要处理多于两种的情形。例如,考虑一个根据年龄段收费的游乐场规则:
- 4 岁以下免费。
- 4 岁(含)至 18 岁收费 25 美元。
- 年满 18 岁收费 40 美元。
如何用一条 if-elif-else
语句来确定门票价格呢?以下是一个示例代码,用于确定一个人所属的年龄段,并打印包含门票价格的消息:
|
|
在这个示例中,第二行处的 if
测试检查一个人是否未满 4 岁。如果是,Python 就会打印一条合适的消息,并跳过其余的测试。第四行处的 elif
实际上是一个附加的 if
测试,仅在前面的测试未通过时运行。如果这个人未满 18 岁,Python 将打印相应的消息,并跳过 else
代码块。如果 if
和 elif
测试都未通过,Python 将执行第六行处的 else
代码块中的代码。
在这个具体的例子中,因为年龄为 12 岁,所以 if
测试的结果为 False
,因此不执行其代码块。elif
测试的结果为 True
(12 小于 18),因此执行其代码块。输出如下:
|
|
当年龄达到或超过 18 岁时,前两个条件测试都不会通过,在这种情况下,将执行 else
代码块,指出门票价格为 40 美元。
为了使代码更简洁,可以在 if-elif-else
代码块中只设置门票价格,而不是直接打印消息。这样可以在后续统一打印票价信息:
|
|
这种方式下,缩进的代码行根据年龄设置变量 price
的值。在 if-elif-else
语句中设置好 price
之后,一个未缩进的 print()
函数调用将根据这个变量的值打印出一条消息,指出门票价格。
这种方法不仅简化了代码,还提高了效率:只需修改一处 print()
函数即可调整输出消息的内容,而不是修改多个地方。这使得代码更容易维护和更新。
使用多个 elif 代码块
你可以根据需要使用任意数量的 elif
代码块。假设前述游乐场希望为老年人提供折扣,可以再添加一个条件测试来判断顾客是否符合打折条件。下面的例子中,假设年满 65 岁的老人可以享受半价(即 20 美元)的门票价格:
|
|
这些代码大多未变。第二个 elif
代码块通过检查确定年龄不到 65 岁后,才将门票价格设置为全票价格——40 美元。请注意,在 else
代码块中,必须将所赋的值改为 20,因为仅当年龄达到 65 岁时,才会执行这个代码块。
省略 else 代码块
Python 并不要求 if-elif
结构后面必须有 else
代码块。在某些情况下,else
代码块很有用;而在其他情况下,使用一条 elif
语句来处理特定的情形会更清晰:
|
|
最后的 elif
代码块在顾客年满 65 岁时,将价格设置为 20 美元。这比使用 else
代码块更清晰一些。经过这样的修改,每个代码块都仅在通过了相应的条件测试时才会执行。
else
是一条包罗万象的语句,只要不满足任何 if
或 elif
中的条件测试,其中的代码就会执行。这可能引入无效甚至恶意的数据。如果知道最终要测试的条件,应考虑使用一个 elif
代码块来代替 else
代码块。这样就可以肯定,仅当满足相应的条件时,代码才会执行。
测试多个条件
尽管 if-elif-else
语句功能强大,但它们只适用于只有一个条件满足的情况:在遇到通过了的条件测试后,Python 就会跳过余下的条件测试。这种行为效率很高,让你能够专注于一个特定的条件。
然而,有时候你必须检查所有关心的条件。在这种情况下,应该使用一系列不包含 elif
和 else
代码块的简单 if
语句。在可能有多个条件为 True
,且需要在每个条件为 True
时都采取相应措施时,适合使用这种方法。
下面再来看看前面的比萨店示例。如果顾客点了两种配料,就需要确保在其比萨中放入这些配料:
|
|
首先创建一个列表,其中包含顾客点的配料。第一条 if
语句检查顾客是否点了蘑菇(mushrooms)。如果点了,就打印一条确认消息。第二个 if
语句检查配料辣香肠(pepperoni),而不是 elif
或 else
语句。因此,无论前一个条件测试是否通过,都将执行这个测试。最后一条 if
语句检查顾客是否要求多加芝士(extra cheese);不管前两个条件测试的结果如何,都会执行这些代码。每当这个程序运行时,都会执行这三个独立的条件测试。
因为这个示例检查了每个条件,所以将在比萨中添加蘑菇并多加芝士:
|
|
如果像下面这样转而使用 if-elif-else
语句,代码将不能正确运行,因为只要有一个条件测试通过,就会跳过余下的条件测试:
|
|
第一个条件测试检查列表中是否包含 ‘mushrooms’。它通过了,因此将在比萨中添加蘑菇。然而,Python 将跳过 if-elif-else
语句中余下的条件测试,不再检查列表中是否包含 ’extra cheese’ 和 ‘pepperoni’。结果就是,只会添加顾客点的第一种配料,不会添加其他配料:
|
|
总之,如果你只想运行一个代码块,就使用 if-elif-else
语句;如果要运行多个代码块,就使用一系列独立的 if
语句。