当前位置: 首页 > news >正文

Python快速入门专业版(二十四):while循环:条件循环与“死循环”避免(猜数字游戏案例)

在这里插入图片描述

目录

  • 一、while循环的核心逻辑与语法
    • 1. 基本语法结构
    • 2. 执行流程
    • 3. 基础示例:打印1到10的数字
  • 二、“死循环”的成因与避免方法
    • 1. 死循环的成因:条件永远为True
      • 错误示例:忘记更新计数器(死循环)
      • 极端示例:条件直接为True(无限循环)
    • 2. 如何避免死循环?
      • 方法1:在循环体内更新控制变量
      • 方法2:设置循环次数上限
      • 方法3:使用break强制退出(见后文)
  • 三、break与continue:循环的精细控制
    • 1. break:立即终止整个循环
      • 示例:找到目标数字后停止循环
    • 2. continue:跳过当前迭代,进入下一次循环
      • 示例:打印1到10,跳过数字5
    • 3. break与continue的区别总结
  • 四、综合案例:猜数字游戏
    • 1. 案例分析
    • 2. 代码实现
    • 3. 代码解析
    • 4. 运行示例
  • 五、while循环的常见应用场景
  • 六、while循环与for循环的对比
  • 七、总结与练习
    • 练习题目(从易到难)

在编程中,并非所有循环都能提前确定执行次数。例如:等待用户输入正确密码、持续监听键盘事件、反复猜数字直到猜对——这些场景需要“只要条件不满足就一直执行”的循环逻辑。Python的while循环正是为这种“基于条件的重复操作”设计的,它能根据条件动态控制循环的开始与结束。

本文将从while循环的基础语法讲起,通过实例解析其执行逻辑,重点讲解“死循环”的成因与避免方法,介绍breakcontinue对循环的精细控制,并通过“猜数字游戏”案例综合应用所学知识,帮助你掌握while循环的核心用法。

一、while循环的核心逻辑与语法

while循环的核心思想是**“只要条件成立,就重复执行代码块”**。它不依赖于序列或固定次数,而是通过条件表达式的真假来动态决定是否继续循环。这种特性使它特别适合处理“未知循环次数”的场景。

1. 基本语法结构

while 条件表达式:循环体(重复执行的代码块)
  • 条件表达式:每次循环开始前会被计算,结果为True(成立)则执行循环体,为False(不成立)则终止循环。
  • 循环体:需要重复执行的代码,必须缩进(通常为4个空格),表示属于while循环的一部分。
  • 冒号::标记条件表达式的结束,必须放在条件表达式之后。

2. 执行流程

  1. 计算条件表达式的值(TrueFalse)。
  2. 如果值为True,执行缩进的循环体;如果为False,跳出循环,执行后续代码。
  3. 循环体执行完毕后,回到步骤1,重新判断条件(注意:条件会被重新计算)。

3. 基础示例:打印1到10的数字

通过while循环打印1到10的整数,需要一个计数器变量控制循环次数:

# 初始化计数器
i = 1# 条件:只要i小于等于10,就继续循环
while i <= 10:print(i, end=' ')# 关键:更新计数器(否则会导致死循环)i += 1  # 等价于 i = i + 1

执行过程解析

  • 初始时i = 1,条件i <= 10True,打印1i变为2。
  • 再次判断条件2 <= 10True,打印2i变为3。
  • …(重复上述过程)
  • i = 10时,打印10i变为11。
  • 再次判断条件11 <= 10False,循环终止。

输出结果:

1 2 3 4 5 6 7 8 9 10 

二、“死循环”的成因与避免方法

while循环最容易出现的问题是**“死循环”**——循环永远不会终止,导致程序卡死或无限运行。理解死循环的成因并掌握避免方法,是使用while循环的关键。

1. 死循环的成因:条件永远为True

死循环的核心原因是条件表达式始终为True,且循环体内没有任何代码能修改条件。最常见的错误是“忘记更新控制条件的变量”。

错误示例:忘记更新计数器(死循环)

i = 1
while i <= 10:print(i, end=' ')# 错误:缺少i += 1,i始终为1,条件永远成立

这段代码会无限打印1 1 1 1 ...,因为i的值永远是1,条件i <= 10始终为True

极端示例:条件直接为True(无限循环)

# 条件永远为True,除非循环体内有break
while True:print("这是一个死循环")

这种写法本身就是死循环,但在实际开发中,有时会故意使用while True配合break实现“无限循环直到满足某个条件才退出”(见后文break的用法)。

2. 如何避免死循环?

避免死循环的核心原则是:确保循环体内有能让条件表达式最终变为False的代码。具体方法如下:

方法1:在循环体内更新控制变量

对于计数器控制的循环,务必在循环体内更新计数器(如i += 1),确保其最终能让条件不成立。

# 正确:更新计数器,避免死循环
i = 1
while i <= 10:print(i, end=' ')i += 1  # 每次循环让i增大,最终会超过10

方法2:设置循环次数上限

对于依赖外部条件(如用户输入)的循环,可以设置最大循环次数,防止因异常情况导致无限循环。

# 限制最大尝试次数为3次
max_attempts = 3
attempts = 0while attempts < max_attempts:print(f"第{attempts + 1}次尝试")attempts += 1

输出结果:

第1次尝试
第2次尝试
第3次尝试

方法3:使用break强制退出(见后文)

在复杂逻辑中,可以在循环体内用break语句,当满足特定条件时强制终止循环。

三、break与continue:循环的精细控制

在循环过程中,有时需要提前终止循环(如找到目标值后停止搜索)或跳过当前迭代(如过滤无效数据)。breakcontinue语句为这些需求提供了灵活的控制方式。

1. break:立即终止整个循环

break语句用于完全终止当前循环,跳出循环体,直接执行循环后的代码。

示例:找到目标数字后停止循环

# 在1-10中寻找数字5,找到后停止
i = 1
while i <= 10:print(f"检查数字:{i}")if i == 5:print("找到目标数字5,停止循环")break  # 立即终止循环i += 1

输出结果:

检查数字:1
检查数字:2
检查数字:3
检查数字:4
检查数字:5
找到目标数字5,停止循环

解析:当i等于5时,break语句被执行,循环立即终止,后续的i += 1和其他数字的检查都不会执行。

2. continue:跳过当前迭代,进入下一次循环

continue语句用于跳过当前循环中剩余的代码,直接回到循环开始处重新判断条件,进入下一次迭代。

示例:打印1到10,跳过数字5

i = 1
while i <= 10:if i == 5:i += 1  # 必须更新i,否则会卡在5导致死循环continue  # 跳过当前循环的剩余代码print(i, end=' ')i += 1

输出结果:

1 2 3 4 6 7 8 9 10 

解析:当i等于5时:

  • 执行i += 1i变为6)。
  • continue语句跳过print(i)和后续的i += 1
  • 回到循环开始,判断i <= 10(6 <= 10成立),进入下一次循环,打印6。

注意:使用continue时,必须确保在continue之前更新控制变量(如i += 1),否则可能导致死循环(例如上述代码若缺少i += 1i会始终为5,条件永远成立)。

3. break与continue的区别总结

语句作用执行后流程
break终止整个循环跳出循环,执行循环后的代码
continue跳过当前迭代回到循环开始,重新判断条件

四、综合案例:猜数字游戏

我们通过一个“猜数字游戏”综合应用while循环、条件判断、break语句和随机数生成,实现以下功能:

  • 系统随机生成1-100之间的整数作为目标数字。
  • 用户反复输入猜测的数字,直到猜对为止。
  • 每次猜测后,系统提示“猜大了”或“猜小了”。
  • 猜对时,显示猜测次数并结束游戏。

1. 案例分析

  • 循环控制:使用while True创建无限循环(因为不确定用户需要猜多少次),猜对后用break终止。
  • 随机数生成:用random模块的randint()函数生成1-100的随机数。
  • 条件判断:比较用户输入与目标数字,提示“大了”或“小了”。
  • 计数功能:用变量记录猜测次数,猜对后显示。

2. 代码实现

import random# 生成1-100的随机整数作为目标数字
target = random.randint(1, 100)
# 初始化猜测次数
guess_count = 0print("欢迎参加猜数字游戏!我已生成一个1-100的数字,请开始猜测。")# 无限循环,直到猜对为止(用break退出)
while True:# 获取用户输入并转换为整数try:guess = int(input("请输入你猜测的数字:"))guess_count += 1  # 每猜一次,次数加1except ValueError:# 处理非数字输入print("请输入有效的整数!")continue  # 跳过本次循环的后续代码,直接进入下一次猜测# 判断猜测结果if guess < target:print("猜小了!再试试更大的数字。")elif guess > target:print("猜大了!再试试更小的数字。")else:# 猜对了,退出循环print(f"恭喜你,猜对了!目标数字就是{target}。")print(f"你一共猜了{guess_count}次。")break  # 终止循环,游戏结束

3. 代码解析

  1. 随机数生成random.randint(1, 100)生成1到100之间的随机整数,赋值给target(目标数字)。
  2. 无限循环while True创建一个永远运行的循环,确保用户可以反复猜测直到猜对。
  3. 用户输入处理
    • input()获取用户输入,int()转换为整数。
    • try-except捕获非数字输入的错误(如用户输入字母),提示后用continue跳过后续代码,直接进入下一次猜测。
  4. 猜测次数计数:每次有效输入后,guess_count加1,记录总猜测次数。
  5. 条件判断
    • guess < target:提示“猜小了”。
    • guess > target:提示“猜大了”。
    • guess == target:提示猜对,显示猜测次数,用break终止循环。

4. 运行示例

欢迎参加猜数字游戏!我已生成一个1-100的数字,请开始猜测。
请输入你猜测的数字:50
猜小了!再试试更大的数字。
请输入你猜测的数字:75
猜大了!再试试更小的数字。
请输入你猜测的数字:60
猜小了!再试试更大的数字。
请输入你猜测的数字:70
猜大了!再试试更小的数字。
请输入你猜测的数字:65
恭喜你,猜对了!目标数字就是65。
你一共猜了5次。

五、while循环的常见应用场景

while循环适合处理“条件驱动”的重复操作,以下是典型应用场景:

  1. 用户输入验证:反复提示用户输入,直到输入符合要求。

    # 要求用户输入大于0的数字
    while True:num = input("请输入一个正数:")if num.isdigit() and int(num) > 0:print(f"你输入的正数是:{num}")breakelse:print("输入无效,请重新输入!")
    
  2. 事件监听:持续监听系统事件(如按键、网络请求),直到收到退出信号。

    # 简单的事件监听模拟
    print("监听中...(输入'quit'退出)")
    while True:event = input("请输入事件:")if event == 'quit':print("退出监听")breakprint(f"处理事件:{event}")
    
  3. 游戏主循环:游戏运行时的核心循环,处理渲染、输入、逻辑更新,直到游戏结束。

    # 游戏主循环模拟
    game_running = True
    score = 0while game_running:# 处理用户输入action = input("游戏中(输入'quit'结束):")if action == 'quit':game_running = False# 模拟游戏逻辑(如加分)score += 10print(f"当前分数:{score}")print(f"游戏结束,最终分数:{score}")
    

六、while循环与for循环的对比

while循环和for循环都能实现重复操作,但适用场景不同,选择合适的循环类型能让代码更清晰:

特性while循环for循环
核心逻辑基于条件判断,条件为True则执行基于遍历可迭代对象,取出所有元素后结束
循环次数通常未知(动态变化)通常已知(由序列长度或range()决定)
适用场景用户输入验证、事件监听、无限循环等遍历列表/字符串、固定次数循环、数据处理等
语法复杂度需手动控制条件变量(如计数器)语法简洁,无需手动控制(自动迭代)

选择原则

  • 已知循环次数或需要遍历序列 → 用for循环。
  • 未知循环次数或依赖动态条件 → 用while循环。

七、总结与练习

while循环是Python中处理条件驱动型重复操作的核心工具,本文主要知识点:

  • 基础语法while 条件表达式: 循环体,通过条件真假控制循环。
  • 执行流程:先判断条件,成立则执行循环体,重复此过程直到条件不成立。
  • 死循环:因条件永远为True导致,需通过更新控制变量或break避免。
  • 循环控制break终止整个循环,continue跳过当前迭代。
  • 实战案例:猜数字游戏综合应用while True、条件判断和break,实现动态交互逻辑。

练习题目(从易到难)

  1. while循环计算1到50的总和(模仿1到100求和,改为50)。
  2. 打印1到20中的所有奇数(用continue跳过偶数)。
  3. 实现一个简易计算器:用户反复输入两个数字和运算符(+、-、*、/),计算结果,输入q退出。
  4. 改进猜数字游戏:限制最大猜测次数为7次,超过则提示“失败”并显示答案。

通过这些练习,你将逐步掌握while循环的灵活应用,为处理复杂的动态逻辑打下基础。


文章转载自:

http://tazq0K9j.wchcx.cn
http://tqN75QXY.wchcx.cn
http://zNVYpMpP.wchcx.cn
http://IMktQ7gc.wchcx.cn
http://SBLJX9bg.wchcx.cn
http://Yq6K5h61.wchcx.cn
http://zoaSbDLJ.wchcx.cn
http://VNzN8Beu.wchcx.cn
http://mHFgNwcU.wchcx.cn
http://k82zlI8y.wchcx.cn
http://lIquhuKi.wchcx.cn
http://UY4oUn8e.wchcx.cn
http://P2Qq7Phz.wchcx.cn
http://twxMv2M7.wchcx.cn
http://u36sXPdF.wchcx.cn
http://D0xxhhCX.wchcx.cn
http://UoVgzfIe.wchcx.cn
http://IOMhzL2N.wchcx.cn
http://mqq3ghhi.wchcx.cn
http://2OnZF4VI.wchcx.cn
http://RwETefvk.wchcx.cn
http://MhMdDBer.wchcx.cn
http://h2hZRD9X.wchcx.cn
http://GKD51SiQ.wchcx.cn
http://hL8xgmNJ.wchcx.cn
http://FZSqNKwP.wchcx.cn
http://US330oLd.wchcx.cn
http://tc17ECMX.wchcx.cn
http://y2q9Itpb.wchcx.cn
http://S0LmKCDR.wchcx.cn
http://www.dtcms.com/a/380353.html

相关文章:

  • 神经网络构成框架-理论学习
  • 智能眼镜产品成熟度分析框架与评估
  • 从零学算法2327
  • 【C++】:list容器全面解析
  • 渲染农场多少钱一小时
  • IDEA试用过期,无法登录,重置方法
  • IP验证学习之case编写
  • 通过Dockerfile构建Docker镜像并训练模型
  • 操作系统内核架构深度解析:从微内核到宏内核的设计哲学与性能权衡
  • IIS运行账户设置记录
  • 服务管理 systemctl
  • HTTP与HTTPS
  • devextreme-vue表格设置可复制粘贴
  • Go 语言 PDF 生成库综合比较与实践指南
  • 图技术重塑金融未来:悦数图数据库如何驱动行业创新与风控变革
  • 金融数据---ETF日线行情数据
  • Vue 整体框架全面解析
  • 鸿蒙 NEXT应用国际化:时区与夏令时处理
  • 海外代理IP平台哪家好?高纯净度稳定住宅代理IP平台推荐
  • 锂电池行业生产中 AI 应用场景与价值分析
  • MySQL 命令行导入 SQL 文件
  • 3DMAX自动材质开关插件AutoMaterial安装和使用方法
  • Ubuntu C编程 (make工具和Makefile的引用)
  • 9.12AI简报丨腾讯投资AI游戏平台,B站开源AniSora V3
  • 家庭健康智能终端:解锁智能家居时代的健康管理
  • 机器视觉检测如何使用360 度全景成像镜头进行AI 瑕疵检测
  • # Windows驱动程序开发入门:从原理到实践
  • 在Webpack中集成Vite的开发服务器时,可能会遇到哪些兼容性问题?如何解决?
  • DCA1000 AWR1843 环境安装
  • 零公网IP 跨设备协同OctoPrint+cpolar3D打印远程管理新方法