Python基础:第 09 篇 · while 循环:重复直到不满足
文章目录
- 专栏导读
- 第 09 篇 · while 循环:重复直到不满足
- 本篇目标
- 一、基本语法
- 二、死循环与避免
- 但 `while True` 也是有用的写法
- 三、break 与 continue
- 四、循环的 else 子句(比较少见但有用)
- 五、实战:输入校验
- 带次数限制的密码验证
- 六、嵌套循环
- 嵌套循环中的 break
- 七、while vs for 怎么选
- 常见坑
- 本篇小结
- 练习题
- 总结
专栏导读
🔥🔥本文已收录于《30天学习Python从入门到精通》
🉑🉑本专栏专门
针对于零基础和需要重新复习巩固的同学所准备的一套基础班教学,从0基础到精通Python,轻松掌握Python,欢迎各位同学订阅,专栏订阅地址:点我直达🤞🤞此外如果您已工作,如需利用Python解决办公中常见的问题,欢
迎订阅《Python办公自动化》专栏,订阅地址:点我直达
第 09 篇 · while 循环:重复直到不满足
作者:小庄学Python | 系列:《Python基础大全》 · 30 篇从零到能写项目
本篇目标
- 掌握
while循环的基本用法 - 理解死循环是怎么产生的、怎么避免
- 学会
break/continue控制循环 - 掌握循环
else子句和输入校验套路
一、基本语法
count=0whilecount<5:print(f"第{count+1}次")count+=1print("循环结束")三要素:
- 初始化变量(
count = 0) - 循环条件(
count < 5) - 更新变量(
count += 1)
漏掉第 3 步就是死循环。
二、死循环与避免
# ❌ 死循环:count 永远不变count=0whilecount<5:print("卡住了")# ❌ 条件永远为真whileTrue:print("跑不完")程序卡死时按Ctrl + C强制中断。
但while True也是有用的写法
配合break使用,适合"循环次数不确定"的场景:
whileTrue:cmd=input("输入命令(q退出):")ifcmd=="q":breakprint(f"执行命令:{cmd}")三、break 与 continue
# break:直接跳出整个循环n=0whilen<10:ifn==5:break# 到 5 就停print(n)n+=1# 输出 0 1 2 3 4# continue:跳过本次,进入下一轮n=0whilen<10:n+=1ifn%2==0:continue# 偶数跳过print(n)# 输出 1 3 5 7 9⚠️ 用
continue时务必确认更新变量在 continue 之前,否则死循环。
# ❌ 死循环:n 永远不增加n=0whilen<10:ifn%2==0:continuen+=1四、循环的 else 子句(比较少见但有用)
while...else:else块在**循环正常结束(没被 break)**时执行。
# 判断是否为质数n=17i=2whilei<n:ifn%i==0:print(f"{n}不是质数,能被{i}整除")breaki+=1else:print(f"{n}是质数")# 没被 break 才会执行这是 Python 的特色语法,用来"找东西没找到"的场景很自然。
五、实战:输入校验
# 反复要求输入,直到合法whileTrue:age_str=input("请输入年龄(1-120):").strip()ifnotage_str.isdigit():print("请输入数字!")continueage=int(age_str)if1<=age<=120:breakprint("年龄范围不对!")print(f"你的年龄是{age}")带次数限制的密码验证
password="888888"max_attempts=3attempts=0whileattempts<max_attempts:pwd=input("请输入密码:")ifpwd==password:print("登录成功")breakattempts+=1print(f"密码错误,还剩{max_attempts-attempts}次机会")else:print("账号已锁定")六、嵌套循环
# 打印九九乘法表i=1whilei<=9:j=1whilej<=i:print(f"{j}×{i}={i*j}",end="\t")j+=1print()i+=1输出:
1×1=1 1×2=2 2×2=4 1×3=3 2×3=6 3×3=9 ...嵌套循环中的 break
break只跳出它所在的那层循环,外层继续:
foriinrange(3):forjinrange(3):ifj==1:break# 只跳出内层print(i,j)想一次跳出所有层,用标志变量:
found=Falseforiinrange(10):forjinrange(10):ifi*j==42:found=Truebreakiffound:break七、while vs for 怎么选
| 场景 | 选择 |
|---|---|
| 知道循环次数 | for |
| 遍历序列(列表、字符串等) | for |
| 次数不确定,靠条件结束 | while |
| 需要一直运行(服务器、菜单) | while True+break |
常见坑
| 坑 | 说明 |
|---|---|
| 忘记更新循环变量 | 死循环 |
continue前没更新变量 | 死循环 |
| 条件写反 | 一次都不执行 |
| 浮点数做循环变量 | 精度误差导致次数不对,用整数计数 |
# ❌ 别这么干x=0.0whilex!=1.0:x+=0.1# 可能永远到不了精确的 1.0本篇小结
- while 三要素:初始化、条件、更新
break终止整个循环,continue跳过本次while...else:正常结束才执行 else- 输入校验经典套路:
while True+break
练习题
- 用 while 计算 1 到 100 的和。
- 猜数字游戏:随机生成 1~100 的数,用户反复猜,提示"大了/小了",猜中后输出猜了几次。
- 用 while 实现:不断输入数字累加,输入 0 时结束,输出总和与平均值。
下一篇:for 循环与 range——遍历的正确姿势。
总结
希望对初学者有帮助
致力于办公自动化的小小程序员一枚
希望能得到大家的【一个免费关注】!感谢
求个 🤞 关注 🤞
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
求个 ❤️ 喜欢 ❤️
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
求个 👍 收藏 👍
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏