
6.1 if语句
if语句是Python中最常用,也是最简单的条件语句。这种条件选择在日常生活中经常遇到。例如,如果上午有时间的话,我就去找你。在Python中,这种情况使用if语句表示。本节介绍if语句的相关知识。
6.1.1 单分支结构
if语句是单分支结构,只有一个条件和结果。它使用if保留字对条件进行判断。其语法结构如下:

其格式主要分为以下几部分。
❑ if:保留字。
❑ <条件>:用来判断的标准。当为单一条件时,它是一个关系表达式或布尔值;当为多个条件时,它是一个逻辑表达式。<条件>后面必须使用“:”。
❑ <语句>:当if的<条件>满足后要执行的一个语句,前面需要使用缩进(使用Tab键或4个空格),用来表达<语句>与if的包含关系。
提示:语法中的if、<条件>、“:”和<语句>共同构成Python的一个语句。
【实例6-1】下面使用if语句,实现:如果变量a大于10,则输出“a的值大于10”,代码如下:

在该实例中,条件为a>10,执行的语句为print('a的值大于10')。两者结合起来表示,当变量a大于10时,将输出“a的值大于10”。
当语句比较简单时,可以将语句与条件写到同一行,上述代码可以简写为:

6.1.2 执行流程
在执行if语句时,先对if条件进行判断。如果条件成立(判断结果为True),则先执行if语句中的语句,再执行if语句以外的其他语句;如果条件不成立(判断结果为False),则直接跳过if语句,执行if语句以外的其他语句。if语句的执行流程图如图6.1所示。

图6.1 if语句的执行流程图
【实例6-2】下面编写一段包含if语句的代码,验证代码的执行流程。
(1)定义变量a,赋值为整数50。定义变量b,通过用户的输入进行赋值。使用if语句判断变量b的值是否大于20。如果条件成立,则输出变量a与变量b之和。最后,输出变量a与变量b之差。代码如下:

在该实例中,加粗部分是一个if语句。条件为,判断用户输入的值是否大于20。print(a+b)属于if语句中的语句,而print(a-b)不属于if语句中的语句,它是if语句以外的其他语句。
(2)代码执行后,需要用户输入一个整数值。如果用户输入一个大于20的整数值(如60),则if语句会被执行,其他代码语句也会被执行。结果如下:

其中,60为用户输入的值,即变量b的值;110为if语句中print(a+b)语句执行结果;-10为其他代码print(a-b)语句执行结果。
(3)如果用户输入一个小于20的整数值(如10),if语句将被跳过,不会执行print(a+b)语句,只执行其他代码语句print(a-b)。结果如下:

其中,40为print(a-b)语句的执行结果。
6.1.3 使用语句块
if语句可以包含一个语句,也可以包含多个语句。当包含多个语句时,这些语句共同组成语句块。每个语句之间必须使用相同的缩进。当if语句条件为True时,这些语句都会被执行。其语法格式如下:

语法中的<语句1>和<语句2>共同构成语句块,前面使用了相同的缩进。当<条件>为True时,依次执行<语句1>和<语句2>。
【实例6-3】下面编写包含if语句的代码,if语句中将使用语句块。当用户输入符合条件的整数时,执行语句块。代码如下:

执行代码,用户输入整数50,执行结果如下:

说明:输入整数50时,变量b的值为50,满足if语句的条件b<100,执行了语句块。其中,2000为print(a*b)语句执行结果;1.25为print(b/a)语句执行结果。
6.1.4 if语句的连用
if语句的连用是指连续使用2个或多个if语句,实现连续判断作用。其语法格式如下:

代码中连续使用了3个if语句。其中,<语句1>、<语句2>和<语句3>前面是相同的缩进。执行流程如下:
(1)对第1个if语句的<条件1>进行判断,如果为True,则执行<语句1>,如果为False,则跳过第1个if语句。
(2)继续对第2个if语句的<条件2>进行判断,如果为True,则执行<语句2>,如果为False,则跳过第2个if语句。
(3)继续对第3个if语句的<条件3>进行判断,如果为True,则执行<语句3>,如果为False,则跳过第3个if语句。
(4)执行完成。
其执行流程图如图6.2所示。

图6.2 if语句的连用的执行流程图
【实例6-4】下面通过if语句的连用,实现对学生成绩的评估。其评估标准如表6-1所示。
表6.1 成绩评估标准

(1)编写代码如下:

说明:score是一个变量,表示成绩分数值。
(2)当输入的分数为58时,代码执行结果如下:

(3)当输入的分数为76时,代码执行结果如下:

(4)当输入的分数为80时,代码执行结果如下:

(5)当输入的分数为91时,代码执行结果如下:

6.1.5 if语句的嵌套
if语句的嵌套是指在if语句(外if)中使用if语句(内if)。此时,内if语句相当于外if语句中的语句块。当条件中还包含其他条件时,可以嵌套使用if语句。其语法格式如下:

执行流程如下。
(1)对外if语句的<条件1>进行判断,如果为True,则执行<语句1>。
(2)接着,对内if语句的<条件2>进行判断,如果为True,则执行<语句2>,反之,不执行<语句2>,全部if语句执行结束。
(3)如果在流程1中<条件1>的判断结果为False,则不执行任何语句,直接跳过全部if语句,执行结束。
其执行流程图如图6.3所示。

图6.3 if语句的嵌套的执行流程图
【实例6-5】下面通过if语句的嵌套,对成绩分数进行评估。
(1)如果成绩大于或等于60分,为及格成绩,则输出“成绩及格”。当成绩小于80分时,输出“为一般”;当成绩大于或等于80分,小于90分时,输出“为良好”;当成绩大于或等于90分时,输出“为优秀”。代码如下:

(2)当输入的分数为63时,代码执行结果如下:

(3)当输入的分数为88时,代码执行结果如下:

(4)当输入的分数为100时,代码执行结果如下:
