第十一篇:循环——for、while 与 break/continue 完全指南
前言
循环让程序能够重复执行代码块,是编程的核心控制结构之一。本文全面讲解 Python 的循环机制:for 循环遍历各类可迭代对象、while 循环的条件控制、break/continue 的跳出与跳过逻辑,以及 range() 函数的各种用法。
for 循环基础
遍历可迭代对象
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 遍历字符串(逐个字符)
for char in "Python":
print(char, end=" ")
# P y t h o n
# 遍历字典(默认遍历键)
user = {"name": "小明", "age": 25}
for key in user:
print(f"{key}: {user[key]}")
enumerate() —— 带索引遍历
names = ["Alice", "Bob", "Charlie"]
# 不指定起始索引
for index, name in enumerate(names):
print(f"{index + 1}. {name}")
# 1. Alice / 2. Bob / 3. Charlie
# 指定起始索引
for i, color in enumerate(["红", "绿", "蓝"], start=1):
print(f"颜色{i}: {color}")
zip() —— 并行遍历
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 28]
cities = ["北京", "上海", "广州"]
for name, age, city in zip(names, ages, cities):
print(f"{name}, {age}岁, 来自{city}")
# zip 处理长度不同的序列时以最短为准
short = [1, 2, 3]
longer = [10, 20, 30, 40, 50]
print(list(zip(short, longer))) # [(1, 10), (2, 20), (3, 30)]
遍历字典的各种方式
student = {"name": "小明", "age": 25, "score": 92}
# 只遍历键
for key in student: ...
# 只遍历值
for value in student.values(): ...
# 同时遍历键和值
for key, value in student.items():
print(f"{key}: {value}")
while 循环
基本语法
count = 0
while count < 5:
print(count) # 输出 0, 1, 2, 3, 4
count += 1
用户输入循环
while True:
choice = input("请输入选项(quit 退出):")
if choice.lower() == "quit":
break
elif choice == "1":
print("选项一已执行")
else:
print("无效选项,请重试")
避免无限循环
# ❌ 危险:永远不减,无限循环
# x = 0
# while x < 5:
# print(x) # x 始终是 0
# ✅ 正确:确保循环条件最终会变为 False
x = 0
while x < 5:
print(x)
x += 1
break、continue 与 pass
break —— 立即跳出循环
# 查找目标
target = 42
numbers = [10, 23, 7, 42, 99, 5]
for num in numbers:
if num == target:
print(f"找到目标:{target}")
break
# 安全获取有效输入
while True:
try:
age = int(input("年龄:"))
if 0 < age < 150:
break
else:
print("范围错误")
except ValueError:
print("请输入有效数字")
continue —— 跳过本次迭代
# 打印 1~10 中的偶数
for i in range(1, 11):
if i % 2 != 0:
continue
print(i, end=" ") # 2 4 6 8 10
pass —— 占位语句
def stub_function():
pass # TODO: 待实现
range() 函数详解
三种调用形式
| 形式 | 含义 | 示例 |
|---|---|---|
range(n) |
0 到 n-1 | range(5) → 0, 1, 2, 3, 4 |
range(start, stop) |
start 到 stop-1 | range(2, 6) → 2, 3, 4, 5 |
range(start, stop, step) |
含步长 | range(0, 10, 2) → 0, 2, 4, 6, 8 |
常见用法
# 生成 0 到 9 的整数
for i in range(10):
print(i, end=" ") # 0 1 2 3 4 5 6 7 8 9
# 递减计数
for i in range(5, 0, -1):
print(i, end=" ") # 5 4 3 2 1
# 反向遍历列表
fruits = ["a", "b", "c", "d"]
for i in range(len(fruits) - 1, -1, -1):
print(fruits[i]) # d, c, b, a
range vs list 比较
import sys
print(sys.getsizeof(range(1_000_000))) # 48 bytes
print(sys.getsizeof(list(range(1_000_000)))) # 8,000,048 bytes!
# range 支持成员检查(高效)
print(5000 in range(10000)) # True — O(1) 复杂度
嵌套循环
双重循环
# 九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print()
# 矩阵转置
matrix = [[1, 2, 3], [4, 5, 6]]
transposed = [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))]
break/continue 在嵌套循环中
# break 只会跳出最内层循环
for row in grid:
for cell in row:
if cell == target:
found = True
break
if found:
break
# 使用 itertools.product 代替嵌套循环
from itertools import product
colors = ["红", "绿", "蓝"]
sizes = ["S", "M", "L"]
for color, size in product(colors, sizes):
print(f"{color}-{size}")
实战示例
FizzBuzz(经典面试题)
for i in range(1, 21):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
素数判断
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
primes = [num for num in range(2, 101) if is_prime(num)]
print(primes) # [2, 3, 5, ..., 97]
扁平化二维列表
matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flat = [item for row in matrix for item in row]
print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
数字猜谜游戏
import random
secret = random.randint(1, 100)
attempts = 0
while attempts < 7:
guess = int(input(f"第 {attempts+1} 次尝试(1-100):"))
attempts += 1
if guess < secret:
print("太小了")
elif guess > secret:
print("太大了")
else:
print(f"恭喜!你在第 {attempts} 次猜对了!")
break
else:
print(f"游戏结束,正确答案是 {secret}")
总结
本文涵盖了 Python 循环结构的核心知识:
- for 循环 — 直接遍历可迭代对象,配合 enumerate()/zip()/items() 使用
- while 循环 — 基于条件判断的循环,注意避免无限循环
- break/continue/pass — 跳出、跳过、占位的三种控制语句
- range() — 三种形式,惰性计算节省内存
- 嵌套循环 — 多重循环处理及 itertools.product 简化
- 实用技巧 — FizzBuzz、素数筛选、列表扁平化
下一篇文章将深入讲解 dict 与 set:字典的键值对操作与集合的去重特性。
本文是 Python 教程系列的第十一篇。
