1. 分支结构概述
在程序设计中,分支结构(选择结构)允许程序根据条件表达式的真假来决定执行哪段代码,从而使程序能够对不同情况作出不同的响应。
分支结构让程序具备了"判断力"——不再像顺序结构那样一路直走,而是可以根据条件选择"走哪条路"。Python 中构造分支结构最常用的是 if、elif、else 三个关键字。
2. 单 if 语句
最简单的分支:如果条件为 True,则执行缩进代码块;条件为 False,直接跳过。
Python
if 条件:
执行语句块 # 条件为 True 时执行
之后的代码
3. if-else 语句
条件为 True 走一条路,条件为 False 走另一条路,两者必走其一。
Python
if 条件:
执行语句块1 # 条件为 True 执行
else:
执行语句块2 # 条件为 False 执行
BMI 计算器 v1.0 / v1.1
Python
# BMI = 体重(kg) / 身高(m)²
height = float(input('身高(cm):'))
weight = float(input('体重(kg):'))
bmi = weight / (height / 100) ** 2
print(f'{bmi = :.1f}')
if 18.5 <= bmi < 24:
print('你的身材很棒!')
else:
print('你的身材不够标准哟!')
4. if-elif-else 语句
处理多个互斥条件,程序从上到下依次检查,第一个匹配的条件执行后直接跳出,不再检查后续条件。
Python
if 条件1:
执行语句块1
elif 条件2:
执行语句块2
elif 条件3:
执行语句块3
else:
执行语句块4
BMI 计算器 v1.2(多级判断)
Python
height = float(input('身高(cm):'))
weight = float(input('体重(kg):'))
bmi = weight / (height / 100) ** 2
print(f'{bmi = :.1f}')
if bmi < 18.5:
print('你的体重过轻!')
elif bmi < 24:
print('你的身材很棒!')
elif bmi < 27:
print('你的体重过重!')
elif bmi < 30:
print('你已轻度肥胖!')
elif bmi < 35:
print('你已中度肥胖!')
else:
print('你已重度肥胖!')
5. 嵌套选择语句
在 if 或 else 的代码块内部,还可以再嵌套一层 if-else,用于处理更复杂的多条件判断。
Python
# 简易计算器(嵌套处理除零错误)
num1 = float(input("请输入第一个运算数: "))
operator = input("请输入运算符(+、-、*、/): ")
num2 = float(input("请输入第二个运算数: "))
if operator == '+':
print(num1 + num2)
elif operator == '-':
print(num1 - num2)
elif operator == '*':
print(num1 * num2)
elif operator == '/':
if num2 == 0: # 嵌套判断:先判断除数是否为0
print("除数不能为0")
else:
print(num1 / num2)
else:
print("不支持的运算符")
6. Python 缩进规则
Python 使用缩进(而非花括号)来表示代码块的层次结构。同一代码块的所有语句必须保持相同的缩进量。
- 推荐使用 4 个空格作为一级缩进
- 强烈建议不要使用 Tab 键缩进(容易与空格混用导致错误)
- 缩进错误(
IndentationError)是 Python 初学者最常见的错误
False 值(重要)
以下值在条件判断中视为 False:
False、0、0.0、None- 空字符串
""、空列表[]、空字典{}、空元组()
7. match-case 模式匹配
match-case 是 Python 3.10+ 新增的语法,用于固定值匹配、多选项分流,比大量 elif 更简洁易读。
Python
match 数据:
case 模式1:
执行代码
case 模式2:
执行代码
case _: # 通配符,相当于 else
默认处理
核心知识点
| 语法 | 说明 |
|---|---|
match 变量: | 数据入口,所有数据从这里进入 |
case 值: | 逐个检查,匹配成功则执行 |
case A | B: | 组合匹配,A 或 B 都执行同一段代码 |
case 值 if 条件: | 条件守卫(Guard):先匹配值,再检查额外条件 |
case _: | 通配符,前面都不匹配时的默认兜底 |
安全计算器(match-case 实战)
Python
def safe_calculator(operator, a, b):
match operator:
case "+":
return f"{a} + {b} = {a + b}"
case "-":
return f"{a} - {b} = {a - b}"
case "*":
return f"{a} × {b} = {a * b}"
case "/" if b != 0: # 条件守卫:先匹配"/",再检查b≠0
return f"{a} ÷ {b} = {a / b}"
case "/": # b = 0 的情况
return "错误:除数不能为0"
case _:
return "不支持的运算符"
print(safe_calculator("+", 10, 5)) # 10 + 5 = 15
print(safe_calculator("/", 20, 0)) # 错误:除数不能为0
match-case vs if-elif 对比
| 对比项 | match-case | if-elif |
|---|---|---|
| 固定值匹配 | ✅ 非常适合 | 可以实现 |
| 多选项分流 | ✅ 非常简洁 | 容易写成长串 elif |
| 范围判断 | ❌ 不适合 | ✅ 非常适合 |
| 代码可读性 | 分支多时更整洁 | 分支多时较差 |
8. 经典分支结构案例
判定闰年
闰年规则:能被4整除但不能被100整除,或者能被400整除。注意运算符优先级:not > and > or。
Python
year = int(input("请输入年份:"))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print("闰年")
else:
print("平年")
计算三角形的周长和面积
先用三角形成立条件判断能否构成三角形,再用海伦公式计算面积:S = √(s(s-a)(s-b)(s-c)),其中 s = (a+b+c)/2。
Python
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
l = a + b + c
print(f'周长: {l}')
s = l / 2
area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
print(f'面积: {area:.2f}')
else:
print('不能构成三角形')
百分制成绩转等级
Python
score = int(input("请输入百分制成绩:"))
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 70:
print('C')
elif score >= 60:
print('D')
else:
print('E')