第3 章选择结构
顺序结构是最简单的程序结构,语句按照从上到下的顺序依次执行。但在实际使用
中,还经常需要根据给定的条件进行分析、比较和判断,并按判断后的不同情况进行不同
的处理,这属于程序设计中的选择结构。
Python提供了多种形式的选择结构,有单分支结构、双分支结构和多分支结构,可以
根据指定的条件选择执行不同的程序分支。
3.1 任务一 马拉松成绩
3.1.1 任务目标 
全民健身,人人参与。专业选手小马和业余选手小白一起参加了北京马拉松,两位都
顺利完赛。编写程序,从键盘输入两个人的成绩(小时和分钟),计算时间间隔并输出。
3.1.2 操作步骤
(1)在IDLE中创建新文件,输入代码,如程序段3-1所示。
程序段 3-1 
hour1,minute1=input() #输入专业选手成绩
hour2,minute2=input() #输入业余选手成绩
hour=hour2-hour1 
minute=minute2-minute1 
if minute<0: 
minute=minute+60 
hour=hour-1 
print "时间间隔是{:d}小时{:d}分钟".format(hour,minute) 
(2)运行程序,结果如图3-1所示。
在Shell窗口中分别输入两个成绩,输出计算结果。

第3 章 选择结构
图3-1 任务一运行结果
3.1.3 必备知识
3.1.3.1 单分支if语句格式和执行过程 
单分支是最简单的选择结构,语法格式如下: 
if 条件: 
语句块
语句执行时先对条件进行判断,当条件成立,也就是条件为True时,执行语句块。
条件不成立时,直接执行if语句后面的语句。
语句块执行结束后,将接着执行if语句后面的语句。
3.1.3.2 单分支if语句使用说明
单分支if语句的条件可以是关系表达式或逻辑表达式,也可以是其他类型的数据。
对于非布尔类型的数据,Python设定0和空值(如空字符串、空列表)为False,任何非0 
和非空值为True。例如下面的if语句条件为True: 
n=31.6 
if n%7: #条件是非0 值(n%7 结果为3.6) 
而下面两个if语句条件则为False: 
if 0: #条件是0 值
和 
s="" 
if s: #条件是空字符串
语句块是一条或多条要执行的Python语句。语句块必须要有缩进,如果是多条语
句,则所有语句的缩进量必须相同。
条件后面的冒号不能省略,它表示接下来是满足条件后要执行的语句块。
45

Python 程序设计任务驱动式教程
3.1.3.3 Python缩进规则
Python语法的一个重要特色是使用缩进来表示语句块,而不是像其他语言一样使用
花括号。Python对于代码缩进有严格的规定,不同的缩进量表示代码的不同层次。
(1)同一语句块的所有语句都要缩进,而且缩进量必须相同。
如果同一语句块的不同语句有不同的缩进量,那么在运行代码时会引发错误提示。
例如程序段3-1的if语句部分写成如下格式: 
if minute<0: 
minute=minute+60 
hour=hour-1 
运行该程序时,会弹出如图3-2所示的窗口,提示两条语句的缩进量不相同。
(2)不能随意使用缩进。
对于没有包含在选择、循环、函数、类等结构中的语句,不能使用缩进,否则会在运行
时出现unexpectedindent的语法错误提示。
(3)缩进量没有统一规定。
Python要求语句块必须缩进,但是对缩进量没有具体的规定。编写代码时一般使用
空格或者Tab键实现缩进,可以是n 个空格,也可以是n 个Tab键的位置。
建议不同层次之间使用4个空格或1个Tab键位置作为缩进,但是不要混用。
IDLE开发环境是以4个空格作为代码的默认缩进量。选择菜单栏中的Options→ 
ConfigureIDLE命令,会弹出如图3-3所示的对话框,可以在其中对默认缩进量进行
设置。
图3-2 语法错误提示窗口图3-3 配置对话框
46

第3 章 选择结构
3.2 任务二 闰年
3.2.1 任务目标 
编写程序,从键盘输入年份,判断该年是否为闰年。
3.2.2 操作步骤
(1)在IDLE中创建新文件,输入代码,如程序段3-2所示。
程序段 3-2 
import calendar 
y=input() 
if calendar.isleap(y)==True: 
print "是闰年" 
else: 
print "不是闰年" 
(2)运行程序,结果如图3-4所示。
图3-4 任务二运行结果
3.2.3 必备知识
3.2.3.1 双分支if语句格式和执行过程 
双分支if语句的语法格式如下: 
if 条件: 
语句块1 
else: 
语句块2 
47

Python 程序设计任务驱动式教程
语句执行时先对条件进行判断,当条件为True时,执行语句块1,否则执行else后面
的语句块2。
语句块1或语句块2执行结束后,将接着执行if语句后面的语句。
3.2.3.2 双分支if语句使用说明
双分支if语句的条件和语句块的含义与单分支if语句相同。每次运行程序时,语句
块1和语句块2之间只能执行一个。
条件和else后面的冒号都不能省略。else子句不能单独出现,必须在if后面使用。
calendar是Python 中的日历模块,模块中包含与日历相关的一些函数。isleap 
(year)是其中之一,它的功能是判断闰年。如果year是闰年则函数值为True,否则为
False。
使用calendar模块中的函数前,必须先导入模块,语句如下: 
import calendar 
有关Python函数使用的更多知识可参见本书后续章节的内容。
3.3 任务三 空气质量指数
3.3.1 任务目标 
保护生态环境,从生活点滴开始,从加深了解入手。编写程序,根据从键盘输入的空
气质量指数AQI,输出相应的等级。
3.3.2 操作步骤
(1)在IDLE中创建新文件,输入代码,如程序段3-3所示。
程序段 3-3 
aqi=input() 
if 0<=aqi<=50: 
print "优" 
elif 51<=aqi<=100: 
print "良" 
elif 101<=aqi<=150: 
print "轻度污染" 
elif 151<=aqi<=200: 
print "中度污染" 
elif 201<=aqi<=300: 
48

第3 章 选择结构 
print "重度污染" 
elif aqi>300: 
print "严重污染" 
(2)运行程序,结果如图3-5所示。
图3-5 任务三运行结果
3.3.3 必备知识
3.3.3.1 多分支if语句格式和执行过程 
多分支if语句的语法格式如下: 
if 条件1: 
语句块1 
elif 条件2: 
语句块2 
.e
lif 条件n: 
语句块n 
[else: 
语句块n+1] 
语句执行时,先对条件1 进行判断,如果值为True,则执行语句块1。如果值为
False,则对条件2进行判断。如果条件2为True,则执行语句块2。以此类推,当某个条
件为True时,就执行下面对应的语句块。如果所有的条件都为False,而且语句有else 
项,则执行语句块n+1。若没有else项,则直接执行if语句后面的语句。
任一语句块执行结束后,将接着执行if语句后面的语句。
3.3.3.2 多分支if语句使用说明
多分支if语句的条件和语句块的含义与单分支if语句相同。elif是elseif的缩写。
49

Python 程序设计任务驱动式教程
elif和else子句都不能单独使用,必须和if一起出现,并且要正确配对。
一个多分支if语句中可以包含多个elif子句,但结尾只能有一个else子句。
多分支if语句执行时,不管有多少个分支,都只能执行一个分支,或者一个也不执
行,不能同时执行多个分支。因此,即使语句中有多个条件为True,也只执行第一个条件
为True的分支,其他分支将不再执行。对于多分支语句,要注意条件书写的顺序。
3.4 任务四 出租车费用
3.4.1 任务目标 
城市中不同类型的网约车起步价和计费分别为:1类车起步价14元/3千米,3千米
以外1.5元/千米;2类车起步价16元/3千米,3千米以外1.8元/千米;3类车起步价
20元/3千米,3千米以外2.5元/千米。从键盘输入网约车的车型及距离,计算应付的车
费并输出。
3.4.2 操作步骤
(1)在IDLE中创建新文件,输入代码,如程序段3-4所示。
程序段 3-4 
model=input("输入车型: ") 
dist=input("输入距离: ") 
if model==1: 
if dist<=3: 
cost=14 
else: 
cost=14+(dist-3)*1.5 
elif model==2: 
if dist<=3: 
cost=16 
else: 
cost=16+(dist-3)*1.8 
elif model==3: 
if dist<=3: 
cost=20 
else: 
cost=20+(dist-3)*2.5 
print "车费是",cost 
50

第3 章 选择结构
(2)运行程序,结果如图3-6所示。
图3-6 任务四运行结果
3.4.3 必备知识
3.4.3.1 if语句的嵌套 
if语句的嵌套是在if语句的语句块中包含另一个if语句。例如,在单分支if语句中
嵌套双分支if语句,形式如下: 
if 条件1: 
if 条件2: 
语句块1 
else: 
语句块2 
或者在双分支if语句中嵌套单分支if语句,形式如下: 
if 条件1: 
if 条件2: 
语句块1 
else: 
语句块2 
在Python中,单分支if语句、双分支if-else语句和多分支if-elif-else语句之间可以
相互嵌套。在相互嵌套时,一定要严格遵守不同层次语句块的缩进规则。
嵌套的if语句一般都可以用多分支if语句实现,因此,任务四的代码也可以如程序
段3-5所示。
程序段 3-5 
model=input("输入车型: ") 
dist=input("输入距离: ") 
if model==1 and dist<=3: 
51

Python 程序设计任务驱动式教程 
cost=14 
elif model==1 and dist>3: 
cost=14+(dist-3)*1.5 
elif model==2 and dist<=3: 
cost=16 
elif model==2 and dist>3: 
cost=16+(dist-3)*1.8 
elif model==3 and dist<=3: 
cost=20 
elif model==3 and dist>3: 
cost=20+(dist-3)*2.5 
print "车费是",cost 
3.4.3.2 pass语句
编写代码是一个不断完善的过程,不是一蹴而就的事情。当有些代码的思路还不完
整时,可能会出现空代码,但在运行程序时,Python会对空代码部分给出错误提示。例如
下面的程序: 
x=input() 
if x%9==0: 
#语句待补充
else: 
print x 
运行时会给出如图3-7所示的错误提示。
图3-7 空代码错误提示
而将程序改为如下形式则可以正确运行。 
x=input() 
if x%9==0: 
pass 
else: 
print x 
pass是Python的空语句,解释器执行pass语句时,除了检查语法是否合法,其他什
么也不做。对于选择、循环、函数定义、类定义等不允许出现空代码的结构,pass语句可
以避免出现错误。
52

3.小结
5 

本章主要知识点有: 

● 单分支if语句; 
● 双分支if语句; 
● 多分支if语句; 
●if语句的嵌套; 
●pas 
语句。
3.动手写代码
6 

1.编写程序,判断输入的数字是否为21的倍数。
2.编写程序,将输入的任意3个数按从大到小的顺序输出。
3.编写程序,计算一元二次方程ax2+bx+c=0的实根。有以下几种可能: 
(1)a=0,不是一元二次方程;
(2)b2-4c=0,有两个相等的实根;
(3)b2-4a>0,有两个不等的实根。
(4)b2-4c<0,无实根。c(a) 
4.编写根据输入的3条边长值计算三角形面积。如果输入值不符合“任意两
边之和大于第三边”,则给出错误提示。程序,(a) 
5.编写程序,计算个人收入所得税。起征点为5000元,超过5000元的部分按表3-1 
规则计算。
表3-
1 
计算规则

应纳税所得额税率速算扣除数
不超过3000元3% 0 
超过3000元至12000元10% 210 
超过12000元至25000元20% 1410 
超过25000元至35000元25% 2660 
超过35000元至55000元30% 4410 
超过55000元至80000元35% 7160 
超过80000元45% 15160 

提示:如收入为10000元,则应纳税所得额为10000-5000=5000元,按表3-1中第
2行税率进行计算,所得税为5000×10%-210=290元。

6.编写程序,将一年中的12个月分成4个季节输出。
第
3 
章选择结构

35