理解条件测试后,就可以开始编写if语句了。if语句有很多种,选择使用哪种取决于要测试的条件数。前面讨论条件测试时,列举了多个if语句示例,下面更深入地讨论这个主题。

5.3.1 简单的 if 语句

最简单的if语句只有一个测试和一个操作:

  1. if conditional_test:
  2. do()

在第1行中,可包含任何条件测试,而在紧跟在测试后面的缩进代码块中,可执行任何操作。如果条件测试的结果为True,Python就会执行紧跟在if语句后面的代码;否则Python将忽略这些代码。

假设有两个表示某人年龄和性别的变量,而你想知道这个人是否够结婚的年龄,可使用如下代码:

  1. age = 21
  2. gender = 0 # 0表示女性,1表示男性,其他表示未知
  3. if age >= 20 and gender == 0:
  4. print('您已经到了合法结婚年龄!请赶快找个年龄大于22周岁的男人结婚!一定要生三胎哦!')
  5. if age >= 22 and gender == 1:
  6. print('您已经到了合法结婚年龄!请赶快找个年龄大于20周岁的女人结婚!一定要生三胎哦!')

在第3行的if语句处,程序判断这是否是一个年龄大于20岁的女性,如果是,则进入第4行的语句。第5行的if语句判断这是否是一个年龄大于22岁的男性,如果是,则进入第6行的语句。

由于age被设置为了21,性别设置为了女性,所以这是一个年龄大于20岁的女性,所以会输出 :
您已经到了合法结婚年龄!请赶快找个年龄大于22周岁的男人结婚!一定要生三胎哦!

5.3.2 if-else语句

经常需要在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的if-else语句。if-else语句块类似于简单的if语句,但其中的else语句让你能够指定条件测试未通过时要执行的操作。

比如判断一个人喝酒:

age = 17
if age >= 18:
    print('恭喜您,您已经是成年人了!您可以喝酒')
else:
    print('抱歉,您还是未成年人,不能饮酒!')

如果第2行的条件测试通过了,就执行第一个缩进的print语句块;如果测试结果为False,就执行第4行的else代码块。这次age小于18,条件测试未通过,因此执行else代码块中的代码:


抱歉,您还是未成年人,不能饮酒!


5.3.3 if-elif-else 语句

经常需要检查超过两个的情形,为此可使用Python提供的if-elif-else结构。Python只执行if-elif-else结构中的一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。测试通过后,Python将执行紧跟在它后面的代码,并跳过余下的测试。

如5.3.1中的例子中,年龄和性别确定后,第3行和第5行的if语句要么一个也进不去,要么只能最多进去一个,所以这样的写法会让程序多做无谓的判断。我们可以做如下修改:

age = 18
gender = 0 # 0表示女性,1表示男性,其他表示未知
if age >= 20 and gender == 0:
    print('您已经到了合法结婚年龄!请赶快找个年龄大于22周岁的男人结婚!一定要生三胎哦!')
elif age >= 22 and gender == 1:
    print('您已经到了合法结婚年龄!请赶快找个年龄大于20周岁的女人结婚!一定要生三胎哦!')
else:
    print('您要么还太年轻,要么不男不女,总之依据中华人民共和国婚姻法没法结婚!')

第3行的if语句判断这个人是否是年满20周岁的女性,如果是,则执行里面的语句,然后直接跳出整个if语句。如果不是年满20周岁的女性,则进行第5行的elif判断这个人是否是年满22周岁的男性,如果是,则执行里面的语句,然后直接跳出整个if语句。如果这个人既不是年满20周岁的女性,也不是年满22周岁的男性,则直接进入else代码块,执行else里面的语句。

上面的例子中,是一个年龄18周岁的女性,所以她既不是年满20周岁的女性,也不是年满22周岁的男性,所以会执行else里面的print()函数,输出:


您要么还太年轻,要么不男不女,总之依据中华人民共和国婚姻法没法结婚!


5.3.4 使用多个 elif 代码块

可根据需要使用任意数量的elif代码块,例如:

age = 18
gender = 3 # 0表示女性,1表示男性,其他表示未知
if age >= 20 and gender == 0:
    print('您已经到了合法结婚年龄!请赶快找个年龄大于22周岁的男人结婚!一定要生三胎哦!')
elif age >= 22 and gender == 1:
    print('您已经到了合法结婚年龄!请赶快找个年龄大于20周岁的女人结婚!一定要生三胎哦!')
elif gender != 0 and gender != 1:
    print('中华人民共和国婚姻法没法处理特殊性别的人,请再次确认自己的性别!')
else:
    print('您太年轻,别老想着结婚,赶紧好好读书去!')

经过分析,可以很清楚地判断,上述例子肯定会打印出:


中华人民共和国婚姻法没法处理特殊性别的人,请再次确认自己的性别!