零基础学Python程序设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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都要有相同的缩进,并且后面组的缩进要大于前一组的缩进。