Python 条件与循环

程序的核心就是两个动作:"判断"和"重复"。条件语句(if)让程序根据情况做不同的事,循环(for/while)让程序重复执行某段代码。这一章把 Python 的控制流讲全——外加几个 Python 特色的实用工具。

1. if / elif / else 条件判断

# 单分支
age = 18
if age >= 18:
    print("成年人")

# 双分支
if age >= 18:
    print("可以进网吧")
else:
    print("未成年,不能进")

# 多分支:if / elif / else
score = 78
if score >= 90:
    grade = "优秀"
elif score >= 80:
    grade = "良好"
elif score >= 60:
    grade = "及格"
else:
    grade = "不及格"
print(f"等级:{grade}")      # 等级:及格

# ⚠ Python 没有 switch-case(直到 3.10 引入 match)
# 多条件用 elif 串联

注意 Python 用 elif(不是 else if),这是 Python 简洁风格的体现。条件后面必须有冒号 :,且下一行必须缩进。

2. 条件里用 truthy / falsy

Python 的 if 不只接受布尔值,任何类型都能放进去——falsy 值(0、空字符串、空列表、None 等)算 False,其他算 True。这让代码更简洁。

# if 条件不仅接受 True/False,接受任意类型
# falsy 值都算 False,其他都算 True

name = ""
if name:                # 等价于 if name != "":
    print(f"你好,{name}")
else:
    print("名字为空")
# 输出: 名字为空

# 常见的"伪装成布尔"用法
users = []
if users:               # 列表非空 → True
    print("有用户")
else:
    print("无用户")      # 无用户

# 多条件组合:and / or / not
age = 25
has_id = True
if age >= 18 and has_id:
    print("允许进入")

3. 三元表达式

简单的 if-else 可以用三元表达式写成一行,常用于赋值和 f-string。

# 三元表达式(条件表达式):一行 if-else
age = 20
status = "成年" if age >= 18 else "未成年"
print(status)          # 成年

# 常用于赋值、函数参数、f-string
numbers = [1, 2, 3, 4]
for n in numbers:
    label = "偶数" if n % 2 == 0 else "奇数"
    print(f"{n} 是 {label}")
# 输出:
# 1 是 奇数
# 2 是 偶数
# 3 是 奇数
# 4 是 偶数

语法:值A if 条件 else 值B。读法:"如果条件为真取值 A,否则取值 B"。复杂逻辑别用三元,会让代码难读。

4. for 循环

Python 的 for 和 C/Java 完全不同——它不是"步进循环",而是遍历可迭代对象。这是 Python 优雅的核心。

# for 循环:遍历可迭代对象(列表/字符串/字典/range 等)

# 1. 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
# 输出: apple / banana / cherry

# 2. 遍历字符串
for ch in "hello":
    print(ch, end=" ")
print()    # h e l l o

# 3. 遍历字典
user = {"name": "小明", "age": 20}
for key, value in user.items():
    print(f"{key}: {value}")

# 4. range():生成数字序列
for i in range(5):        # 0 1 2 3 4
    print(i, end=" ")
print()

for i in range(2, 6):    # 2 3 4 5 (含起不含止)
    print(i, end=" ")
print()

for i in range(0, 10, 2):  # 0 2 4 6 8 (步长 2)
    print(i, end=" ")
print()

range() 三种用法:range(stop)range(start, stop)range(start, stop, step)。注意含起不含止(stop 不包含)。

5. enumerate:带索引遍历(必学)

需要"索引 + 元素"时,不要写 i = 0; for x in lst: ...; i += 1,用 enumerate 一行搞定。

# enumerate():同时拿到索引和元素(超常用!)
fruits = ["apple", "banana", "cherry"]

# 新手写法(不推荐)
i = 0
for fruit in fruits:
    print(i, fruit)
    i += 1

# Pythonic 写法(推荐)
for index, fruit in enumerate(fruits):
    print(index, fruit)
# 输出:
# 0 apple
# 1 banana
# 2 cherry

# enumerate 还能指定起始索引
for i, fruit in enumerate(fruits, start=1):
    print(f"第 {i} 个水果:{fruit}")

enumerate 是 Python 最常用的"高级遍历"工具,几乎所有需要索引的循环都该用它。

6. zip:并行遍历多个序列

# zip():并行遍历多个序列(长度不一时以短的为准)
names = ["小明", "小红", "小刚"]
ages = [20, 22, 21]
cities = ["北京", "上海", "广州"]

for name, age, city in zip(names, ages, cities):
    print(f"{name}, {age} 岁,来自{city}")
# 输出:
# 小明, 20 岁,来自北京
# 小红, 22 岁,来自上海
# 小刚, 21 岁,来自广州

# zip 配合 dict 一行造字典
user_dict = dict(zip(names, ages))
print(user_dict)    # {'小明': 20, '小红': 22, '小刚': 21}

7. while 循环

# while 循环:条件为真就继续执行
n = 5
while n > 0:
    print(n)
    n -= 1
print("发射!")
# 输出: 5 4 3 2 1 发射!

# 死循环 + break:用户输入 q 退出
while True:
    cmd = input("输入命令(q 退出):")
    if cmd == "q":
        print("再见!")
        break
    print(f"你输入了:{cmd}")

while 适合"不确定循环次数"的场景(如等待用户输入、轮询状态)。确定次数的循环优先用 for + range。

8. break 与 continue

# break:立刻跳出整个循环
for n in range(1, 10):
    if n == 5:
        break        # 到 5 就跳出,不再继续
    print(n, end=" ")
print()
# 输出: 1 2 3 4

# continue:跳过本次,进入下一次循环
for n in range(1, 6):
    if n % 2 == 0:
        continue     # 跳过偶数
    print(n, end=" ")
print()
# 输出: 1 3 5

# 嵌套循环里的 break 只跳出最内层
for i in range(3):
    for j in range(3):
        if j == 1:
            break
        print(f"i={i}, j={j}")

break:立刻跳出整个循环。continue:跳过本次,进入下一次。新手注意:别滥用 continue,很多时候反转 if 条件就能避免。

9. 循环的 else 子句(Python 特色)

这是 Python 一个少见但有用的特性:循环可以带 else,在"循环正常结束(没被 break)"时执行。常用于"查找"场景。

# Python 特色:循环可以带 else 子句
# else 里的代码在循环"正常结束"(没被 break)时执行
# 应用场景:循环里找东西,没找到就执行 else

# 例子:在列表里找 5
nums = [1, 3, 7, 9]
for n in nums:
    if n == 5:
        print("找到了 5!")
        break
else:
    print("没找到 5")      # 因为没 break,这里会执行
# 输出: 没找到 5

# while 也支持 else
count = 0
while count < 3:
    print(f"第 {count + 1} 次")
    count += 1
else:
    print("循环正常结束")

10. match-case 模式匹配(Python 3.10+)

Python 3.10 引入了 match-case,类似其他语言的 switch,但功能强大得多——支持解构、变量绑定、类型匹配。

# match-case:Python 3.10+ 的模式匹配(类似 switch,但更强大)

def handle_command(cmd):
    match cmd.split():
        case ["quit"]:
            return "退出"
        case ["hello", name]:
            return f"你好,{name}"
        case ["add", x, y]:
            return int(x) + int(y)
        case ["list", *items]:
            return f"列出 {len(items)} 个项目"
        case _:
            return "未知命令"

print(handle_command("quit"))         # 退出
print(handle_command("hello 小明"))    # 你好,小明
print(handle_command("add 3 5"))      # 8
print(handle_command("list a b c"))   # 列出 3 个项目
print(handle_command("xxx"))          # 未知命令

# _ 是通配符,匹配任何值,类似 switch 的 default
# match 支持字面量、变量绑定、解构、类型匹配,远超 switch

3.10 以下版本用 if/elif/else 即可,match 不是必需的。

小结

控制流是程序的"骨架"。重点掌握:if/elif/else三元表达式for + rangeenumerate(带索引)zip(并行)whilebreak/continue循环 elsematch-case。下一篇看函数——把代码封装起来复用。

← 上一篇 Python 字典

下一篇 Python 函数

✈️💬