Python 循环控制
前面我们已经学了 while 和 for。默认情况下,循环会按照条件一直执行,直到自然结束。
现在有三个任务需要改变循环的默认流程:
- 密码输入正确后,立即结束整个循环
- 遇到重复数据时,跳过本轮,继续下一轮
- 查找目标后,区分“找到”和“没有找到”两种结果
这时需要使用 break、continue 和循环 else:
break:结束当前循环continue:跳过本轮剩余代码,进入下一轮循环
它们只控制当前所在的这一层循环。
break:终止当前循环
先解决密码校验任务:密码正确后不再询问,密码错误时继续输入。
如果某个条件满足后,不需要再继续循环,就可以使用 break。
break 会直接结束整个循环。
案例:登录账号
需求:反复输入密码。密码正确后,结束循环;密码错误时,继续输入。
while True:
password = input("请输入密码:")
if password == "123456":
print("密码输入正确,结束循环")
break
print("密码输入错误,请重新输入")while True 本身不会自然结束。只有执行到 break,程序才会跳出循环。
continue:跳过当前迭代
再处理另一种情况:当前数据不应计入本轮,但后续数据仍然要继续处理。
如果只想跳过本轮后面的代码,但还要继续下一轮循环,就可以使用 continue。
continue 不会结束整个循环,只会跳过当前这一轮。
下面依次处理 1 到 5。遇到数字 3 时,跳过本轮的 print():
for number in range(1, 6):
if number == 3:
print("跳过数字 3")
continue
print(number)运行结果:
1
2
跳过数字 3
4
5当 number 等于 3 时,continue 后面的 print(number) 不会执行。循环会直接进入下一轮,让 number 得到 4。
continue 与循环条件
在 while 中使用 continue 时,要先确认循环条件能够继续变化,否则容易造成死循环。
下面是一个错误示例。它会一直停在 number == 3,不要直接运行:
number = 1
while number <= 5:
if number == 3:
continue
print(number)
number += 1当 number 等于 3 时,程序直接执行 continue,因此后面的 number += 1 没有机会执行。
可以把循环变量的更新放到判断之前:
number = 0
while number < 5:
number += 1
if number == 3:
continue
print(number)案例:限次录入同事姓名
前面分别处理了“结束循环”和“跳过本轮”。现在把两种控制方式放进同一个限次录入任务。
需求:在 5 次有效输入之内,正确输入 3 个不同的同事姓名。
- 每次有效输入计数一次
- 重复输入时跳过本轮,不计入次数
- 正确输入 3 个不同姓名后,挑战成功
- 用完 5 次仍未完成,挑战失败
已知同事姓名如下:
names = "正心,张三,李四,王五,赵六"处理步骤:
- 接收姓名,先判断是否重复
- 重复时使用
continue,直接进入下一轮 - 非重复输入计入有效次数
- 根据姓名是否正确,更新成功次数
- 达到成功条件或用完次数时,使用
break结束循环
参考答案
names = "正心,张三,李四,王五,赵六"
recorded_names = ","
count = 0
success_count = 0
while True:
name = input("请输入同事的名字:")
# 姓名前后加逗号,避免把姓名中的一部分误判为重复姓名
if f",{name}," in recorded_names:
print("姓名已经输入过,请重新输入")
continue
count += 1
recorded_names += f"{name},"
if f",{name}," in f",{names},":
success_count += 1
print(f"{name} 是你的同事")
else:
print(f"{name} 不是你的同事")
if success_count >= 3:
print("恭喜你,挑战成功")
break
if count >= 5:
print("次数已用尽,挑战失败")
break这里必须先判断重复,再执行 count += 1。如果顺序反过来,重复输入也会占用次数。
控制语句的作用范围
如果 break 或 continue 出现在嵌套循环中,它们究竟控制哪一层循环?
在嵌套循环中,break 和 continue 只控制它们所在的当前循环。
for row in range(1, 4):
for col in range(1, 4):
if col == 2:
break
print(row, col)这里的 break 位于内层循环,所以只会结束内层的 for col。外层的 for row 仍然会继续执行。
循环 else
最后处理循环查找任务:循环自然结束和被 break 中断时,结果应该如何区分?
else 不只可以和 if 配合,也可以跟在 while 或 for 后面。
它的执行规则是:
- 循环自然结束,会执行
else - 循环被
break提前结束,不会执行else
while 与 else
当 while 条件不成立,循环自然结束时,会执行 else:
number = 1
while number < 5:
print(number)
number += 1
else:
print("循环正常结束")for 与 else
下面查找数字 3。找到后执行 break,因此不会进入 else:
for number in range(1, 6):
if number == 3:
print("找到了数字 3")
break
else:
print("没有找到数字 3")循环 else 常用于“循环中查找目标”:循环结束后仍未被 break 打断,说明没有找到目标。
小结
本章沿着三个问题推进:
- 条件满足后如何立即停止?使用
break - 当前数据不需要处理时如何继续下一轮?使用
continue - 如何区分循环自然结束和提前中断?使用循环
else
使用 continue 时,还要检查循环变量能否正常更新,避免出现死循环。