Python 教程 05:控制流程-条件语句
“人生处处是选择。”
程序和人生一样,也需要做出选择。条件语句就是让程序具备"决策"能力的工具,就像十字路口的红绿灯,告诉你该往哪走。
1. if 语句:单向选择
最简单的条件语句,满足条件就执行,不满足就跳过。
age = 20
if age >= 18:
print("你已经成年了")
print("可以独立做决定")
语法要点:
if后面跟条件表达式,以冒号结尾- 条件代码块必须缩进(通常 4 个空格)
- 缩进的代码属于 if 块,一起执行或跳过
2. if-else:双向选择
两条路,必须选一条。
age = 15
if age >= 18:
print("成年人,可以投票")
else:
print("未成年,不能投票")
就像走到岔路口,往左或往右,总要选一个方向。
3. if-elif-else:多向选择
当选择超过两个时,使用elif(else if 的缩写)。
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"分数:{score},等级:{grade}")
执行顺序:
- 从上到下依次判断
- 遇到第一个为 True 的条件就执行,然后跳出整个 if-elif-else 结构
- 如果所有条件都是 False,执行 else 块(如果有的话)
这就像走迷宫,找到第一个出口就出去了,不会继续找其他出口。
4. 嵌套条件
条件语句里还可以包含条件语句。
age = 20
has_id = True
if age >= 18:
if has_id:
print("验证通过,可以进入")
else:
print("请出示身份证")
else:
print("未成年,不能进入")
注意缩进:每一层嵌套增加一层缩进。
但是,过度嵌套会让代码难以阅读。如果嵌套超过 3 层,就该考虑重构了。就像俄罗斯套娃,套太多层会让人晕。
5. 条件表达式的真假值
在 Python 中,不仅True和False可以作为条件,很多值都有"真假"之分。
为 False 的值(假值)
FalseNone- 数字
0、0.0 - 空字符串
"" - 空列表
[] - 空元组
() - 空字典
{} - 空集合
set()
为 True 的值(真值)
- 除了上述假值外的所有值
# 直接用值作为条件
name = "张三"
if name: # 非空字符串为True
print(f"你好,{name}")
numbers = []
if not numbers: # 空列表为False,not后变为True
print("列表为空")
count = 0
if count: # 0为False
print("有数据")
else:
print("没有数据")
这个特性让代码更简洁。在 Go 语言中,你必须写if len(name) > 0,而 Python 可以直接写if name。
6. 三元表达式(条件表达式)
当 if-else 很简单时,可以写成一行。
传统写法:
age = 20
if age >= 18:
status = "成年"
else:
status = "未成年"
三元表达式:
age = 20
status = "成年" if age >= 18 else "未成年"
语法:值1 if 条件 else 值2
- 如果条件为 True,返回值 1
- 如果条件为 False,返回值 2
# 更多示例
score = 85
result = "及格" if score >= 60 else "不及格"
x = 10
y = 20
max_value = x if x > y else y # 获取最大值
# 嵌套三元表达式(不推荐,难读)
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")
建议:简单的 if-else 用三元表达式,复杂的还是老老实实写完整形式,可读性更重要。
7. 逻辑组合
多个条件可以用and、or、not组合。
age = 25
has_license = True
# and:都为True
if age >= 18 and has_license:
print("可以开车")
# or:有一个为True
is_weekend = True
is_holiday = False
if is_weekend or is_holiday:
print("可以休息")
# not:取反
is_raining = False
if not is_raining:
print("可以出门")
# 复杂组合
score = 85
attendance = 0.9
if score >= 60 and (attendance >= 0.8 or score >= 90):
print("通过考试")
8. match-case 语句(Python 3.10+)
Python 3.10 引入了类似其他语言 switch 的 match-case 语句。
def get_weekday(day):
match day:
case 1:
return "星期一"
case 2:
return "星期二"
case 3:
return "星期三"
case 4:
return "星期四"
case 5:
return "星期五"
case 6 | 7: # 或模式
return "周末"
case _: # 默认情况
return "无效的日期"
print(get_weekday(1)) # 星期一
print(get_weekday(6)) # 周末
注意:match-case 功能更强大,支持模式匹配,但需要 Python 3.10 及以上版本。
9. 常见陷阱
陷阱 1:赋值 vs 比较
x = 10
# 错误:赋值,不是比较
if x = 10: # SyntaxError
print("x是10")
# 正确:比较
if x == 10:
print("x是10")
陷阱 2:浮点数比较
# 不要直接比较浮点数
x = 0.1 + 0.2
if x == 0.3: # False!
print("相等")
# 应该比较差值的绝对值
if abs(x - 0.3) < 0.0001:
print("近似相等")
陷阱 3:空列表的判断
my_list = []
# 不推荐
if len(my_list) == 0:
print("列表为空")
# 推荐(Pythonic)
if not my_list:
print("列表为空")
10. 小结
今天我们学习了 Python 的条件语句:
- if:单向选择
- if-else:双向选择
- if-elif-else:多向选择
- 嵌套条件:条件中再包含条件
- 真假值:很多值都有真假之分
- 三元表达式:简洁的条件赋值
- 逻辑组合:and、or、not
- match-case:模式匹配(Python 3.10+)
条件语句让程序有了"判断力",能够根据不同情况做出不同的响应,这是程序智能化的基础。
练习题:
- 写一个程序,输入一个年份,判断是否是闰年(闰年规则:能被 4 整除但不能被 100 整除,或者能被 400 整除)
- 写一个 BMI 计算器,根据身高和体重计算 BMI,并给出健康建议(偏瘦<18.5,正常 18.5-24,偏胖 24-28,肥胖>28)
- 用三元表达式实现:输入一个数,判断是奇数还是偶数
思考题:
为什么 Python 的条件语句不需要括号(如if (x > 10)),而 Java/C 必须要括号?
本文代码示例: