Python中while循环常见用法与实战代码

 更新时间:2026年05月20日 10:13:24   作者:念恒12306  
while是Python中的条件循环语句,只要条件为True,就会持续执行循环体,与for不同,while循环更适合于不确定循环次数、需要根据条件退出的场景,这篇文章主要介绍了Python中while循环常见用法与实战代码的相关资料,需要的朋友可以参考下

1.while 循环的基本概念

1.1 语法格式

while 条件表达式:
    循环体代码块
else:
    循环正常结束(没有被 break 终止)时执行的代码块
  • 条件表达式:任何能计算出布尔值的表达式。只要结果为 True,循环体就会重复执行;一旦结果为 False,循环终止。

  • 循环体:缩进的代码块,至少要有一条语句(可以使用 pass 占位)。

  • else 子句(可选):仅当循环没有被 break 终止时执行。常用于“查找失败”或“正常完成”的场景。

1.2 最简单的示例

count = 0
while count < 5:
    print(count)
    count += 1

执行流程

  1. 初始化 count = 0

  2. 判断 count < 5 为 True,进入循环体。

  3. 打印 0,然后 count 变为 1

  4. 回到条件判断,1 < 5 仍为 True,重复。

  5. 当 count 变为 5 时,5 < 5 为 False,循环结束。

1.3 while 与 for 的对比

特性for 循环while 循环
适用场景遍历已知序列或固定次数条件控制,次数未知
循环变量自动从可迭代对象中获取需要手动初始化并更新
无限循环风险极少(除非可迭代对象无限大)容易忘记更新条件导致无限循环
典型用途遍历列表、字符串、range 等用户输入验证、游戏主循环、迭代收敛算法

2. 代码执行顺序详解

理解 while 的执行顺序是避免逻辑错误的基础

a = 1
while a < 3:
    print(f"开始循环,a = {a}")
    a += 1
    print(f"结束本次循环,a = {a}")
print("循环结束")

开始循环,a = 1
结束本次循环,a = 2
开始循环,a = 2
结束本次循环,a = 3
循环结束

详细步骤

  1. 检查条件 a < 3(此时 a=1True)→ 进入循环体。

  2. 执行 print,然后 a += 1 使 a 变为 2

  3. 再次回到条件检查,2 < 3 为 True,继续第二次循环。

  4. 第二次循环中 a 从 2 变为 3

  5. 条件检查 3 < 3 为 False,循环终止,执行循环外的 print

关键点:循环条件在每次循环开始前计算,而不是在循环体中间动态判断。

3. 无限循环及其控制

当条件永远为 True 时,循环永远不会终止,称为无限循环。有时我们需要无限循环(例如游戏引擎、服务器主循环),但通常我们会设置一个退出条件(如 break)。

3.1 无限循环的基本写法

while True:
    user_input = input("输入 'exit' 退出: ")
    if user_input == 'exit':
        break
    print(f"你输入了: {user_input}")

注意事项

  • 使用 while True 必须配合 break 退出,否则程序会永远运行。

  • 可以在循环体内的任何位置根据条件 break

3.2 避免无限循环的常见错误

# 错误:忘记更新循环变量
i = 0
while i < 10:
    print(i)   # 无限循环,因为 i 永远为 0

修正:确保循环条件中的变量在循环体内被修改。

4. break、continue 与 else

4.1break:提前终止整个循环

num = 0
while num < 10:
    if num == 5:
        break
    print(num)
    num += 1
# 输出 0,1,2,3,4

break 会立即退出循环,即使条件仍为 True

4.2continue:跳过本次循环剩余部分,进入下一次迭代

num = 0
while num < 5:
    num += 1
    if num == 3:
        continue
    print(num)
# 输出 1,2,4,5 (跳过了 3)

注意:在 while 循环中使用 continue 时,务必确保循环变量更新在 continue 之前,否则可能导致无限循环。

# 错误示范
i = 0
while i < 5:
    if i == 3:
        continue   # 跳过 i += 1,i 永远为 3,无限循环
    print(i)
    i += 1

4.3else子句:循环正常结束时执行

else 块仅在循环没有被 break 终止时运行。

# 查找列表中是否包含偶数
numbers = [1, 3, 5, 7]
i = 0
while i < len(numbers):
    if numbers[i] % 2 == 0:
        print(f"找到偶数 {numbers[i]}")
        break
    i += 1
else:
    print("没有找到偶数")

因为列表全是奇数,break 未触发,else 会执行。

5. 常见用法与实战模式

5.1 用户输入验证(直到输入合法)

while True:
    age_str = input("请输入年龄(1-120):")
    if age_str.isdigit():
        age = int(age_str)
        if 1 <= age <= 120:
            break
    print("输入无效,请重新输入")
print(f"您的年龄是 {age}")

5.2 模拟 do-while 循环

Python 没有内置的 do-while(先执行一次再判断条件)。可以用 while True + break 模拟:

while True:
    # 循环体至少执行一次
    response = input("继续吗?(y/n): ")
    if response == 'n':
        break

5.3 迭代收敛(数值计算,如牛顿迭代)

def sqrt_newton(n, tolerance=1e-6):
    guess = n / 2
    while abs(guess * guess - n) > tolerance:
        guess = (guess + n / guess) / 2
    return guess

print(sqrt_newton(2))   # 约 1.414213562

5.4 遍历自定义迭代器(手动模拟 for)

it = iter([1, 2, 3])
while True:
    try:
        x = next(it)
        print(x)
    except StopIteration:
        break

5.5 倒计时与延迟

import time
countdown = 5
while countdown > 0:
    print(countdown)
    time.sleep(1)
    countdown -= 1
print("发射!")

6. 高级扩展与性能优化

6.1 使用while与else实现查找算法

在数据流中查找满足条件的元素,若找到则处理,若未找到则执行备选操作。

def find_first(predicate, iterable):
    it = iter(iterable)
    while True:
        try:
            item = next(it)
        except StopIteration:
            break
        if predicate(item):
            return item
    else:          # 这里 while-else 中的 else 表示“从未 break”
        return None

print(find_first(lambda x: x > 10, [1,5,3]))   # None
print(find_first(lambda x: x > 10, [1,15,3]))  # 15

6.2while与生成器配合处理大文件

逐行读取大文件,避免一次性加载到内存:

with open('large_file.txt') as f:
    while True:
        line = f.readline()
        if not line:
            break
        process(line)

更 Pythonic 的方式是 for line in f:,但 while 方式能让你在读取过程中灵活控制(例如跳过、回溯等)。

6.3 性能注意事项

避免在循环内重复计算不变的值:将常量提到循环外。

# 不推荐
while i < len(data):
    do_something(i, len(data))
    i += 1

# 推荐
n = len(data)
while i < n:
    do_something(i, n)
    i += 1
  • 尽量使用局部变量:在循环内频繁访问全局变量或属性会比局部变量慢。

  • 对于大量数值计算,考虑使用 NumPy 向量化,避免 Python 级别的循环。

6.4while与递归

任何 while 循环都可以改写为递归,但递归受限于调用栈深度。一般情况下 while 更高效且无栈溢出风险。

# 递归版本(不推荐用于大数据量)
def countdown(n):
    if n <= 0:
        print("发射")
    else:
        print(n)
        countdown(n-1)

# while 版本
def countdown_while(n):
    while n > 0:
        print(n)
        n -= 1
    print("发射")

6.5while循环中的指针技巧(模拟 C 语言风格)

虽然 Python 不提倡,但有时需要手动控制索引:

# 删除列表中所有特定值(原地修改)
lst = [1, 2, 3, 2, 4, 2]
i = 0
while i < len(lst):
    if lst[i] == 2:
        lst.pop(i)
    else:
        i += 1
print(lst)   # [1, 3, 4]

注意:pop 会改变列表长度,索引管理需要小心。更简单的做法是列表推导式。

7. 常见陷阱与避坑指南

陷阱错误示例解决方案
无限循环while i < 10: 但未更新 i确保循环条件中的变量在循环体内改变
continue 跳过更新while i < 5: if cond: continue; i+=1将 i+=1 放在 continue 之前
忘记处理迭代器耗尽while True: x = next(it) 无 StopIteration 捕获使用 try-except 或改用 for
使用 = 而不是 == 作为条件while x = 5:(语法错误)使用 == 比较
在 while 内修改正在遍历的列表导致索引错乱遍历副本或使用其他结构
整数溢出(Python 中不存在)-Python 整数无限精度,但其他语言需注意

到此这篇关于Python中while循环常见用法与实战代码的文章就介绍到这了,更多相关Python中while循环内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python检测空间储存剩余大小和指定文件夹内存占用的实例

    python检测空间储存剩余大小和指定文件夹内存占用的实例

    今天小编就为大家分享一篇python检测空间储存剩余大小和指定文件夹内存占用的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python实现图像降噪

    python实现图像降噪

    这篇文章主要为大家详细介绍了python实现图像降噪,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • python数据预处理 :样本分布不均的解决(过采样和欠采样)

    python数据预处理 :样本分布不均的解决(过采样和欠采样)

    今天小编就为大家分享一篇python数据预处理 :样本分布不均的解决(过采样和欠采样),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python实现合并两个有序列表的示例代码

    python实现合并两个有序列表的示例代码

    这篇文章主要介绍了python实现合并两个有序列表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python网络爬虫之Web网页基础

    Python网络爬虫之Web网页基础

    我们在学习爬虫之前,要先了解网页的组成,只有我们了解其组成吗,才可以方能百战百胜,文章中有详细的代码示例,需要的朋友可以参考一下
    2023-04-04
  • PyQt6/PySide6 的 QPropertyAnimation 类适用场景分析

    PyQt6/PySide6 的 QPropertyAnimation 类适用场景分析

    QGraphicsView和QGraphicsScene是Qt图形视图框架的核心类,用于构建高性能、可交互的2D图形界面,QGraphicsView 和 QGraphicsScene 为复杂图形应用提供了强大支持,本文给大家介绍PyQt6/PySide6 的 QPropertyAnimation 类,感兴趣的朋友一起看看吧
    2025-03-03
  • Django时区详解

    Django时区详解

    这篇文章主要介绍了Django时区详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 精选20个好玩又实用的的Python实战项目(有图文代码)

    精选20个好玩又实用的的Python实战项目(有图文代码)

    文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库实现功能,适合学习和练习,项目包括猜字游戏、闹钟、二维码生成、语言检测、音乐播放器等,用户可直接pip安装所需库并动手实践
    2025-08-08
  • python神经网络MobileNet模型的复现详解

    python神经网络MobileNet模型的复现详解

    这篇文章主要为大家介绍了python神经网络MobileNet模型的复现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Django中使用MySQL5.5的教程

    Django中使用MySQL5.5的教程

    这篇文章主要介绍了Django中使用MySQL5.5的教程,本文图文实例详解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12

最新评论