在实际生活中经常需要作出一些判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。Python中有一种特殊的语句叫做选择结构语句,需要对一些条件作出判断,从而决定执行哪一段代码。
一、选择结构概述- 程序发生分支,根据判断框内的条件是否被满足来选择执行一块还是执行 B 块。无论条件是否被满足,只能选择执行一或 B 中之一,不能执行完一块后又执行 B 块无论走哪条路径,都要经过 C 点,然后脱离本选择结构框。
根据处理不同情况的个数,我们下面分成单分支结构、双分支结构与多分支结构来进行讲解。
二、单分支结构(一)语法格式if 表达式:
语句块
(二)执行情况- 表达式可以是任意表达式,如果表达式计算结果为True,那么执行语句块,否则什么也不做。
- 如果是算术表达式,那么结果非零就是True,结果为零就是False
- 如果是字符串表达式,那么非空字符串就是True,空字符串就是False
三、双分支结构(一)语法格式if 表达式:
语句块1
else:
语句块2:
(二)执行情况- 双分支结构就是我们通常讲的“花开两朵,各表一枝”或者“鱼和熊掌不可兼得”。使用if-else语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式,如果满足条件,则执行if后面的语句块,否则,执行else后面的语句块,这种形式的选择语句相当于汉语里的关联词语“如果……否则……”。
(三)案例演示任务1、判断令狐冲大侠喝酒杯数- 在单分支结构部分,我们已经处理过这个任务,但是有点不完美,当用户没有猜对时,程序没有给予用户一个提示,而是什么都没有输出,显得不太友好,下面我们采用双分支结构来完善。
- 修改程序 - 判断令狐冲大侠喝酒杯数
# -*- coding: utf-8 -*-
"""
功能:判断令狐冲大侠喝酒杯数
"""
print('令狐冲大侠说他喝了若干杯酒,
杯数满足条件:三三数之剩二,
五五数之剩三,七七数之剩二,
问令大侠究竟喝了多少杯酒?')
cups = int(input('你认为令大侠喝了几杯?请输入杯数:'))
if cups % 3 == 2 and cups % 5 == 3 and cups % 7 == 2:
print('朋友,你说对了,令大侠确实喝了{}杯酒!'.format(cups))
else:
print('朋友,你说错了,令大侠并没有喝{}杯酒!'.format(cups))
任务2、计算三角形面积# -*- coding: utf-8 -*-
"""
功能:计算三角形面积
"""
from math import sqrt
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and b + c > a and c + a > b:
p = (a + b + c) / 2
area = sqrt(p * (p - a) * (p - b) * (p - c))
print('area = {:.2f}'.format(area))
else:
print('{}、{}与{},无法构成三角形!'.format(a, b, c))
- 问题:构成三角形的判断条件能否换种花样呢?
# -*- coding: utf-8 -*-
"""
功能:计算三角形面积02
"""
from math import sqrt
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
p = (a + b + c) / 2
if p > a and p > b and p > c:
area = sqrt(p * (p - a) * (p - b) * (p - c))
print('area = {:.2f}'.format(area))
else:
print('{}、{}与{},无法构成三角形!'.format(a, b, c))
(四)补充说明1、else不能单飞- 在使用 else语句时,else一定不可以单独使用,它必须和保留字if一起使用,否则报错
2、else与if的匹配- 程序中使用 if…else 语句时,如果出现if语句多于else语句的情况, 那么该else语句将会根据缩进确定else语句属于哪个if语句。
- else与第二个if匹配,当用户输入一个负数,程序就没有任何输出
四、多分支结构(一)三种处理方式- 多分支结构可有三种处理方式:并列式、嵌套式、延拓式
1、并列式多分支结构if 表达式1:
语句块1
if 表达式2:
语句块2
……
if 表达式n:
语句块n
2、嵌套式多分支结构if 表达式1:
if 表达式2:
语句块2(可继续嵌套)
else:
语句块3(可继续嵌套)
else:
if 表达式3:
语句块4(可继续嵌套)
else:
语句块5(可继续嵌套)
3、延拓式多分支结构if 表达式1:
语句块1
elif 表达式2:
语句块2
……
elif 表达式n:
语句块n
else:
语句块n+1
(二)案例演示任务1、评定成绩等级(100, +∞):超出范围
[90, 100]:优秀
[80, 90):良好
[70, 80):中等
[60, 70):及格
[0, 60):不及格
(-∞, 0):超出范围
方法1、采用并列式多分支结构# -*- coding: utf-8 -*-64
"""
功能:采用并列式多分支评定成绩等级
"""
# 输入部分
score = float(input('成绩:'))
# 处理部分
level = ''
if score > 100:
level = '超出范围'
if score >&#61; 90 and score <&#61; 100:
level &#61; &#39;优秀&#39;
if score >&#61; 80 and score <90:
level &#61; &#39;良好&#39;
if score >&#61; 70 and score <80:
level &#61; &#39;中等&#39;
if score >&#61; 60 and score <70:
level &#61; &#39;及格&#39;
if score >&#61; 0 and score <60:
level &#61; &#39;不及格&#39;
if score <0:
level &#61; &#39;超出范围&#39;
# 输出部分
print(&#39;等级&#xff1a;{}&#39;.format(level))
- 总结&#xff1a;并列式多分支结构&#xff0c;优点是易于理解&#xff0c;但缺点是效率低(思考一下&#xff0c;为什么效率低)。
- 其实&#xff0c;这个程序可以作点优化&#xff0c;因为成绩大于100分或小于0分都是超出范围&#xff0c;所以可以将这两个并列得分之合而为一&#xff0c;如下图所示&#xff1a;
方法2、采用嵌套式多分支结构# -*- coding: utf-8 -*-
"""
功能&#xff1a;采用嵌套式多分支评定成绩等级
"""
# 输入部分
score &#61; float(input(&#39;成绩&#xff1a;&#39;))
# 处理部分
level &#61; &#39;&#39;
if score > 100:
level &#61; &#39;超出范围&#39;
else:
if score >&#61; 90:
level &#61; &#39;优秀&#39;
else:
if score >&#61; 80:
level &#61; &#39;良好&#39;
else:
if score >&#61; 70:
level &#61; &#39;中等&#39;
else:
if score >&#61; 60:
level &#61; &#39;及格&#39;
else:
if score >&#61; 0:
level &#61; &#39;不及格&#39;
else:
level &#61; &#39;超出范围&#39;
# 输出部分
print(&#39;等级&#xff1a;{}&#39;.format(level))
- 刚才是从大到小依次判断分数段&#xff0c;其实也可以反过来&#xff0c;从小到大依次判断分数段&#xff0c;如下图所示&#xff1a;
# -*- coding: utf-8 -*-
"""
功能&#xff1a;采用嵌套式多分支评定成绩等级02
"""
# 输入部分
score &#61; float(input(&#39;成绩&#xff1a;&#39;))
# 处理部分
level &#61; &#39;&#39;
if score <0:
level &#61; &#39;超出范围&#39;
else:
if score <60:
level &#61; &#39;不及格&#39;
else:
if score <70:
level &#61; &#39;及格&#39;
else:
if score <80:
level &#61; &#39;中等&#39;
else:
if score <90:
level &#61; &#39;良好&#39;
else:
if score <&#61; 100:
level &#61; &#39;优秀&#39;
else:
level &#61; &#39;超出范围&#39;
# 输出部分
print(&#39;等级&#xff1a;{}&#39;.format(level))
- 总结&#xff1a;嵌套式多分支结构&#xff0c;优点是层次分明、效率高&#xff0c;但缺点是嵌套层次太多时显得很繁。
方法3、采用延拓式多分支结构# -*- coding: utf-8 -*-
"""
功能&#xff1a;采用延拓式多分支评定成绩等级
"""
# 输入部分
score &#61; float(input(&#39;成绩&#xff1a;&#39;))
# 处理部分
level &#61; &#39;&#39;
if score > 100:
level &#61; &#39;超出范围&#39;
elif score >&#61; 90:
level &#61; &#39;优秀&#39;
elif score >&#61; 80:
level &#61; &#39;良好&#39;
elif score >&#61; 70:
level &#61; &#39;中等&#39;
elif score >&#61; 60:
level &#61; &#39;及格&#39;
elif score >&#61; 0:
level &#61; &#39;不及格&#39;
else:
level &#61; &#39;超出范围&#39;
# 输出部分
print(&#39;等级&#xff1a;{}&#39;.format(level))
刚才是从大到小依次判断分数段&#xff0c;其实也可以反过来&#xff0c;从小到大依次判断分数段&#xff0c;如下图所示&#xff1a;
最后&#xff0c;小编想说&#xff1a;我是一名python开发工程师&#xff0c;
整理了一套最新的python系统学习教程&#xff0c;
想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助