一、什么是break和continue?
在循环(for 或 while)中,有时我们需要提前结束循环或跳过某次循环。Python 提供了两个关键字来实现这些功能:
- •
continue:跳过本次循环的剩余代码,直接进入下一次循环。
它们让循环控制更加灵活。
二、break 语句
2.1 作用
break 用于立即退出当前循环,不再执行循环体内剩下的代码,也不再进行下一次条件判断。程序会继续执行循环后面的代码。
2.2 在 for 循环中使用
for i inrange(1, 6):if i == 3:breakprint(i)print("循环结束")# 输出:# 1# 2# 循环结束
当 i 等于 3 时,break 被执行,循环终止,不再输出 4 和 5。
2.3 在 while 循环中使用
i = 1while i <= 5:if i == 3:breakprint(i) i += 1print("循环结束")# 输出:# 1# 2# 循环结束
2.4 break 与 else 子句
如果循环带有 else 子句,且循环被 break 终止,那么 else 块不会执行。else 只有在循环正常结束(没有被 break 打断)时才会执行。
for i inrange(1, 6):if i == 3:breakprint(i)else:print("循环正常结束") # 不会执行print("完成")# 输出:# 1# 2# 完成
三、continue 语句
3.1 作用
continue 用于跳过当前这次循环的剩余代码,直接进入下一次循环的条件判断(for 循环会取下一个元素,while 循环会重新判断条件)。
3.2 在 for 循环中使用
for i inrange(1, 6):if i == 3:continueprint(i)# 输出:1 2 4 5
当 i == 3 时,continue 执行,print(i) 被跳过,直接进入下一次循环。
3.3 在 while 循环中使用(⚠️ 注意循环变量的更新)
在 while 循环中使用 continue 要特别小心,因为如果 continue 出现在循环变量更新之前,可能导致无限循环。
i = 1while i <= 5:if i == 3: i += 1# 必须在这里也更新,否则会卡在3continueprint(i) i += 1# 输出:1 2 4 5
如果忘记在 continue 前更新循环变量,就会无限循环。一种更好的做法是将循环变量更新放在循环开头或使用 for 循环(自动处理迭代)。
3.4 continue 与 else
continue不会影响 else 的执行,只要循环没有因 break 退出,else 就会执行。
for i inrange(1, 6):if i == 3:continueprint(i)else:print("循环正常结束")# 输出:# 1 2 4 5# 循环正常结束
四、break 和 continue 在嵌套循环中
4.1 break 在嵌套循环中
break 只能退出它所在的最内层循环,不会影响外层循环。
for i inrange(3):for j inrange(3):if j == 1:breakprint(f"i={i}, j={j}")# 输出:# i=0, j=0# i=1, j=0# i=2, j=0
内层循环在 j==1 时退出,但外层循环继续执行。
4.2 continue 在嵌套循环中
continue 也只是跳过当前内层循环的本次迭代。
for i inrange(3):for j inrange(3):if j == 1:continueprint(f"i={i}, j={j}")# 输出:# i=0, j=0# i=0, j=2# i=1, j=0# i=1, j=2# i=2, j=0# i=2, j=2
4.3 如何退出多层循环?
如果需要从多层循环中完全跳出,可以使用以下几种方法:
- • 使用
for-else 配合 break(但只能退出一层)
示例:用标志变量退出两层循环
found = Falsefor i inrange(5):for j inrange(5):if i == 2and j == 2: found = Truebreakprint(i, j)if found:break
五、常见错误与注意事项
5.1 在 continue 前忘记更新 while 循环变量
如前所述,会导致无限循环。
5.2 break 和 continue 只能用在循环内部
在循环外使用会报语法错误。
5.3 混淆 break 和 continue 的作用
5.4 在嵌套循环中,break 只退出内层
如果想要退出外层,需要额外的逻辑。
5.5 在循环的 else 块中使用 break/continue
else 块中也可以使用 break 和 continue,但很少见。break 在 else 中会跳出循环,但循环已经结束了,所以没什么意义。
5.6 break 和 continue 在异常处理中
如果在 try 块中使用 break 或 continue,要注意 finally 块仍会执行。
六、实战案例
案例1:猜数字游戏(带重试限制)
import randomsecret = random.randint(1, 10)attempts = 3print("猜一个 1-10 的数字,你有 3 次机会")for i inrange(1, attempts + 1): guess = int(input(f"第{i}次猜:"))if guess == secret:print("恭喜,猜对了!")breakelif guess < secret:print("猜小了")else:print("猜大了")else:print(f"机会用完了,答案是{secret}")
这里用 break 在猜对时提前退出循环,否则循环正常结束后执行 else 提示失败。
案例2:查找列表中的第一个偶数
numbers = [3, 7, 9, 12, 15, 18]for num in numbers:if num % 2 == 0:print(f"找到第一个偶数:{num}")breakelse:print("列表中没有偶数")
找到第一个偶数后立即用 break 退出,避免不必要的遍历。
案例3:跳过特定元素
# 打印 1-10 中不是 3 的倍数的数字for i inrange(1, 11):if i % 3 == 0:continueprint(i)
案例4:用户输入验证(while 循环)
whileTrue: age = input("请输入你的年龄(输入 q 退出):")if age.lower() == 'q':breakifnot age.isdigit():print("请输入数字")continue age = int(age)if age < 0or age > 150:print("年龄必须在 0-150 之间")continueprint(f"你的年龄是:{age}")break# 输入有效后退出循环
这里用 continue 跳过无效输入,用 break 在有效输入或用户退出时结束循环。
案例5:打印菜单,处理用户选择
whileTrue:print("\n1. 存款")print("2. 取款")print("3. 查询")print("0. 退出") choice = input("请选择:")if choice == '0':print("再见")breakif choice notin ['1', '2', '3']:print("无效选择,请重新输入")continueif choice == '1':print("执行存款功能")elif choice == '2':print("执行取款功能")else:print("执行查询功能")
案例6:检查素数(break 的使用)
num = int(input("请输入一个整数:"))if num < 2:print("不是素数")else:for i inrange(2, num):if num % i == 0:print(f"{num} 不是素数")breakelse:print(f"{num} 是素数")
这里用 for-else 判断是否找到了因子:如果循环被 break(找到因子),则执行 if 内的输出;如果循环正常结束(没有因子),则执行 else 输出“是素数”。
七、总结
- •
continue:跳过本次循环的剩余代码,直接进入下一次循环。 - • 在
while 循环中使用 continue 时,务必确保循环变量更新在 continue 之前或之后合理处理,避免无限循环。 - • 循环的
else 子句只在循环没有被 break 终止时执行。 - • 在嵌套循环中,
break 和 continue 只作用于当前最内层循环。 - • 合理使用
break 和 continue 可以使代码更简洁、高效。
记住口诀: