返回博客

11. 循环:for、while 与 break/continue

11. 循环:for、while 与 break/continue

第十一篇:循环——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 循环结构的核心知识:

  1. for 循环 — 直接遍历可迭代对象,配合 enumerate()/zip()/items() 使用
  2. while 循环 — 基于条件判断的循环,注意避免无限循环
  3. break/continue/pass — 跳出、跳过、占位的三种控制语句
  4. range() — 三种形式,惰性计算节省内存
  5. 嵌套循环 — 多重循环处理及 itertools.product 简化
  6. 实用技巧 — FizzBuzz、素数筛选、列表扁平化

下一篇文章将深入讲解 dict 与 set:字典的键值对操作与集合的去重特性。


本文是 Python 教程系列的第十一篇。