目录
3. if语句介绍
3.1 简单的if语句
3.2 if-else语句
3.3 if-elif-else结构
3.4 使用多个elif代码块
3.5 测试多个条件
3. if语句介绍
理解条件测试后,就可以开始编写if语句了。if语句有很多种,选择使用哪种取决于要测试的条件数。前面讨论条件测试时,列举了多个if语句示例,下面更深入地讨论这个主题。
3.1 简单的if语句
最简单地if语句只有一个测试和一个操作:
if conditional_test:
do something
在第1行中,可包含任何条件测试,而在紧跟在测试后面的缩进代码中,可执行任何操作。如果条件测试的结果为True,Python就会执行紧跟在if语句后面的代码;否则Python将忽略这些代码。
假设有一个表示某人年龄的变量,而你想知道这个人是否够投票的年龄,可使用如下代码:
age = 19
if age >= 18:
print("You are old enough to vote!")
输出结果为:
You are old enough to vote!
Python检查变量age的值是否大于或等于18;答案是肯定的,因此Python执行紧跟在if语句后面的代码。
在if语句中,缩进的作用与for循环中相同。如果测试通过了,将执行if语句后面所有缩进的代码行,否则将忽略它们。
在紧跟在if语句后面的代码中,可根据需要包含任意数量的代码行。下面在一个人够投票的年龄时再打印一行输出,问他是否登记了:
age = 19
if age >= 18:
print("You are old enough to vote!")
print("Have you registered to vote yet?")
输出结果为:
You are old enough to vote!
Have you registered to vote yet?
条件测试通过了,而两条print语句都缩进了,因此它们将执行。如果age的值小于18,这个程序将不会有任何输出。
3.2 if-else语句
经常需要在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的if-else语句。if-else语句块类似于简单的if语句,但其中的else语句让你能够指定条件测试未通过时要执行的操作。
下面的代码在一个人够投票的年龄时显示与前面相同的消息,同时在这个人不够投票的年龄时也显示一条消息:
age = 17
if age >= 18:
print("You are old enough to vote!")
print("Have you registered to vote yet?")
else:
print("Sorry, you are too young to vote.")
print("Please register to vote as soon as you turn 18!")
输出结果为:
Sorry, you are too young to vote.
Please register to vote as soon as you turn 18!
如果if的条件测试通过了,就执行第一个缩进的print语句块;如果测试结果为False就执行else代码块。这age小于18,if的条件测试未通过,因此执行else代码块中的代码。这种简单的if-else结构中,总是会执行两个操作中的一个。
3.3 if-elif-else结构
经常需要检查超过两个的情形,为此可使用Python提供的if-elif-else结构。Python只执行if-elif-else结构中的一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。测试通过后,Python将执行紧跟在它后面的代码,并跳过余下的测试。
在现实世界中,很多情况下需要考虑的情形都超过两个。例如,来看一个根据年龄段收费的游乐场:
4岁以下免费;
4-16岁收费5美元;
16岁(含)以上收费10美元。
下面利用if-elif-else语句确定一个人所属的年龄段,并打印一条包含门票价格的消息:
age = 12
if age < 4:
print("Your admission cost is $0.")
elif age < 16:
print("Your admission cost is $5.")
else:##可以缺省else块
print("Your admission cost is $10.")
输出结果为:
Your admission cost is $5.
在if判断一个人是否不满4岁,若符合条件,Python执行if的代码块,并跳过余下的测试。若不符合if的条件,则判断elif的条件。elif其实是另一个if判断,它只有在前面的测试不通过时才会执行。此例中我们知道不满足if条件也就是这个人不小于4岁。如果这个人未满16岁,Python将打印相应的消息,并跳过else代码块。如果if测试和elif测试都未通过,Python将运行else代码块中的代码。
在这个示例中,if测试的结果为False,因此不执行其代码块。然而,第二个测试的结果为True,因此将执行其代码块。
3.4 使用多个elif代码块
实际应用中可根据需要使用任意数量的elif代码块,例如,假设前述游乐场要给老年人打折,可再添加一个条件测试,判断顾客是否符合打折条件。下面假设对于65岁(含)以上的老人,可以半价(即5美元)购买门票:
age = 12
if age < 4:
price = 0
elif age < 16:
price = 5
elif age < 65:
price = 10
else:
price = 5
print("Your admission cost is $" + str(price) + ".")
输出结果为:
Your admission cost is $5.
在此示例中增加了一个price变量,根据人的年龄设置price变量。在if-elif-else结构中设置price的值后,利用一条未缩进的print语句根据price变量打印一条消息,指出门票价格。增加一个elif代码块通过检查年龄不到65岁,才将门票价格设置为全票价格(10美元),只有当年龄超过65岁(含)时,才会执行else的代码块。
3.5 测试多个条件
if-elif-else结构功能强大,但仅适合于只有一个条件满足的情况:遇到满足的条件后,Python就跳过余下的测试。这种行为很好,效率很高,让你能够测试一个特定的条件。
然而,有时候必须检查你关心的所有条件。在这种情况下,应使用一系列不包含elif和else代码块的简单if语句。在可能有多个条件为True,且你需要在每个条件为True时都采取相应措施时,适合使用这种方法。
下面看一个披萨店的示例,如果顾客点了两种配料,就需要确保在其披萨中包含这些配料:
requested_toppings = ['mushrooms', 'extra cheese']
if 'mushrooms' in requested_toppings:
print("Adding mushrooms.")
if 'pepperoni' in requested_toppings:
print("Adding pepperoni.")
if 'extra cheese' in requested_toppings:
print("Adding extra cheese.")
print("\nFinished making your pizza!")
输出结果为:
Adding mushrooms.
Adding extra cheese.
Finished making your pizza!
我们首先创建一个包含顾客点的配料的列表。然后检查顾客是否点了配料’ mushrooms’,如果点了就打印一条确认消息。然后检查是否点了’ pepperoni’,是否要求多芝士’ extra cheese’,同第一条消息一样都会判断是否满足条件。不管前面的测试的结果如何,都会执行后面的代码。每当这个程序运行,都会进行这三个独立测试。
如果使用if-elif-else结构,代码将不能正确地运行,因为有一个测试通过后,就会跳过余下的测试。
总之,如果只想执行一个代码块,就使用if-elif-else结构;如果要运行多个代码块,就使用一系列独立的if语句。