应⽤场景
迄今为⽌,我们写的
Python
代码都是⼀条⼀条语句顺序执⾏,这种代码结构通常称之为顺序结构。然⽽仅有顺序结构并不能解决所有的问题,⽐如我们设计⼀个游戏,游戏第⼀关的通关条件是玩家获得1000分,那么在完成本局游戏后,我们要根据玩家得到分数来决定究竟是进⼊第⼆关,还是告诉玩家“Game Over”,这⾥就会产⽣两个分⽀,⽽且这两个分⽀只有⼀个会被执⾏。类似的场景还有很多,我们将这种结构称之为“
分⽀结构
”
或
“
选择结构
”
。给⼤家⼀分钟的时间,你应该可以想到⾄少
5
个以上这样的例⼦,赶紧试⼀试。
if
语句的使⽤
在
Python
中,要构造分⽀结构可以使⽤
if
、
elif
和
else
关键字。所谓
关键字
就是有特殊含义的单
词,像
if
和
else
就是专⻔⽤于构造分⽀结构的关键字,很显然你不能够使⽤它作为变量名。下⾯的例⼦中演示了如何构造⼀个分⽀结构。
"""
⽤户身份验证
"""
username = input('请输⼊⽤户名: ')
password = input('请输⼊⼝令: ')
# ⽤户名是admin且密码是123456则身份验证成功否则身份验证失败
if username == 'admin' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
需要说明的是,不同于
C++
、
Java
等编程语⾔,
Python
中没有⽤花括号来构造代码块⽽是
使⽤了缩进的
⽅式来表示代码的层次结构
,如果
if
条件成⽴的情况下需要执⾏多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说连续的代码如果⼜保持了相同的缩进那么它们属于同⼀个代码块
,相当于是⼀个执⾏的整体。缩进
可以使⽤任意数量的空格,但
通常使⽤
4
个空格
,强烈建议⼤家
不要使⽤制表
键来缩进代码
,如果你已经习惯了这么做,可以
设置代码编辑⼯具将
1
个制表键⾃动变成
4
个空格
,很多的代码编辑⼯具都⽀持这项功能。
提示
:
if
和
else
的最后⾯有⼀个
:
,它是⽤英⽂输⼊法输⼊的冒号;程序中输⼊的 '
、
"
、
=
、
(
、
)
等特殊字符,都是在英⽂输⼊法状态下输⼊的。有很多初学者经常不注意这⼀点,结果运⾏代码的时候就会遇到很多莫名其妙的错误提示。强烈建议
⼤家在写代码的时候都打开英⽂输⼊法
(注意是英⽂输⼊法⽽不是中⽂输⼊法的英⽂输⼊模式),这样可以避免很多不必要的麻烦。
如果要构造出更多的分⽀,可以使⽤ if...elif...else...
结构或者嵌套的
if...else...
结构,下⾯的代码演示了如何利⽤多分⽀结构实现分段函数求值。
![](https://i-blog.csdnimg.cn/blog_migrate/43672e6bd5cfbc4b4f8a0b6fb15e8a0b.png)
"""
分段函数求值
"""
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
elif x >= -1:
y = x + 2
else:
y = 5 * x + 3
print(f'f({x}) = {y}')
当然根据实际开发的需要,分⽀结构是可以嵌套的,例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级(⽐如点亮两颗或三颗星星),那么我们就需要在 if
的内部构造出⼀ 个新的分⽀结构,同理 elif
和
else 中也可以再构造新的分⽀,我们称之为嵌套的分⽀结构,也就是说上⾯的代码也可以写成下⾯的样⼦。
"""
分段函数求值
"""
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
else:
if x >= -1:
y = x + 2
else:
y = 5 * x + 3
print(f'f({x}) = {y}')
说明:
⼤家可以⾃⼰感受和评判⼀下这两种写法到底是哪⼀种更好。在
Python
之禅
中有这么⼀
句话:
“
Flat is better than nested
”
,之所以提倡代码
“
扁平化
”
是因为嵌套结构的嵌套层次如果
很多,会严重的影响代码的可读性,所以能使⽤扁平化结构时就不要使⽤嵌套结构。
⼀些例⼦
例⼦
1
:英制单位英⼨与公制单位厘⽶互换。
"""
英制单位英⼨和公制单位厘⽶互换
"""
value = float(input('请输⼊⻓度: '))
unit = input('请输⼊单位: ')
if unit == 'in' or unit == '英⼨':
print('%f英⼨ = %f厘⽶' % (value, value * 2.54))
elif unit == 'cm' or unit == '厘⽶':
print('%f厘⽶ = %f英⼨' % (value, value / 2.54))
else:
print('请输⼊有效的单位')
例⼦
2
:百分制成绩转换为等级制成绩。
要求
:如果输⼊的成绩在
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('对应的等级是:', grade)
例⼦
3
:输⼊三条边⻓,如果能构成三⻆形就计算周⻓和⾯积。
"""
判断输⼊的边⻓能否构成三⻆形,如果能则计算出三⻆形的周⻓和⾯积
"""
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('不能构成三⻆形')
说明: 上⾯通过边⻓计算三⻆形⾯积的公式叫做海伦公式。