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}")

执行顺序

  1. 从上到下依次判断
  2. 遇到第一个为 True 的条件就执行,然后跳出整个 if-elif-else 结构
  3. 如果所有条件都是 False,执行 else 块(如果有的话)

这就像走迷宫,找到第一个出口就出去了,不会继续找其他出口。

4. 嵌套条件

条件语句里还可以包含条件语句。

age = 20
has_id = True

if age >= 18:
    if has_id:
        print("验证通过,可以进入")
    else:
        print("请出示身份证")
else:
    print("未成年,不能进入")

注意缩进:每一层嵌套增加一层缩进。

但是,过度嵌套会让代码难以阅读。如果嵌套超过 3 层,就该考虑重构了。就像俄罗斯套娃,套太多层会让人晕。

5. 条件表达式的真假值

在 Python 中,不仅TrueFalse可以作为条件,很多值都有"真假"之分。

为 False 的值(假值)

  • False
  • None
  • 数字00.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. 逻辑组合

多个条件可以用andornot组合。

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+)

条件语句让程序有了"判断力",能够根据不同情况做出不同的响应,这是程序智能化的基础。


练习题

  1. 写一个程序,输入一个年份,判断是否是闰年(闰年规则:能被 4 整除但不能被 100 整除,或者能被 400 整除)
  2. 写一个 BMI 计算器,根据身高和体重计算 BMI,并给出健康建议(偏瘦<18.5,正常 18.5-24,偏胖 24-28,肥胖>28)
  3. 用三元表达式实现:输入一个数,判断是奇数还是偶数

思考题

为什么 Python 的条件语句不需要括号(如if (x > 10)),而 Java/C 必须要括号?


本文代码示例


相关阅读