1. 分支结构概述

在程序设计中,分支结构(选择结构)允许程序根据条件表达式的真假来决定执行哪段代码,从而使程序能够对不同情况作出不同的响应。

分支结构让程序具备了"判断力"——不再像顺序结构那样一路直走,而是可以根据条件选择"走哪条路"。Python 中构造分支结构最常用的是 ifelifelse 三个关键字。

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

  • False00.0None
  • 空字符串 ""、空列表 []、空字典 {}、空元组 ()

7. match-case 模式匹配

match-casePython 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-caseif-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')