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