13.Python中while循环完全指南

Python 中 while 循环完全指南

本文档面向零基础新手,详细讲解 while 循环 是什么、breakcontinue 的用法、如何在循环中处理列表和字典,以及用活动标志控制循环,并配有大量示例。


第一部分: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
循环结束

执行过程简述:

  1. 一开始 count 是 1,count <= 5 为 True,进入循环,打印 1,然后 count 变成 2。
  2. 再次判断 count <= 5,仍为 True,打印 2,count 变成 3。
  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 00 1,然后内层因 break 结束,外层 i 变为 1,再输出 1 01 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 里取走一个,再 appendconfirmed。如果业务上需要“输入 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) 一般是一个布尔变量(如 activerunning),用来表示“程序/循环是否还在活动状态”:

  • 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

发表评论