Python 中 while 循环完全指南
本文档面向零基础新手,详细讲解 while 循环 是什么、break 与 continue 的用法、如何在循环中处理列表和字典,以及用活动标志控制循环,并配有大量示例。
第一部分:while 循环是什么?
一、while 循环的概念
while 是 Python 里的一种循环语句:只要条件为真(True),就会反复执行下面缩进的代码块;条件变成假(False)时,循环结束,程序继续执行循环后面的代码。
可以理解为:
- “当……的时候,就一直做……”
- 例如:当用户没输入“退出”时,就一直让用户输入;当列表里还有待处理项时,就一直处理。
基本语法:
while 条件:
要重复执行的代码(缩进)
注意:
- 条件后面必须加冒号
: - 循环体必须缩进(一般 4 个空格),和 if 一样
二、最简单的 while 示例
例 1:从 1 数到 5
count = 1
while count <= 5:
print("当前数字:", count)
count = count + 1 # 重要:要让 count 变化,否则条件永远为真,变成死循环!
print("循环结束")
输出:
当前数字: 1
当前数字: 2
当前数字: 3
当前数字: 4
当前数字: 5
循环结束
执行过程简述:
- 一开始
count是 1,count <= 5为 True,进入循环,打印 1,然后count变成 2。 - 再次判断
count <= 5,仍为 True,打印 2,count变成 3。 - 如此反复,直到
count变成 6 时,count <= 5为 False,跳出循环,执行后面的print("循环结束")。
新手最容易犯的错:忘记在循环里改变条件相关的变量,导致条件永远为 True,循环停不下来(死循环)。例如:
# 错误示例:count 从不增加,条件永远为 True
count = 1
while count <= 5:
print(count)
# 忘记写 count = count + 1 → 死循环!
三、条件为 True / False 时会发生什么
| 情况 | 行为 |
|---|---|
| 条件为 True | 执行循环体,执行完再判断条件,若仍为 True 继续循环 |
| 条件为 False | 不进入循环体(或跳出循环),执行循环后面的代码 |
一次都不执行的情况: 如果第一次判断时条件就是 False,循环体一次都不会执行。
n = 10
while n < 5: # 10 < 5 为 False,直接跳过循环
print(n)
n = n + 1
print("over") # 只打印 over
四、用 while 做“用户输入直到满足条件”
例:不断让用户输入,直到输入的数字在 1~10 之间
num = 0 # 先给一个让条件为 True 的值,才能进入循环
while num < 1 or num > 10:
num = int(input("请输入 1~10 之间的整数:"))
print("你输入了:", num)
这里“条件”是:数字不在 1~10 之间。只要不在范围内,就继续要求输入;一旦在范围内,条件为 False,循环结束。
第二部分:break —— 立即退出循环
五、break 的作用
break 是循环里的跳出语句:一旦执行到 break,立刻结束当前这一层循环,不再判断条件,直接执行循环后面的代码。
语法: 在循环体内写一行 break 即可(一般写在 if 里,满足某个条件时退出)。
六、break 示例:输入 quit 退出
例:不断读入用户输入,若用户输入 quit 则退出,否则回显输入内容。
while True: # 条件永远为 True,所以只能靠 break 退出
line = input("请输入内容(输入 quit 退出):")
if line == "quit":
break
print("你输入了:", line)
print("程序结束")
执行过程:
- 用户输入
hello→ 不满足line == "quit",不执行 break,打印“你输入了: hello”,继续下一轮。 - 用户输入
quit→ 满足条件,执行break,循环立即结束,接着执行print("程序结束")。
要点: while True 表示“条件一直为真”,循环不会自己停,必须依赖 break(或 return 等)才能退出。这种写法在“先做一次,再根据结果决定是否继续”的场景里很常见。
七、break 只结束“当前这一层”循环
如果有多层循环(while 里再套 while),break 只跳出离它最近的那一层,不会一次跳出所有层。
i = 0
while i < 2:
j = 0
while j < 3:
print(i, j)
if j == 1:
break # 只跳出内层 while,外层继续
j = j + 1
i = i + 1
输出:0 0、0 1,然后内层因 break 结束,外层 i 变为 1,再输出 1 0、1 1。
第三部分:循环中使用 continue
八、continue 的作用
continue 的含义是:跳过本轮循环剩余代码,直接进入下一轮。
- 不会像 break 那样退出整个循环;
- 只是“这一轮后面的代码不执行了”,然后重新判断条件,开始下一轮。
语法: 在循环体内写 continue(通常放在 if 里,满足某条件时跳过本轮)。
九、continue 示例:只处理正数
例:输入 5 个数,只打印其中大于 0 的数;小于等于 0 的跳过。
count = 0
while count < 5:
count = count + 1
num = int(input("请输入第 {} 个数:".format(count)))
if num <= 0:
continue # 跳过下面的 print,直接下一轮
print("正数:", num)
print("输入结束")
当用户输入 0 或负数时,执行 continue,后面的 print("正数:", num) 不会执行,直接进入下一轮输入。
十、break 和 continue 对比
| 语句 | 作用 |
|---|---|
| break | 立即结束整个当前循环,执行循环后面的代码 |
| continue | 只结束本轮,马上进入下一轮循环 |
# break:遇到 3 就彻底退出
n = 0
while n < 5:
n = n + 1
if n == 3:
break
print(n) # 只打印 1, 2
print("结束")
# continue:遇到 3 只跳过本次打印
n = 0
while n < 5:
n = n + 1
if n == 3:
continue
print(n) # 打印 1, 2, 4, 5
print("结束")
第四部分:使用 while 循环处理列表
十一、为什么用 while 处理列表?
- for 循环:适合“遍历已知列表的每一个元素”。
- while 循环:适合“在循环过程中不断修改列表(删除、移走元素),直到列表满足某种条件(例如为空、或没有待处理项)”。
下面几种典型用法都用 while 更自然。
十二、while 循环中逐个“移走”列表元素
例:把列表里的元素一个一个移走,直到列表为空。
可以用 pop() 每次从末尾取走一个(或从头部取走一个),用 while 列表不为空 作为条件:
fruits = ["苹果", "香蕉", "橙子"]
while fruits: # 当列表非空时,条件为 True
one = fruits.pop()
print("取出:", one)
print("列表已空:", fruits)
输出:
取出: 橙子
取出: 香蕉
取出: 苹果
列表已空: []
要点: 在 Python 中,空列表在条件判断中为 False,非空列表为 True。所以 while fruits: 等价于“列表里还有元素就继续循环”。
十三、while + 列表:把元素从一个列表移到另一个列表
例:把 unconfirmed 里的用户逐个“验证”,验证通过的移到 confirmed 列表。
unconfirmed = ["张三", "李四", "王五"]
confirmed = []
while unconfirmed:
user = unconfirmed.pop()
print("正在验证:", user)
confirmed.append(user)
print("已验证用户:", confirmed)
print("待验证:", unconfirmed)
这里用 pop() 从 unconfirmed 里取走一个,再 append 到 confirmed。如果业务上需要“输入 Y/N 才决定是否通过”,可以在 append 前加 if 判断。
十四、while 中删除列表中满足条件的元素(注意陷阱)
需求: 删除列表中所有等于 "待删除" 的元素。
错误写法: 在 for 循环里边遍历边删除,会导致跳过元素或越界,不推荐。
推荐写法: 用 while + in + remove,只要列表中还有该值就继续删:
pets = ["猫", "狗", "待删除", "兔子", "待删除", "鸟"]
while "待删除" in pets:
pets.remove("待删除")
print(pets) # ['猫', '狗', '兔子', '鸟']
要点: while "待删除" in pets 表示“只要列表里还有‘待删除’就继续循环”,每次 remove 只删第一个,删完再判断,直到没有为止。
第五部分:使用 while 循环处理字典
十五、while 与字典的典型用法
字典没有“顺序”概念(在较老版本里),一般不会用 while 去“按位置”遍历字典,但可以:
- 用 while + 条件 控制“何时停止”;
- 在循环里 增删键值对,或根据字典内容做判断。
十六、例:用 while 收集用户输入并存入字典
例:不断询问用户“键”和“值”,用户输入空键时结束,最后打印字典。
data = {}
while True:
key = input("请输入键(直接回车结束):")
if key == "":
break
value = input("请输入对应的值:")
data[key] = value
print("最终字典:", data)
这里用 break 在“键为空”时退出,用 data[key] = value 不断往字典里添加键值对。
十七、例:while 中根据字典内容决定是否继续
例:有一个待处理队列(用列表存任务名),每轮处理一个,并在字典里记录处理次数,直到队列为空。
queue = ["任务A", "任务B", "任务C"]
processed = {} # 记录每个任务被处理的次数(这里每任务只处理一次,仅作结构示例)
while queue:
task = queue.pop(0)
processed[task] = processed.get(task, 0) + 1
print("已处理:", task)
print("处理记录:", processed)
这里 while 的条件是列表是否为空,循环体里用到了字典的读写。你可以把 queue 换成别的结构,只要“结束条件”清晰即可。
第六部分:设置活动标志(活动标志控制循环)
十八、什么是“活动标志”
活动标志(active flag) 一般是一个布尔变量(如 active、running),用来表示“程序/循环是否还在活动状态”:
- True:继续循环(程序还在运行)
- False:结束循环(程序/这一阶段结束)
好处是:循环条件集中在一个变量上,逻辑清晰;在循环内部多处都可以把标志设为 False 来结束循环,而不必写很多 break。
十九、用活动标志控制 while:菜单示例
例:简易菜单,用户输入 4 时“退出”,此时把活动标志设为 False,循环结束。
active = True # 活动标志:True 表示继续运行
while active:
print("1. 查询 2. 存钱 3. 取钱 4. 退出")
choice = input("请选择(1-4):")
if choice == "1":
print("执行查询")
elif choice == "2":
print("执行存钱")
elif choice == "3":
print("执行取钱")
elif choice == "4":
active = False # 用户选择退出,把标志设为 False,下一轮条件不成立,循环结束
print("感谢使用,再见!")
else:
print("无效选项,请重新选择")
print("程序已退出")
要点: 只要把 active = False,下一次判断 while active 时条件为 False,循环自然结束,无需在每一个分支里写 break。
二十、活动标志 + 多个退出条件
例:满足以下任一条件就结束循环:用户输入 quit、或输入了 3 次无效选项。
active = True
invalid_count = 0
while active:
line = input("请输入(输入 quit 退出):")
if line == "quit":
active = False
print("已退出")
elif line == "":
invalid_count = invalid_count + 1
print("无效输入,当前无效次数:", invalid_count)
if invalid_count >= 3:
active = False
print("无效次数过多,自动退出")
else:
print("你输入了:", line)
invalid_count = 0 # 有效输入时重置计数
这里“退出”有两种原因,都通过把 active = False 统一处理,逻辑更清晰。
第七部分:综合示例与小结
二十一、综合示例:while + 列表 + break + 活动标志
需求: 不断让用户输入名字,加入列表;输入 quit 停止;输入 list 打印当前所有名字;最后打印名单。
names = []
active = True
while active:
s = input("请输入姓名(quit 退出,list 查看名单):")
if s == "quit":
active = False
elif s == "list":
print("当前名单:", names)
elif s.strip() == "":
print("不能输入空名字")
else:
names.append(s.strip())
print("已添加:", s.strip())
print("最终名单:", names)
这里同时用到了:活动标志、列表的 append、条件分支,可作为 while + 列表 + 标志的小综合练习。
二十二、while 相关小结表
| 主题 | 要点 |
|---|---|
| while 基本语法 | while 条件: + 缩进循环体;条件为 True 时重复执行,为 False 时结束 |
| 避免死循环 | 循环体内要有让“条件”最终变为 False 的语句(或 break) |
| break | 立即结束当前这一层循环,执行循环后面的代码 |
| continue | 跳过本轮剩余代码,直接进入下一轮循环 |
| 处理列表 | 用 while 列表: 或 while 元素 in 列表: 等,在循环中 pop/remove/append |
| 处理字典 | 多用 while True + break 或活动标志,在循环里增删键值对 |
| 活动标志 | 用布尔变量(如 active)表示是否继续;设为 False 即结束循环,逻辑集中、易读 |
二十三、与 for 的简单对比
| 场景 | 更合适 |
|---|---|
| 遍历已知列表/范围,不删改结构 | for |
| 根据条件“一直做直到……” | while |
| 用户反复输入直到某条件 | while |
| 列表边遍历边删除/移走元素 | while |
| 用“活动标志”统一控制是否继续 | while |