目录

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语句。