Python for与while循环结构代码实例

Jasper
Jasper
发布时间:2026-10-29| 8人浏览过
原创

深入讲解Python中for循环与while循环的核心语法、执行流程与应用实例,结合完整代码与图示,帮助读者清晰理解循环控制及选型原则。

在编写Python程序时,重复执行某段计算或遍历数据集是最高频的基础操作。Python提供了两种核心循环结构:for循环与while循环。for循环主要用于遍历已知序列或可迭代对象,其迭代次数通常在开始前即可确定;而while循环属于条件驱动型循环,只要预设条件为真就会持续运行,常用于循环次数未知、依赖动态外部状态的场景。本文将详细拆解这两种循环的执行机制、代码实例、跳转控制语句以及选型原则。

一、for 循环的核心机制与典型代码实例

Python的for循环本质上是“迭代循环(for-each)”。它依靠Python内部的迭代器协议运作,每次循环自动从可迭代对象(如列表、字符串、元组、字典或生成器)中取出下一个元素,并将其赋给循环变量,直到对象中的元素全部遍历完毕后平稳退出。

Python for与while循环结构代码实例
图 1:Python for 循环的迭代协议与流转时序图

1. 遍历基础序列与字符串

最直接的用法是遍历一个已有的列表或字符串。每次迭代,变量会自动获取当前项,直到最后一项。

Python 示例:遍历列表与字符串
# 1. 遍历水果列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(f"当前水果是: {fruit}")

# 2. 遍历字符串中的每个字符
word = "Python"
for char in word:
    print(char, end="-")
# 示例输出:P-y-t-h-o-n-

2. 搭配 range() 产生可控数值序列

当需要执行固定次数的循环,或者需要依据步长生成连续整数时,使用内置函数 range() 是最规范的做法。range(start, stop, step) 生成一个左闭右开区间 [start, stop)。

Python 示例:range 函数的应用
# 打印 0 到 4(执行 5 次)
for i in range(5):
    print(f"计数索引: {i}")

# 指定起点、终点和步长:计算 1 到 10 之间的所有奇数之和
total_sum = 0
for num in range(1, 11, 2):
    total_sum += num
print(f"奇数和为: {total_sum}")
# 示例输出:奇数和为: 25

3. 同时获取索引与元素:enumerate() 函数

如果在遍历元素的同时还需要获取元素在列表中的序号,不要使用 range(len(items)) 配合下标索引,推荐使用 Pythonic 的 enumerate() 函数。

Python 示例:enumerate 获取下标
tasks = ["需求分析", "编写代码", "单元测试", "系统上线"]
for index, task in enumerate(tasks, start=1):
    print(f"步骤 {index}: {task}")

# 示例输出:
# 步骤 1: 需求分析
# 步骤 2: 编写代码
# 步骤 3: 单元测试
# 步骤 4: 系统上线

二、while 循环的条件驱动机制与代码实例

与 for 循环不同,while 循环并不绑定特定的数据容器,而是完全由一个布尔条件控制。只要给定的表达式计算结果为 True,缩进内的循环体就会不断重复执行;一旦条件变为 False,循环立即停止。

Python for与while循环结构代码实例
图 2:Python while 循环的条件判断与步进机制

1. 基于计数器的典型 while 循环

当使用 while 进行常规计数时,必须显式定义初始值,并在循环体内部主动递增计数器。缺少步进语句是导致 CPU 100% 占满的典型原因。

Python 示例:累加计数器
count = 1
total = 0

while count <= 5:
    total += count
    print(f"当前 count={count}, 累计 total={total}")
    count += 1  # 关键步进语句,若遗漏此行将陷入无限死循环

print(f"1到5最终累加和为: {total}")
# 示例输出:1到5最终累加和为: 15

2. 动态轮询与事件监控场景

while 最适用的场景是:程序无法在开始前知道需要执行多少次,必须等待外部事件满足要求。例如模拟轮询服务端状态:

Python 示例:模拟状态轮询
import random

service_ready = False
retry_count = 0
max_retries = 5

while not service_ready and retry_count < max_retries:
    retry_count += 1
    # 模拟外部状态监测(20%概率返回就绪)
    status_code = random.randint(1, 5)
    if status_code == 5:
        service_ready = True
        print(f"第 {retry_count} 次尝试:服务已就绪!")
    else:
        print(f"第 {retry_count} 次尝试:服务未就绪,继续等待...")

if not service_ready:
    print("达到最大重试次数,连接超时。")
注意事项:使用 while 循环处理浮点数递增时,由于二进制浮点数的精度误差(如 0.1 + 0.2 != 0.3),尽量避免使用精确相等 while current == 1.0: 作为终止条件,应采用不等式 while current < 1.0: 或 math.isclose() 判断。

三、循环跳转控制:break、continue 与 else 结构

无论在 for 还是 while 循环中,Python 都支持利用 break、continue 以及独特的 else 子句对执行路线进行精细控制。

Python for与while循环结构代码实例
图 3:循环中断(break)与单次跳过(continue)的执行路径差异

1. break 语句:提前终止全过程

当满足某个临界条件(如找到目标结果、发生不可恢复错误)时,break 会立即强制退出当前所在的最内层循环。

Python 示例:查找指定元素并立即退出
scores = [68, 72, 85, 96, 45, 91]
target_score = 96

for index, score in enumerate(scores):
    if score == target_score:
        print(f"在索引位置 {index} 找到了目标分数: {score}!")
        break  # 目标已找到,无需继续遍历后续元素

2. continue 语句:略过当前轮次余下语句

continue 用于跳过当前这一次迭代的剩余语句,程序控制权直接回到循环头部,开始执行下一轮测试或取下一个元素。

Python 示例:过滤非法数据
raw_data = ["12", "34", "invalid", "56", None, "78"]
valid_numbers = []

for item in raw_data:
    if item is None or not str(item).isdigit():
        print(f"发现异常数据 [{item}],已跳过。")
        continue  # 跳过后续 append 操作,直接进入下个元素
    valid_numbers.append(int(item))

print(f"清洗后的数值列表: {valid_numbers}")
# 示例输出:清洗后的数值列表: [12, 34, 56, 78]

3. for/while ... else 子句:循环正常结束后的回调

在 Python 中,循环可以搭配 else 块使用。这里的 else 仅在循环完整执行且未遭遇 break 时才会触发。如果循环因 break 提前跳出,else 块会被跳过。这一机制极适合用于实现“搜索-未找到时告警”逻辑。

Python 示例:素数判定与 else 块用法
target = 17

# 判断 target 是否为素数
for i in range(2, target):
    if target % i == 0:
        print(f"{target} 不是素数,它能被 {i} 整除。")
        break
else:
    # 仅当 range 全部跑完且从未触发 break 时执行
    print(f"{target} 是一个素数!")

四、for 与 while 的适用场景对比与选型指南

在日常开发中,许多任务既可以使用 for 完成,也可以使用 while 完成。然而,遵循规范的选型逻辑不仅能减少代码量,还能显著降低产生逻辑漏洞或死循环的概率。

Python for与while循环结构代码实例
图 4:for 循环与 while 循环选型决策树及应用场景对照

核心差异横向对比

对比维度 for 循环 while 循环
驱动方式 可迭代对象(集合、生成器、序列) 布尔条件表达式(True / False)
迭代次数 预先确定(等于元素总量或 range 区间) 动态未知(直到条件翻转或遭遇 break)
变量维护 由迭代协议自动管理赋值与推进 需在循环体内部显式更新,否则死循环
适用场景 批量数据处理、矩阵遍历、字符串处理 网络轮询、交互菜单、数学收敛、长连接
安全性 极高(天然不易发生死循环) 需谨慎检查终止条件与步进更新
代码规范建议:只要目标集合是已知的,即便需要下角标,也应优先选择 for item in iterable: 或 for i, item in enumerate(iterable):,避免在能用 for 的场景下手动维护 while i < len(iterable):,以获得更高的执行效率和更纯粹的 Python 风格。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。