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利用PyPDF2库合并多个pdf文件

    Python利用PyPDF2库合并多个pdf文件

    PyPDF2库是一个用于处理PDF文件的Python库,它提供了一系列的工具来读取、编辑、合并、拆分和加密PDF文件,使得我们可以在Python环境下轻松地对PDF文件进行操作,本文将带大家介绍如何通过Python的PyPDF2库合并多个pdf文件,需要的朋友可以参考下
    2023-05-05
  • Python基础中所出现的异常报错总结

    Python基础中所出现的异常报错总结

    本篇文章介绍了Python基础中所出现的异常报错总结,这是Python日常所常见的错误,现在总结出来给大家。
    2016-11-11
  • Python实现全角半角转换的方法

    Python实现全角半角转换的方法

    这篇文章主要介绍了Python实现全角半角转换的方法,很实用的方法,需要的朋友可以参考下
    2014-08-08
  • python模拟登陆、POST/GET请求方式

    python模拟登陆、POST/GET请求方式

    这篇文章主要介绍了python模拟登陆、POST/GET请求方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python Request类源码实现方法及原理解析

    Python Request类源码实现方法及原理解析

    这篇文章主要介绍了Python Request类源码实现方法及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python VTK映射三维模型表面距离

    Python VTK映射三维模型表面距离

    这篇文章主要介绍了Python VTK映射三维模型表面距离,通过如何使用VTK读取图片计算两个三维模型(stl)的表面距离,并将其距离值映射到模型上展开主题,需要的朋友可以参考一下
    2022-04-04
  • Python 中星号(*)的用法小结

    Python 中星号(*)的用法小结

    星号​​*​​ 往往被称为乘法运算符,是所有程序中最为常用的运算符号之一,在Python 中,星号还有很多隐藏的强大功能, 本文将用最容易理解的例子来解释星号*的 五个使用场景,从初级用法到高阶用法,感兴趣的朋友可以参考下
    2023-08-08
  • Python GUI之tkinter窗口视窗教程大集合(推荐)

    Python GUI之tkinter窗口视窗教程大集合(推荐)

    这篇文章主要介绍了Python GUI之tkinter窗口视窗教程大集合,看这一篇教程足了,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Python 实现域名解析为ip的方法

    Python 实现域名解析为ip的方法

    今天小编就为大家分享一篇Python 实现域名解析为ip的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • Python必备基础之闭包和装饰器知识总结

    Python必备基础之闭包和装饰器知识总结

    都2021年了Python的闭包和装饰器难道你还不会?今天就带大家详细总结一下Python闭包和装饰器的相关知识,需要的朋友可以参考下
    2021-06-06

最新评论