![零基础学Python程序设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/24/43738024/b_43738024.jpg)
6.2 if-else语句
在日常生活中也会经常遇到二选一的情况。例如,如果上午有时间,就去找你;否则,下午去找你。在Python中,可以使用if-else语句来表示这种情况。本节介绍if-else语句的相关知识。
6.2.1 双分支结构
if-else语句是一个双分支结构,使用if和else形成了两个分支,用于区分条件的两种可能性True和False。其语法结构如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-124-4.jpg?sign=1738989019-Cn7aw7xMYj0y40v4NRUB1DddaRaTuvA0-0-b81e7938d03179943d11a89537f17c5d)
其中,<语句1>和<语句2>前面有相同的缩进。当满足if的<条件>时,执行if对应的语句,即<语句块1>;当不满足if的<条件>时,执行else对应的语句,即<语句块2>。
【实例6-6】编写if-else语句,实现如果变量a大于18,则输出“已经成年”,反之输出“未成年”。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-124-5.jpg?sign=1738989019-gTzphTVnBc7npIqXTCllx0r1d8y22HKf-0-99f7433cfe43c0f9bc92f7a131953521)
6.2.2 执行流程
在执行if-else语句时,先对if条件进行判断。如果条件成立(判断结果为True),则先执行if中的语句块1,再执行if-else语句以外的其他语句;如果条件不成立(判断结果为False),则直接执行else中的语句块2,再执行if-else语句以外的其他语句。if-else语句的执行流程图如图6.4所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-125-1.jpg?sign=1738989019-J0P8rjCsTg6g1nARH7N5oEKhCtcBDwIg-0-f821b47501ca762a1d00414ac75d306e)
图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之和。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-125-2.jpg?sign=1738989019-CR2m6cuxPSGjNWrA8eYu9FlrniwsPSoE-0-3130135f6361f7dfc81b39f980dbb6dc)
代码的加粗部分是一个if-else语句,最后一行语句为if-else语句以外的其他语句。
(2)代码执行后,需要用户输入一个整数值。如果用户输入一个大于10的整数值(如15),if对应的语句会被执行,而else对应的语句不会被执行,最后一行语句也会被执行。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-125-3.jpg?sign=1738989019-ohTmSQSQxE8lEkhBU9HQxuQSmNd7XllP-0-dec9b59588cd157f6cbab1000b8fd62d)
各个值的含义如下。
❑ 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对应的语句会被执行,最后一行语句也会被执行。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-126-1.jpg?sign=1738989019-o78IytH5ArNrsJWb1BLnqLaflkKZkQVg-0-6b31be0c15aedc87329b793a9114f711)
❑ 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语句时,为了方便编写,可以使用简化形式,格式如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-126-2.jpg?sign=1738989019-bDWDluNLmTutB2gjm0kjIBhK5hIl0Dd1-0-921adbe16242c987fe004ecdc5e55fef)
当满足if的<条件>时,执行<语句块1>,不满足if的<条件>时,执行else对应的<语句块2>。
【实例6-8】下面以对比的形式编写if-else语句与简化形式,代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-126-3.jpg?sign=1738989019-UvZ7TlY5XdZNSfbofNmZ25pNyLl6pYI3-0-765ae1ed50aa808d6aba4bd509798c5f)
代码等同于:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-126-4.jpg?sign=1738989019-LLVTjCUD54tMGIzaPZzOKBWPR1hEne67-0-f8cdd63eabc1d35d0bfef8ee547b8a39)
6.2.4 if中嵌套if-else
if中嵌套if-else,是指在if语句中使用if-else语句,if-else语句属于if中的语句,与if中的其他语句属于同级别。if中嵌套if-else语法格式如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-126-5.jpg?sign=1738989019-F2zjmaM2TFzIgwdhxvdqxteupiLeYW99-0-a612ffba878f99cf18e441c4917ed376)
加粗部分为一个if-else语句,整体作为if语句中的语句。这种嵌套的执行流程如下。
(1)对if语句的<条件>进行判断,结果为True,执行<语句块1>。
(2)接着,对if-else语句中if的<条件2>进行判断,结果为True,执行<语句块2>。结果为False,执行<语句块3>。
(3)如果在流程1中<条件>的判断结果为False,则不执行任何语句,直接跳过全部代码,执行结束。
其执行流程图如图6.5所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-127-1.jpg?sign=1738989019-BoMjy9eSilhRHHcuduoq9RgeHPVZO8ic-0-db3d7b6383003a85c4cf4f3a8469a950)
图6.5 if中嵌套if-else的执行流程图
【实例6-9】下面通过在if语句中嵌套if-else,实现对及格成绩的评估。
(1)如果成绩大于或等于60,则输出“成绩及格”。在成绩及格的基础上,判断成绩是否大于或等于90。如果满足该条件,则再输出“成绩很好”;反之,输出“成绩一般”。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-127-2.jpg?sign=1738989019-PvUB5utQlCUta71AoLyB02OW7Snt5HP7-0-4a602afbce830349e43c95924f7e770c)
代码中,在if语句中使用了一个if-else语句。
(2)执行代码后,输入成绩82的执行结果如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-127-3.jpg?sign=1738989019-yBpDeAZTI8oSJwh0L3SmBD1SKdCpafXY-0-81f67b24558b1c1895e1136669405c39)
输入的分数82满足if语句的条件score>=60,执行对应的语句块print("成绩及格");不满足if-else语句中的if条件score>=90。因此,执行else对应的语句块print("成绩一般")。
(3)输入成绩99的执行结果如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-127-4.jpg?sign=1738989019-MxzRohe2IhoLo46AEke6hfQDwLGvvGHN-0-7fb9578d6f581eca8189836c199b8988)
输入的分数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分支中,基本语法格式如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-128-1.jpg?sign=1738989019-bgFMw5OhsrxYydBC2nIz3rxL7bwPHtFj-0-75c003bad6a1a819aa4c1de0bdf6ad52)
执行流程如下。
(1)对<条件A>进行判断,结果为True,执行<语句块a>。
(2)接着,对<条件A1>进行判断,结果为True,执行<语句块a1>;结果为False,执行<语句a2>,代码执行结束。
(3)在流程1中<条件A>的判断结果为False,执行<语句块b>,代码执行结束。
其执行流程图如图6.6所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-128-2.jpg?sign=1738989019-P3kN4NH4us6U3WNhU5PaSB8iZsa3H9If-0-4ba8ef9d99ddd462a805dc2b5a84254c)
图6.6 if-else放在if分支中的执行流程图
2. if-else放在else分支中
将if-else放在else分支中,基本语法格式如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-128-3.jpg?sign=1738989019-llpUruwHmpMhJTPP12D19wDSLbCO4O7a-0-176e951799a99f238116a2e6ef38f532)
执行流程如下。
(1)对<条件A>进行判断,结果为True,执行<语句块a>,代码执行结束。
(2)<条件A>的判断结果为False,执行<语句块b>。
(3)接着,对<条件B1>进行判断,结果为True,执行<语句块b1>;结果为False,执行<语句块b2>,代码执行结束。
其执行流程图如图6.7所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-129-1.jpg?sign=1738989019-TFe0dUtQUlBUQVM5r4bquc0qyv3h1z3m-0-a82bcdf488a1512b1fe46db5127d12c0)
图6.7 if-else放在else分支中的执行流程图
3. if-else放在双分支中
将if-else放在if和else双分支中,基本语法格式如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-129-2.jpg?sign=1738989019-wI2haexUmWuaIVKNjN5NIca9EGrYUiRy-0-0c8f8cdb6f092af402cc38301506b45c)
执行流程如下。
(1)对<条件A>进行判断,结果为True,执行<语句块a>。
(2)接着,对<条件A1>进行判断,结果为True,执行<语句块a1>;结果为False,执行<语句a2>,代码执行结束。
(3)在流程1中<条件A>的判断结果为False,执行<语句块b>。
(4)接着,对<条件B1>进行判断,结果为True,执行<语句块b1>;结果为False,执行<语句块b2>,代码执行结束。
其执行流程图如图6.8所示。
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-130-1.jpg?sign=1738989019-e97Ktgvj8zRvfzaUcEe0OrWaRrMjQQLh-0-65ca2df84e72d0af9c0162cdc008b096)
图6.8 if-else放在双分支中的执行流程图
【实例6-10】下面通过if-else的嵌套,实现成绩的评估(改良版)。
(1)如果成绩大于或等于60,输出“成绩及格”,反之输出“成绩不及格”。在成绩及格的情况下,如果成绩大于或等于90,则输出“成绩很好”,反之输出“成绩一般”;在成绩不及格的情况下,如果成绩小于30,则输出“成绩极差”,反之输出“成绩较差”。代码如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-130-2.jpg?sign=1738989019-pMF942efN5wK7a62lKZqyoJwrQag5C5b-0-91f1e0f0411af345490a8fc60ae9e7de)
(2)执行代码后,输入成绩82,执行结果如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-130-3.jpg?sign=1738989019-5Hl8Ew0ApzfMyq9tuXusjwq5Uo9WCR8B-0-e8ba0c0e3f1c5e9efdacd83c4bbca829)
输入的分数82满足if-else语句中的if条件score>=60,执行对应的语句块print("成绩及格")。同时,在该条件满足的基础上,它不满足if-else语句中的if条件score>=90。因此,执行else对应的语句块print("成绩一般")。
(3)执行代码后,输入成绩36,执行结果如下:
![](https://epubservercos.yuewen.com/8FCE01/23020638509734206/epubprivate/OEBPS/Images/42185-00-131-1.jpg?sign=1738989019-aAh6OYiZnCopDQagIlXJ6ybhgtTz5Zoo-0-8121d4fefcc8fbf1bfaabb9e95132550)
输入的分数36不满足if-else语句中的if条件score>=60,执行else对应的语句块print ("成绩不及格")。在该条件满足的基础上,它满足if-else语句中的if条件score<30。因此,执行else对应的语句块print("成绩较差")。
提示:在编写嵌套的if-else语句时,每组的if和else都要有相同的缩进,并且后面组的缩进要大于前一组的缩进。