![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=1738899977-NZdqFu0RPgzq3cKrSJN8aPFrz6glITWr-0-0faeab41575c26823e12dc3c5dc6146f)
if语句的流程图如图3-1所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00044002.jpg?sign=1738899977-tNdIRQ09DsDT4porlOvRn9LyQUa3OW0T-0-5c6d9f138a039783ab13c0ef943d39a2)
图3-1 if语句的流程图
if语句的表达式用于判断条件,可以用>(大于)、<(小于)、==(等于)、>=(大于或等于)、<=(小于或等于)来表示其关系。
现在用一个示例程序来演示一下if语句的用法。这里的程序很简单,只要用户输入一个整数,如果这个数字大于6,就输出一行字符串;否则,直接退出程序。代码如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00044003.jpg?sign=1738899977-bK59ZnRi2rW7KQ8darsEulG5ngz8etiZ-0-a46ae6387a5598f5a20c861f9992c03d)
通常,一个程序都会有输入/输出,这样可以与用户进行交互。用户输入一些信息后,可对他输入的内容进行一些适当的操作,然后再输出用户想要的结果。可以用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=1738899977-VleqOZ31XwvNZzDCk2sQCFQEEjqC94sd-0-e8fccfb8356701eba15ce9f56d1569d8)
if…else语句的流程图如图3-2所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045002.jpg?sign=1738899977-S30mJbgDgfseIPERLM5QbG4JTJsjXfMb-0-5af9511bf2816e946bf84d54d44dd264)
图3-2 if…else语句的流程图
下面对上面的示例程序进行修改,以演示if…else语句的使用方法。这里的程序很简单,只要用户输入一个整数,如果这个数字大于6,就输出一行信息,指出输入的数字大于6;否则,输出另一行字符串,指出输入的数字小于或等于6。代码如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045003.jpg?sign=1738899977-digMzSX5GOp5QswDVegUdd1OLNFf0Bam-0-b97d87577347aa473b4f94238e078a1b)
【例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=1738899977-L7hbnFvSs73R4aWdQR1Ouqic1DxQnp3Q-0-62989893eadb2f08c6b9ae0fa5847ce1)
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045005.jpg?sign=1738899977-Y9F4GkIB15NkrtZKhrbWk8ZUtzKSRqgU-0-c6f007785cd6f3ce60976944735198a4)
判断闰年后,也可以输入某年某月某日,判断这一天是这一年的第几天。以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天即本年的第几天。特殊情况是闰年,在输入月份大于3时需考虑多加一天。
程序代码:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00045006.jpg?sign=1738899977-1RZiZln8Cf9zWFYrt3KP5jANrM8Z5tUr-0-05f8cc071d00574a8af4b97fc87c183c)
【例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=1738899977-mDuqGWhUXma2JxZ8TgyDHKoZE2FdLVCG-0-52734d211b4361c8d1b063eef4f0c4e5)
假如x、y、z分别输入1、4、3,以上代码的输出结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00046003.jpg?sign=1738899977-aScAPvsSWTE1oMsvHMtZgz5rNhRR9Uyl-0-234af8cfc2148b2dc5a95575796f7089)
其中,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=1738899977-88MmWp46Vn4hAkcfSHERFXXWOZhyc8Tz-0-f2728d15c94c46c1716db5ee1c4b087b)
选择结构
有时候需要在多组动作中选择一组执行,这时就会用到多选结构,对于Python语言来说就是if…elif…else语句。该语句可以利用一系列条件表达式进行检查,并在某个表达式为真的情况下执行相应的代码。需要注意的是,虽然if…elif…else语句的备选动作较多,但是有且只有一组动作被执行,该语句的语法形式如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00046005.jpg?sign=1738899977-6Qn6UN13Tlgx90HzboewEZqHrMNnGPGh-0-08b9dd5694f937d0b335220d72553944)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00047001.jpg?sign=1738899977-v9RJGBlwyafv0Vbm0tGp7UdfG77P6B5D-0-156551e42e79d7a24a3b5f0b8c480950)
注意:最后一个elif子句之后的else子句没有进行条件判断,它实际上处理跟前面所有条件都不匹配的情况,所以else子句必须放在最后。
if…elif…else语句的流程图如图3-3所示。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00047002.jpg?sign=1738899977-2JgbxiAsCvaalXi78C7mYsezH5hQF48U-0-db8324773baabf7052c9a31f6ad4a34b)
图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=1738899977-pAvomrK0A3K7AXoNu3aDNhmixlBSVeLA-0-82800b6dad7b3a87872ad9841f3b2fdd)
【例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=1738899977-L8eCBbaxMNer2VMFPmoZ8LZYN0uvg5yG-0-50a814aba75e21bbc889c2a0792303fb)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048001.jpg?sign=1738899977-CMp6OI1L86wgz1OI18jybbwvHS87JoZE-0-b5302e4e00ee72828589ec7452aa320e)
说明:3种选择语句中,条件表达式都是必不可少的组成部分。当条件表达式的值为零时,表示条件为假;当条件表达式的值为非零时,表示条件为真。那么哪些表达式可以作为条件表达式呢?基本上,最常用的是关系表达式和逻辑表达式。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048002.jpg?sign=1738899977-nz3VzUrNv0xAwcC1bWkLJDvkiEA6NBEM-0-a55d98ce94bf6534fc11eccdb70a53e3)
除此之外,条件表达式可以是任何数值类型表达式,甚至可以是字符串。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048003.jpg?sign=1738899977-0fqk7rQjf2sxcKbwXVSH1g2zIHXie8nB-0-4a7d6ff30607241afff0071fc3456bf1)
另外,C语言用花括号{}区分语句体,而Python的语句体是用缩进形式来表示的,如果缩进不正确,会导致逻辑错误。
3.1.4 pass语句
Python提供了一个关键字pass,类似于空语句,可以用在类和函数的定义中或者选择结构中。当暂时没有确定如何实现功能,或者为以后的软件升级预留空间,或者为其他类型功能时,可以使用该关键字来“占位”。例如,下面的代码是合法的:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00048004.jpg?sign=1738899977-JxLdygrEhBjtuoXbnrjvLXAdzTP5ZqqR-0-908f52a848c3369d8d76b74894373a90)