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 支持字面量、变量绑定、解构、类型匹配,远超 switch3.10 以下版本用 if/elif/else 即可,match 不是必需的。
小结
控制流是程序的"骨架"。重点掌握:if/elif/else、三元表达式、for + range、enumerate(带索引)、zip(并行)、while、break/continue、循环 else、match-case。下一篇看函数——把代码封装起来复用。
← 上一篇 Python 字典
下一篇 Python 函数 →