Python 条件语句
目录
学习目标
- 掌握
if、elif、else的基本用法 - 理解三元表达式(条件表达式)
- 学会使用 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而不是==
练习
- 输入一个年份,判断是否为闰年(条件:能被 4 整除且不能被 100 整除,或能被 400 整除)。
- 输入三个整数,按从大到小排序输出。
- 使用
match-case编写一个简单的命令行菜单程序。 - 输入一个字符,判断它是大写字母、小写字母、数字还是其他字符。