一、分支结构的应用场景
迄今为止,我们写的Python代码都是一条条语句自上而下顺序执行,这种代码结构被称为顺序结构。然而仅有顺序结构并不能解决所有的问题,比如我们设计一个游戏,游戏第一关的通关条件是玩家获得1000分,那么在完成本关卡游戏后,我们要根据得分来判断玩家能否进入下一关,这里就会产生通关和不通关两个分支,而且这两个分支只有一个会被执行。类似的场景还有很多,我们将这种结构称之为“分支结构”或“选择结构”。
二、if语句的使用
在Python中,要构造分支结构可以使用if、elif、else关键字,使用这三个关键字可以构造单分支结构、多分支结构和三目运算结构,下面我们借助案例帮助大家更好的理解分支结构。
单分支结构
我们使用一个生活中常见的问题来举例:判断一个年份是否是闰年。
year = int(input('请输入一个年份:'))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print('闰年')
else:
print('平年')
根据上述代码,我们带入单分支结构的语法及解释:
if 条件语句:
代码块 1
else:
代码块 2
解释:if 后面的条件语句便是判断程序如何执行的关键,如果条件语句结果为真,那么执行代码块 1,反之执行代码块 2。
总之记住一句话:分支结构最多只有一条分支会被执行。
多分支结构
上面的单分支结构是二选一问题,这里的多分支结构是多选一的问题,判断一个年份是否是闰年,其实还可以使用多分支结构来解决,请看代码:
year = int(input('请输入一个年份:'))
if year % 4 == 0 and year % 100 != 0:
print('闰年')
elif year % 400 == 0:
print('闰年')
else:
print('平年')
如果涉及到多个条件,那么就需要用到 elif 这个关键字了,我们一起来看一下多分支结构的语法及解释:
if 条件语句 1:
代码块 1
elif 条件语句 2:
代码块 2
elif 条件语句 3:
代码块 3
......
else:
代码块 N+1
解释:多选一问题呢意味着有多个相互独立的条件需要分别判断,那么除了第一个条件要写在 if 关键字后面以外,其余的都要写在 elif 关键字后面,
最后一个条件可以不写,使用 else 替代,每一条分支会按照先后顺序进行判断,哪个条件成立,就执行哪条分支下面的代码块,发现成立的条件
以后,未执行到的分支不再执行。
三目运算结构
我们再次使用三目运算结构来实现判断一个年份是否是闰年问题:
year = int(input('请输入一个年份:'))
result = "闰年" if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) else "平年"
print(result)
三目运算结构只是单分支结构的变形,程序的性能没有任何变化,只是在某种程度上变得更加美观,但是并不是所有的单分支结构都可以转化为三目运算结构的形式,请看三目运算结构的语法和解释
结果 1 if 表达式 else 结果 2
解释:判断表达式的结果是否为真,如果是真,整个运算的结果是结果 1;否则,整个运算的结果是结果 2。
三、分支结构的练习案例
-
英制单位英寸与公制单位厘米互换。
注:厘米 = 英寸 * 2.54
length = float(input('请输入长度: ')) unit = input('请输入单位(英寸或厘米): ') if unit == '英寸': print(f'{length}英寸 = {length * 2.54}厘米') else: print(f'{length}厘米 = {length / 2.54}英寸')
-
百分制成绩转换为等级制成绩。
注:如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输出B;70分-80分(不含80分)输出C;60分-70分(不含70分)输出D;60分以下输出E。
score = float(input('请输入成绩: ')) if score >= 90: grade = 'A' elif score >= 80: grade = 'B' elif score >= 70: grade = 'C' elif score >= 60: grade = 'D' else: grade = 'E' print(f'对应的等级是:{grade}')
-
输入三条边长,如果能构成三角形就计算周长和面积。
注:上面通过边长计算三角形面积的公式叫做海伦公式。
a = float(input('a = ')) b = float(input('b = ')) c = float(input('c = ')) if a + b > c and a + c > b and b + c > a: peri = a + b + c print(f'周长: {peri}') half = peri / 2 area = (half * (half - a) * (half - b) * (half - c)) ** 0.5 print(f'面积: {area}') else: print('不能构成三角形')
-
根据年龄打印成年或者未成年(用三目运算结果完成)
age = int(input('请输入一个年龄')) result = '成年' if age >= 18 else '未成年' print(result)