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