Python循环控制进阶
困难0Python 循环控制进阶:break、continue 和 else 的妙用
在写循环代码时,我们常常需要根据条件提前结束循环、跳过某一次循环,或者在循环顺利结束后执行一些特殊操作。Python 提供了三个非常实用的控制工具:break、continue 和 else。
break就像跑步比赛听到哨声——立刻停下,不再继续。continue就像跳过一个水坑——这一轮跳过,下一轮继续正常跑。else像一个“圆满结束”奖励——只有循环没有被中途打断时才会执行。
下面我们分别来认识它们。
一、break:提前跳出整个循环
break 用于立即终止当前所在的循环(for 或 while),程序会跳到循环后面的代码继续执行。
生活例子:你有一张零食清单,要从第一项开始找“巧克力”。只要找到了,后面就不用再看了,直接去吃巧克力。
代码示例:在列表中查找一个数字,找到就停止。
numbers = [3, 7, 2, 8, 5] # 数字列表
target = 8 # 要找的目标数字
for num in numbers: # 遍历列表
if num == target: # 如果当前数字等于目标
print("找到了!") # 打印提示
break # 立刻结束循环
运行结果:只输出“找到了!”然后循环结束,不会继续检查后面的 5。
另一个例子:猜数字游戏,猜中后跳出。
secret = 7 # 秘密数字
while True: # 一直循环
guess = int(input("猜一个1-10的数:")) # 用户猜数
if guess == secret: # 猜对了
print("恭喜你猜对了!")
break # 跳出循环
else:
print("再试一次")
二、continue:跳过本轮,继续下一轮
continue 不会终止整个循环,而是跳过当前这一轮循环中剩下的语句,直接进入下一次循环。
生活例子:体育课排队报数,遇到身高太矮的同学(比如低于1.2米),就跳过他不报数,继续报下一个同学。
代码示例:只输出 1 到 10 中的奇数,偶数跳过。
for i in range(1, 11): # i 从 1 到 10
if i % 2 == 0: # 如果是偶数
continue # 跳过本轮,不打印
print(i) # 只打印奇数
输出结果:1 3 5 7 9
注意:continue 之后 print(i) 不会执行,直接进入下一个 i。
另一个例子:统计班级中及格(>=60)的人数,不及格的跳过不统计。
scores = [85, 42, 76, 59, 90, 61] # 学生成绩列表
pass_count = 0 # 及格人数计数
for score in scores: # 遍历每个成绩
if score < 60: # 如果不及格
continue # 跳过,不统计
pass_count += 1 # 及格人数加1
print("及格人数:", pass_count) # 输出4
三、else:循环正常结束时的“奖励”
循环可以带一个可选的 else 子句,它的功能是:当循环没有被 break 中断而自然结束时,执行 else 块。如果循环中执行了 break,则 else 不会执行。
生活例子:你做完作业后,妈妈会奖励你吃冰淇淋。但如果作业没做完就被妈妈叫停了(相当于 break),冰淇淋就泡汤了。
代码示例:判断一个数是不是质数(只能被 1 和自身整除)。
num = int(input("请输入一个大于1的整数:")) # 输入一个数
for i in range(2, num): # 从2到num-1遍历
if num % i == 0: # 如果找到了一个因数
print(num, "不是质数") # 输出不是质数
break # 提前结束循环
else: # 循环正常结束(没有break)
print(num, "是质数") # 输出是质数
如果输入 7,循环检查 2,3,4,5,6 都无法整除 7,循环自然结束,执行 else 输出“是质数”。
如果输入 8,当 i=2 时发现整除,执行 break,else 被跳过。
注意:else 和 for 或 while 同级,不是和 if 同级。缩进要小心。
常见错误与注意事项
-
break只跳出最内层循环
如果有多层嵌套循环,break只跳出它所在的那一层。要想跳出外层需要额外标记或使用“退出标志”。# 错误例子:break 只跳出内层 for,外层 while 继续 while True: for x in range(5): if x == 3: break # 只跳出 for,while 仍在运行 print("外层还在运行") -
continue在 while 中可能导致死循环
如果在while循环中不小心把循环变量更新语句写在continue之后,可能会永远跳不过去。i = 0 while i < 10: if i % 2 == 0: continue # 跳过后面的 i += 1,i 永远为0! print(i) i += 1 # 这条语句被跳过了解决方法:把更新语句放在
continue之前,或者改用for循环。 -
else容易误解为“循环中的最终操作”
很多人以为else是“不管怎样都会执行”,其实它只在不触发break时执行。可以用break来测试理解。 -
不要忘记冒号和缩进
break、continue、else后的冒号很容易漏掉,导致语法错误。
完整可运行示例:找出两个列表中的共同数字
下面综合使用 break、continue 和 else 设计一个小游戏:有两个数字列表,程序在第一个列表中找第一个同时在第二个列表里出现的数字。
list_a = [2, 5, 8, 3, 7] # 第一个列表
list_b = [1, 3, 9, 4, 6] # 第二个列表
found = False # 是否找到共同数字
for num in list_a: # 遍历第一个列表
if num in list_b: # 如果这个数字也在第二个列表中
print("找到共同数字:", num)
found = True
break # 找到一个就停止
else:
continue # 不在则跳过(可省略,这里为了演示)
else: # 整个 for 循环正常结束(没有 break)
print("没有找到任何共同数字")
print("程序结束")
运行结果是“找到共同数字:3”并停止。如果把 list_b 改为 [1, 9, 4, 6],则输出“没有找到任何共同数字”才结束。
相关知识点指引
- for 循环:平时用得最多,配合
range()或列表使用。 - while 循环:条件循环,需要自己控制循环变量,容易出错。
- 嵌套循环:
break和continue只作用于最内层,需要小心。 - 循环中的异常处理:可以用
try...except捕获错误并配合break或continue控制流程。 - 推导式:有时可以用列表推导式替代循环加
continue,更简洁。
掌握了这三个控制工具,你就能像指挥交通一样灵活地控制代码的流程了。多写几段代码练习,很快就能得心应手!
例题精讲
以下代码的输出是什么? for i in range(5): if i == 3: break print(i, end=' ')
在Python的for-else结构中,如果循环因为break语句提前终止,那么else子句不会被执行。
以下代码用于输出1到10中所有的奇数,请填空完善程序。
for i in range(1, 11):
if i % 2 == 0:
___
print(i)以下代码的输出是什么? count = 0 while count < 5: count += 1 if count == 3: break else: print("else执行") print("循环结束")
以下代码用于在列表nums中查找第一个能被3整除的数,找到后输出该数并停止查找。请填空。
nums = [1, 4, 6, 8, 9]
for num in nums:
if num % 3 == 0:
print(num)
___