目录

Python 条件语句

学习目标

  • 掌握 ifelifelse 的基本用法
  • 理解三元表达式(条件表达式)
  • 学会使用 Python 3.10+ 的 match-case 结构
  • 能够编写多分支逻辑程序

一、if 语句基础

age = 18

if age >= 18:
    print("你已成年")

注意:Python 使用缩进(通常是 4 个空格)来表示代码块,而不是大括号。


二、if-else 语句

age = 16

if age >= 18:
    print("你已成年")
else:
    print("你未成年")

三、if-elif-else 语句

score = 85

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"成绩等级: {grade}")   # 成绩等级: B

四、条件判断的底层

# 条件表达式最终会被转换为布尔值
x = 10

if x:                    # 等价于 if bool(x),即 if True
    print("x 为真")

# 以下值被视为 False
if not 0:
    print("0 为假")
if not "":
    print("空字符串为假")
if not []:
    print("空列表为假")
if not None:
    print("None 为假")

五、嵌套 if 语句

is_member = True
purchase_amount = 500

if is_member:
    if purchase_amount >= 1000:
        discount = 0.8
    elif purchase_amount >= 500:
        discount = 0.85
    else:
        discount = 0.9
else:
    discount = 1.0

final_price = purchase_amount * discount
print(f"会员: {is_member}, 原价: {purchase_amount}, 实付: {final_price}")
# 会员: True, 原价: 500, 实付: 425.0

六、三元表达式(条件表达式)

# 语法: 值1 if 条件 else 值2
age = 20
status = "成年" if age >= 18 else "未成年"
print(status)   # 成年

# 嵌套三元表达式(可读性较差,不建议过多嵌套)
score = 75
result = "优秀" if score >= 90 else ("良好" if score >= 80 else ("及格" if score >= 60 else "不及格"))
print(result)   # 及格

与常规 if 的对比

# 常规写法
a = 10
b = 20
if a > b:
    max_val = a
else:
    max_val = b

# 三元表达式
max_val = a if a > b else b
print(max_val)   # 20

七、match-case 语句(Python 3.10+)

match-case 是 Python 3.10 引入的模式匹配语法,类似于其他语言中的 switch-case,但功能更强大。

基本用法

day = 3

match day:
    case 1:
        print("星期一")
    case 2:
        print("星期二")
    case 3:
        print("星期三")
    case 4:
        print("星期四")
    case 5:
        print("星期五")
    case 6 | 7:          # 或匹配
        print("周末")
    case _:              # 默认情况
        print("无效日期")
# 输出: 星期三

匹配数据结构

# 匹配元组
point = (0, 5)

match point:
    case (0, 0):
        print("原点")
    case (x, 0):
        print(f"x 轴上的点,x={x}")
    case (0, y):
        print(f"y 轴上的点,y={y}")
    case (x, y):
        print(f"点 ({x}, {y})")
# 输出: y 轴上的点,y=5

匹配字典

user = {"name": "Alice", "age": 25}

match user:
    case {"name": str(name), "age": int(age)}:
        print(f"用户: {name}, 年龄: {age}")
    case {"name": str(name)}:
        print(f"用户: {name}, 年龄未知")
    case _:
        print("未知格式")
# 输出: 用户: Alice, 年龄: 25

八、逻辑组合条件

age = 25
income = 8000

# and:多个条件同时满足
if age >= 18 and income >= 5000:
    print("符合申请条件")

# or:任一条件满足
weekend = True
holiday = False
if weekend or holiday:
    print("今天休息")

# not:取反
is_raining = False
if not is_raining:
    print("可以出门")

# 组合使用
if (age >= 18 and age <= 60) and (income >= 3000 or has_guarantor):
    print("贷款审批通过")

九、综合示例

"""
BMI 计算器 + 健康建议
"""

print("=" * 35)
print("         BMI 计 算 器")
print("=" * 35)

height = float(input("请输入身高(m): "))
weight = float(input("请输入体重(kg): "))

bmi = weight / (height ** 2)
print(f"\n您的 BMI 值为: {bmi:.2f}")

if bmi < 18.5:
    category = "体重过轻"
    advice = "建议增加营养摄入,适当运动增肌"
elif 18.5 <= bmi < 24:
    category = "体重正常"
    advice = "保持良好生活习惯,定期体检"
elif 24 <= bmi < 28:
    category = "超重"
    advice = "控制饮食,增加有氧运动"
else:
    category = "肥胖"
    advice = "建议咨询医生,制定减重计划"

print(f"体型分类: {category}")
print(f"健康建议: {advice}")

# 使用 match-case(Python 3.10+)
match category:
    case "体重过轻" | "体重正常":
        print("✓ 健康状况良好")
    case "超重" | "肥胖":
        print("⚠ 需要关注体重管理")

十、常见陷阱

# 陷阱 1:赋值而非比较
x = 10
# if x = 10:    # 语法错误!
if x == 10:
    print("正确")

# 陷阱 2:浮点数比较
a = 0.1 + 0.2
if a == 0.3:           # 可能为 False
    print("相等")
if abs(a - 0.3) < 1e-9:   # 正确做法
    print("近似相等")

# 陷阱 3:判断空值
value = None
if value == None:      # 可行但不推荐
    print("值为 None")
if value is None:      # 推荐做法
    print("值为 None")

# 陷阱 4:链式判断的误解
if 5 < x < 10:         # Python 支持,正确
    pass
# 不要写成 if 5 < x and x < 10(虽然等价,但不够简洁)

小结

  • if-elif-else 处理多分支逻辑
  • 三元表达式 a if 条件 else b 用于简单条件赋值
  • match-case(Python 3.10+)提供强大的模式匹配能力
  • 条件判断最终会转换为布尔值,0""[]None 等为假
  • 浮点数比较使用 abs(a - b) < epsilon
  • 判断 None 使用 is 而不是 ==

练习

  1. 输入一个年份,判断是否为闰年(条件:能被 4 整除且不能被 100 整除,或能被 400 整除)。
  2. 输入三个整数,按从大到小排序输出。
  3. 使用 match-case 编写一个简单的命令行菜单程序。
  4. 输入一个字符,判断它是大写字母、小写字母、数字还是其他字符。