6.2 if-else语句
在日常生活中也会经常遇到二选一的情况。例如,如果上午有时间,就去找你;否则,下午去找你。在Python中,可以使用if-else语句来表示这种情况。本节介绍if-else语句的相关知识。
6.2.1 双分支结构
if-else语句是一个双分支结构,使用if和else形成了两个分支,用于区分条件的两种可能性True和False。其语法结构如下:
其中,<语句1>和<语句2>前面有相同的缩进。当满足if的<条件>时,执行if对应的语句,即<语句块1>;当不满足if的<条件>时,执行else对应的语句,即<语句块2>。
【实例6-6】编写if-else语句,实现如果变量a大于18,则输出“已经成年”,反之输出“未成年”。代码如下:
6.2.2 执行流程
在执行if-else语句时,先对if条件进行判断。如果条件成立(判断结果为True),则先执行if中的语句块1,再执行if-else语句以外的其他语句;如果条件不成立(判断结果为False),则直接执行else中的语句块2,再执行if-else语句以外的其他语句。if-else语句的执行流程图如图6.4所示。
图6.4 if-else语句的执行流程图
【实例6-7】下面编写一段包含if-else语句的代码,验证代码的执行流程。
(1)定义变量a,通过用户的输入进行赋值。定义变量b,赋值为整数30。通过if-else语句判断变量a的值是否大于10。如果条件成立,则a与2进行减法运算,结果赋值给变量b,并输出变量b的值;反之,a与5进行加法运算赋值给变量b,并输出变量b的值。最后输出变量b和变量c之和。代码如下:
代码的加粗部分是一个if-else语句,最后一行语句为if-else语句以外的其他语句。
(2)代码执行后,需要用户输入一个整数值。如果用户输入一个大于10的整数值(如15),if对应的语句会被执行,而else对应的语句不会被执行,最后一行语句也会被执行。代码如下:
各个值的含义如下。
❑ 15:用户输入的整数值,即变量a的值。
❑ 13:if中语句的执行结果。a的值为15,执行了语句b=a-2,此时,变量b的值为13,并通过print()进行了输出。
❑ 43:if-else以外的其他语句执行结果。由于执行了if中的语句,所以变量b的值为13。而变量c的值为30,因此,最终结果为13+30=43。
(3)如果用户输入一个小于10的整数值(如5),则if对应的语句不会被执行,而else对应的语句会被执行,最后一行语句也会被执行。代码如下:
❑ 5:用户输入的整数值,即变量a的值。
❑ 10:else中语句的执行结果。a的值为5,执行了语句b=a+5,此时,变量b的值为10,并通过print()进行了输出。
❑ 40:if-else以外的其他语句执行结果。由于执行了else中的语句,所以变量b的值为10。而变量c的值为30,因此,最终结果为10+30=40。
6.2.3 简化形式
在编写if-else语句时,为了方便编写,可以使用简化形式,格式如下:
当满足if的<条件>时,执行<语句块1>,不满足if的<条件>时,执行else对应的<语句块2>。
【实例6-8】下面以对比的形式编写if-else语句与简化形式,代码如下:
代码等同于:
6.2.4 if中嵌套if-else
if中嵌套if-else,是指在if语句中使用if-else语句,if-else语句属于if中的语句,与if中的其他语句属于同级别。if中嵌套if-else语法格式如下:
加粗部分为一个if-else语句,整体作为if语句中的语句。这种嵌套的执行流程如下。
(1)对if语句的<条件>进行判断,结果为True,执行<语句块1>。
(2)接着,对if-else语句中if的<条件2>进行判断,结果为True,执行<语句块2>。结果为False,执行<语句块3>。
(3)如果在流程1中<条件>的判断结果为False,则不执行任何语句,直接跳过全部代码,执行结束。
其执行流程图如图6.5所示。
图6.5 if中嵌套if-else的执行流程图
【实例6-9】下面通过在if语句中嵌套if-else,实现对及格成绩的评估。
(1)如果成绩大于或等于60,则输出“成绩及格”。在成绩及格的基础上,判断成绩是否大于或等于90。如果满足该条件,则再输出“成绩很好”;反之,输出“成绩一般”。代码如下:
代码中,在if语句中使用了一个if-else语句。
(2)执行代码后,输入成绩82的执行结果如下:
输入的分数82满足if语句的条件score>=60,执行对应的语句块print("成绩及格");不满足if-else语句中的if条件score>=90。因此,执行else对应的语句块print("成绩一般")。
(3)输入成绩99的执行结果如下:
输入的分数99满足if语句的条件score>=60,执行对应的语句块print("成绩及格");也满足if-else语句中的if条件score>=90。因此,执行对应的语句块print("成绩很好")。
6.2.5 if-else的嵌套
if-else的嵌套是指在if-else语句中使用if-else语句。由于if-else语句本身就是一个双分支结构,因此,在嵌套另一个if-else语句时,根据嵌套的位置不同分为以下3种情况。
1. if-else放在if分支中
将if-else放在if分支中,基本语法格式如下:
执行流程如下。
(1)对<条件A>进行判断,结果为True,执行<语句块a>。
(2)接着,对<条件A1>进行判断,结果为True,执行<语句块a1>;结果为False,执行<语句a2>,代码执行结束。
(3)在流程1中<条件A>的判断结果为False,执行<语句块b>,代码执行结束。
其执行流程图如图6.6所示。
图6.6 if-else放在if分支中的执行流程图
2. if-else放在else分支中
将if-else放在else分支中,基本语法格式如下:
执行流程如下。
(1)对<条件A>进行判断,结果为True,执行<语句块a>,代码执行结束。
(2)<条件A>的判断结果为False,执行<语句块b>。
(3)接着,对<条件B1>进行判断,结果为True,执行<语句块b1>;结果为False,执行<语句块b2>,代码执行结束。
其执行流程图如图6.7所示。
图6.7 if-else放在else分支中的执行流程图
3. if-else放在双分支中
将if-else放在if和else双分支中,基本语法格式如下:
执行流程如下。
(1)对<条件A>进行判断,结果为True,执行<语句块a>。
(2)接着,对<条件A1>进行判断,结果为True,执行<语句块a1>;结果为False,执行<语句a2>,代码执行结束。
(3)在流程1中<条件A>的判断结果为False,执行<语句块b>。
(4)接着,对<条件B1>进行判断,结果为True,执行<语句块b1>;结果为False,执行<语句块b2>,代码执行结束。
其执行流程图如图6.8所示。
图6.8 if-else放在双分支中的执行流程图
【实例6-10】下面通过if-else的嵌套,实现成绩的评估(改良版)。
(1)如果成绩大于或等于60,输出“成绩及格”,反之输出“成绩不及格”。在成绩及格的情况下,如果成绩大于或等于90,则输出“成绩很好”,反之输出“成绩一般”;在成绩不及格的情况下,如果成绩小于30,则输出“成绩极差”,反之输出“成绩较差”。代码如下:
(2)执行代码后,输入成绩82,执行结果如下:
输入的分数82满足if-else语句中的if条件score>=60,执行对应的语句块print("成绩及格")。同时,在该条件满足的基础上,它不满足if-else语句中的if条件score>=90。因此,执行else对应的语句块print("成绩一般")。
(3)执行代码后,输入成绩36,执行结果如下:
输入的分数36不满足if-else语句中的if条件score>=60,执行else对应的语句块print ("成绩不及格")。在该条件满足的基础上,它满足if-else语句中的if条件score<30。因此,执行else对应的语句块print("成绩较差")。
提示:在编写嵌套的if-else语句时,每组的if和else都要有相同的缩进,并且后面组的缩进要大于前一组的缩进。