![Python程序设计应用教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/751/31729751/b_31729751.jpg)
3.1 选择结构
选择结构可用if语句、if…else语句和if…elif…else语句实现。
3.1.1 if语句
Python的if语句的功能跟其他语言的非常相似,都是用来判定给出的条件是否满足,然后根据判断的结果(即真或假)决定是否执行给出的操作。if语句是一种单选结构,它选择的是做与不做。它由三部分组成:关键字if本身、测试条件真假的表达式(简称为条件表达式)和表达式结果为真(即表达式的值为非零)时要执行的代码。if语句的语法形式如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00044001.jpg?sign=1739694388-66OvhVF2xzD0oHepPGBrvFyevM5B81AP-0-ba26a1ec05a7be926edafd5d84a6be7c)
if语句的流程图如图3-1所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00044002.jpg?sign=1739694388-0Mob99dWM4xI7jMzgntnVRCIm2cGu8tv-0-540da42b5db750a91d95f9a6fdba81df)
图3-1 if语句的流程图
if语句的表达式用于判断条件,可以用>(大于)、<(小于)、==(等于)、>=(大于或等于)、<=(小于或等于)来表示其关系。
现在用一个示例程序来演示一下if语句的用法。这里的程序很简单,只要用户输入一个整数,如果这个数字大于6,就输出一行字符串;否则,直接退出程序。代码如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00044003.jpg?sign=1739694388-ye6UNceLuzs7IpUbUjutIUpRpFFPOecM-0-55429bb2e6957ecec66842f94c0bb898)
通常,一个程序都会有输入/输出,这样可以与用户进行交互。用户输入一些信息后,可对他输入的内容进行一些适当的操作,然后再输出用户想要的结果。可以用input进行输入,print进行输出,这些都是简单的控制台输入/输出,复杂的有处理文件等。
3.1.2 if…else语句
上面的if语句是一种单选结构,也就是说,如果条件为真(即表达式的值为非零),那么执行指定的操作;否则就会跳过该操作。而if…else语句是一种双选结构,是在两种备选行动中选择哪一个的问题。if…else语句由五部分组成:关键字if、测试条件真假的表达式、表达式结果为真(即表达式的值为非零)时要执行的代码,以及关键字else和表达式结果为假(即表达式的值为零)时要执行的代码。if…else语句的语法形式如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045001.jpg?sign=1739694388-dXWVgt5lnvooC9BpkcREuNfnxI7BqSLo-0-bf8befee2b9d199c5ff4773fad336698)
if…else语句的流程图如图3-2所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045002.jpg?sign=1739694388-5n1pC4SchdZpSxBgNpfJyaShazVoCTRu-0-c7b894ba15c1520b6a3ae8764d51a0ff)
图3-2 if…else语句的流程图
下面对上面的示例程序进行修改,以演示if…else语句的使用方法。这里的程序很简单,只要用户输入一个整数,如果这个数字大于6,就输出一行信息,指出输入的数字大于6;否则,输出另一行字符串,指出输入的数字小于或等于6。代码如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045003.jpg?sign=1739694388-4sz3ZGOIn0KQnIKFib3yv40439JC6FB0-0-7367954cfbd4df9789a4da4c7a98b985)
【例3-1】输入一个年份,判断是否为闰年。闰年的年份必须满足以下两个条件之一:
(1)能被4整除,但不能被100整除的年份都是闰年。
(2)能被400整除的年份都是闰年。
分析:设变量year表示年份,判断year是否满足以下表达式。
条件(1)的逻辑表达式是:year%4 == 0&&year%100 != 0。
条件(2)的逻辑表达式是:year%400 == 0。
两者取“或”,即得到判断闰年的逻辑表达式为:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045004.jpg?sign=1739694388-Rm4GlZO3zGoXELejCdeX3wDnkt7LQVAx-0-3d2d4221cbf5d090ec5890167a356998)
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045005.jpg?sign=1739694388-0VAWfKnd8IIII02Mm4MthxB1PJVFq2cY-0-6475452db221ecf36cf2b5cf099db563)
判断闰年后,也可以输入某年某月某日,判断这一天是这一年的第几天。以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天即本年的第几天。特殊情况是闰年,在输入月份大于3时需考虑多加一天。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045006.jpg?sign=1739694388-3H1CCB9YgEbDExaWwZ9WIPUjMzyMEMSa-0-4676a1fa125ca5b56571ccaeac9136e2)
【例3-2】任意输入3个数字,按从小到大的顺序输出。
分析:(1)将x与y比较,把较小者放入x中,较大者放入y中。(2)将x与z比较,把较小者放入x中,较大者放入z中,此时x为三者中的最小者。(3)将y与z比较,把较小者放入y中,较大者放入z中,此时x、y、z已按由小到大的顺序排列。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00046002.jpg?sign=1739694388-RWySx2BtVpUbWgXsdCNV0tC5oSLIfXlU-0-1b24a4a2d9187dded3e5ace1a2b2528a)
假如x、y、z分别输入1、4、3,以上代码的输出结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00046003.jpg?sign=1739694388-t52nJBJnULL3auq4e4yiKKH1G4yTXqir-0-aa5321f3ca1c08c595fedae1501b07d5)
其中,x,y=y,x这种语句是同时赋值,将赋值号右侧的表达式依次赋给左侧的变量。例如:x,y=1,4相当于x=1,y=4。
3.1.3 if…elif…else语句
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00046004.jpg?sign=1739694388-HqNpSGLG2fLVZA4u1EJhxBNeymkf6B5P-0-f854f3be3f0bdc75d9c9ab619b9987ab)
选择结构
有时候需要在多组动作中选择一组执行,这时就会用到多选结构,对于Python语言来说就是if…elif…else语句。该语句可以利用一系列条件表达式进行检查,并在某个表达式为真的情况下执行相应的代码。需要注意的是,虽然if…elif…else语句的备选动作较多,但是有且只有一组动作被执行,该语句的语法形式如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00046005.jpg?sign=1739694388-6kZfTRWyRYVUNTpD75jCgNVWL1oZD6dW-0-006338932ff375f29509edcf7b6246e5)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00047001.jpg?sign=1739694388-qR4eExzpgOP9uYG6RJtOIYic9KUJ4Wbc-0-3fd91b973497206398f55fe88974435b)
注意:最后一个elif子句之后的else子句没有进行条件判断,它实际上处理跟前面所有条件都不匹配的情况,所以else子句必须放在最后。
if…elif…else语句的流程图如图3-3所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00047002.jpg?sign=1739694388-7qiOfX9MEJNJYYnJCWecCUMK2VjJYmzf-0-830aeb154c290fc489e326c281369448)
图3-3 if…elif…else语句的流程图
下面继续对上面的示例程序进行修改,以演示if…elif…else语句的使用方法。这里还是要用户输入一个整数,如果这个数字大于6,就输出一行信息,指出输入的数字大于6;如果这个数字等于6,则输出另一行字符串,指出输入的数字等于6;否则,指出输入的数字小于6。具体代码如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00047003.jpg?sign=1739694388-GP1Mrwjg3ilMVUkI6wIEJJAwlAXoGjDM-0-8198165cf8325f53ac278949fe5a7e9e)
【例3-3】输入学生的成绩score,按分数输出其等级:score≥90为优,90>score≥80为良,80>score≥70为中等,70>score≥60为及格,score<60为不及格。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00047004.jpg?sign=1739694388-iHfr9ZEpbu5NTFoJdAVVaq2Wr2xVvAzH-0-5b89e5515eea56e1f52ac2658006b947)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048001.jpg?sign=1739694388-7xupSmOSVEHgj8ddm1El3qrQHZpP8Yja-0-88d9d240178369561be6e14029d00295)
说明:3种选择语句中,条件表达式都是必不可少的组成部分。当条件表达式的值为零时,表示条件为假;当条件表达式的值为非零时,表示条件为真。那么哪些表达式可以作为条件表达式呢?基本上,最常用的是关系表达式和逻辑表达式。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048002.jpg?sign=1739694388-olU53AJ63KfppAboUUYiwooJQULE9vAE-0-87511112bd65713af6cdba730583408d)
除此之外,条件表达式可以是任何数值类型表达式,甚至可以是字符串。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048003.jpg?sign=1739694388-cucXvuEcESGsnUcPwQSayFj7WKKHGvyo-0-4080285afaa1d70f4a0a62af836f20a1)
另外,C语言用花括号{}区分语句体,而Python的语句体是用缩进形式来表示的,如果缩进不正确,会导致逻辑错误。
3.1.4 pass语句
Python提供了一个关键字pass,类似于空语句,可以用在类和函数的定义中或者选择结构中。当暂时没有确定如何实现功能,或者为以后的软件升级预留空间,或者为其他类型功能时,可以使用该关键字来“占位”。例如,下面的代码是合法的:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048004.jpg?sign=1739694388-warRn4uc0OQlwYIG9nRAKTMHhNEFvUqE-0-b844bfb576ffe8b8257cb0a08d286148)