Python分支结构详解:if、elif与嵌套用法
本文深入讲解Python中的分支结构,介绍如何使用if、elif和else关键字构建条件逻辑。通过分段函数、身份验证等实例,演示单分支、多分支及嵌套分支的实现方式,并强调扁平化代码的可读性优势,帮助开发者掌握Python条件控制的核心技巧。
分支结构的应用场景
分支结构的应用场景
到目前为止,我们编写的Python代码都是按照书写顺序逐行执行的,这种执行方式被称为顺序结构。然而,仅依靠顺序结构无法处理所有实际问题。例如在设计游戏时,第一关的通关条件可能是玩家获得1000分。完成本局后,系统需要根据玩家得分判断是进入第二关还是提示“Game Over”。这种情况下,程序会产生两个分支,且每次运行只执行其中一个分支,这就是分支结构。类似场景在生活中随处可见,不妨花一分钟思考至少5个这样的例子。
if语句的基本用法
if语句的使用
在Python中,构造分支结构主要依赖if、elif和else这三个关键字。关键字是指具有特殊语法含义的单词,如if和else专门用于定义分支逻辑,因此不能将它们用作变量名(其他标识符也需避免使用关键字)。以下示例展示了如何构建基本的分支结构。
"""
用户身份验证
Version: 0.1
Author: 骆昊
"""
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 如果希望输入口令时 终端中没有回显 可以使用getpass模块的getpass函数
# import getpass
# password = getpass.getpass('请输入口令: ')
if username == 'admin' and password == '123456':
print('身份验证成功!')
else:
print('身份验证失败!')
值得注意的是,与C/C++或Java等语言不同,Python不使用花括号来定义代码块,而是通过缩进表示代码的层级关系。如果if条件成立时需要执行多条语句,只需确保这些语句具有相同的缩进量即可。换句话说,保持相同缩进的连续代码被视为同一个代码块,构成一个完整的执行整体。
多分支与分段函数
若需处理更多分支情况,可以使用if…elif…else结构。例如,计算以下分段函数的值:
$$f(x)=\begin{cases} 3x-5&\text{(x>1)}\x+2&\text{(-1}\leq\text{x}\leq\text{1)}\5x+3&\text {(x<-1)}\end{cases}$$
"""
分段函数求值
3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
5x + 3 (x < -1)
Version: 0.1
Author: 骆昊
"""
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
elif x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
嵌套分支结构
实际开发中,分支结构支持嵌套使用。例如,在判断是否通关后,还需根据获得的宝物或道具数量评定等级(如点亮两颗或三颗星星)。此时,需在if内部构建新的分支结构;同理,elif和else中也可嵌套新分支,这被称为嵌套分支结构。上述代码也可改写为嵌套形式。
"""
分段函数求值
3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
5x + 3 (x < -1)
Version: 0.1
Author: 骆昊
"""
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(%.2f) = %.2f' % (x, y))
**说明:**读者可自行对比这两种写法。Python之禅中提到“Flat is better than nested.”,即扁平结构优于嵌套结构。这是因为多层嵌套会显著降低代码可读性,因此推荐优先使用扁平化写法。
练习1:英制单位与公制单位互换
"""
英制单位英寸和公制单位厘米互换
Version: 0.1
Author: 骆昊
"""
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:掷骰子决定做什么
"""
掷骰子决定做什么事情
Version: 0.1
Author: 骆昊
"""
from random import randint
face = randint(1, 6)
if face == 1:
result = '唱首歌'
elif face == 2:
result = '跳个舞'
elif face == 3:
result = '学狗叫'
elif face == 4:
result = '做俯卧撑'
elif face == 5:
result = '念绕口令'
else:
result = '讲冷笑话'
print(result)
**说明:**上述代码调用了random模块中的randint函数,用于生成指定范围内的随机整数,以模拟掷骰子过程。
练习3:百分制成绩转等级制
"""
百分制成绩转等级制成绩
90分以上 --> A
80分~89分 --> B
70分~79分 --> C
60分~69分 --> D
60分以下 --> E
Version: 0.1
Author: 骆昊
"""
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)
练习4:输入三条边长如果能构成三角形就计算周长和面积
"""
判断输入的边长能否构成三角形
如果能则计算出三角形的周长和面积
Version: 0.1
Author: 骆昊
"""
import math
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
print('周长: %f' % (a + b + c))
p = (a + b + c) / 2
area = math.sqrt(p * (p - a) * (p - b) * (p - c))
print('面积: %f' % (area))
else:
print('不能构成三角形')
练习5:个人所得税计算器。
"""
输入月收入和五险一金计算个人所得税
Version: 0.1
Author: 骆昊
"""
salary = float(input('本月收入: '))
insurance = float(input('五险一金: '))
diff = salary - insurance - 3500
if diff <= 0:
rate = 0
deduction = 0
elif diff < 1500:
rate = 0.03
deduction = 0
elif diff < 4500:
rate = 0.1
deduction = 105
elif diff < 9000:
rate = 0.2
deduction = 555
elif diff < 35000:
rate = 0.25
deduction = 1005
elif diff < 55000:
rate = 0.3
deduction = 2755
elif diff < 80000:
rate = 0.35
deduction = 5505
else:
rate = 0.45
deduction = 13505
tax = abs(diff * rate - deduction)
print('个人所得税: ¥%.2f元' % tax)
print('实际到手收入: ¥%.2f元' % (diff + 3500 - tax))
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













