Appearance
12|循环语句
循环让程序重复执行一段代码。Python 提供两种循环:for 用于遍历序列,while 用于条件循环。配合 break、continue 和 else,可以精确控制循环行为。
一、for 循环
for 遍历序列中的每个元素:
python
names = ["Alice", "Bob", "Charlie"]
for name in names:
print(f"你好, {name}")遍历字符串:
python
for char in "hello":
print(char)遍历字典:
python
scores = {"Alice": 85, "Bob": 92, "Charlie": 78}
for name in scores: # 遍历键
print(name)
for score in scores.values(): # 遍历值
print(score)
for name, score in scores.items(): # 遍历键值对
print(f"{name}: {score}")二、while 循环
while 在条件为真时持续循环:
python
count = 0
while count < 5:
print(count)
count += 1while 适合不知道循环次数的场景:
python
# 读取用户输入直到输入 quit
while True:
line = input("> ")
if line == "quit":
break
print(f"输入: {line}")while True 配合 break 是常见模式。循环体内部决定何时退出,比把退出条件写在 while 后面更灵活。
三、break 与 continue
break 立即终止整个循环:
python
for num in range(100):
if num > 10:
break
print(num)
# 输出 0 到 10,然后终止continue 跳过当前迭代,继续下一个:
python
for num in range(10):
if num % 2 == 0:
continue
print(num)
# 输出 1, 3, 5, 7, 9,跳过偶数break 和 continue 只影响最内层循环:
python
for i in range(3):
for j in range(3):
if j == 1:
break # 只跳出内层 j 循环,外层 i 循环继续
print(i, j)四、循环的 else 子句
循环后面可以带 else,它在循环正常结束(没有被 break)时执行:
python
for num in range(2, 10):
for i in range(2, num):
if num % i == 0:
break # 找到因数,不是质数
else:
print(num) # 没有被 break,是质数输出 2 到 9 中的质数:2, 3, 5, 7。
else 属于循环结构,不是 if。这个语法容易让人困惑——可以把 else 理解为"如果没有被 break"。
五、enumerate 与 zip
需要索引时,用 enumerate():
python
names = ["Alice", "Bob", "Charlie"]
for index, name in enumerate(names):
print(f"{index}: {name}")
# 0: Alice
# 1: Bob
# 2: Charlie
# 指定起始索引
for index, name in enumerate(names, start=1):
print(f"{index}: {name}")
# 1: Alice
# 2: Bob
# 3: Charlie同时遍历多个序列,用 zip():
python
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}")zip() 以最短的序列为准:
python
a = [1, 2, 3]
b = ["a", "b"]
list(zip(a, b)) # [(1, 'a'), (2, 'b')]需要处理不等长序列时,用 itertools.zip_longest():
python
from itertools import zip_longest
list(zip_longest(a, b, fillvalue="N/A"))
# [(1, 'a'), (2, 'b'), (3, 'N/A')]六、range 与循环
需要按数字计数时,range() 配合 for:
python
for i in range(5):
print(i) # 0, 1, 2, 3, 4
for i in range(1, 6):
print(i) # 1, 2, 3, 4, 5
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
for i in range(10, 0, -1):
print(i) # 10, 9, ..., 1记忆锚点:for 遍历序列,while 条件循环;break 终止整个循环,continue 跳过当前迭代;循环的 else 在没被 break 时执行;enumerate() 同时获取索引和元素;zip() 并行遍历多个序列,以最短的为准;range(5) 生成 0-4,range(1, 6) 生成 1-5。