CC++ & Algorithm

Python循环控制进阶

困难0
语言版本:C++
概述:用break提前跳出,用continue跳过本轮,还有else配合使用。

Python 循环控制进阶:break、continue 和 else 的妙用

在写循环代码时,我们常常需要根据条件提前结束循环、跳过某一次循环,或者在循环顺利结束后执行一些特殊操作。Python 提供了三个非常实用的控制工具:breakcontinueelse

  • break 就像跑步比赛听到哨声——立刻停下,不再继续。
  • continue 就像跳过一个水坑——这一轮跳过,下一轮继续正常跑。
  • else 像一个“圆满结束”奖励——只有循环没有被中途打断时才会执行。

下面我们分别来认识它们。


一、break:提前跳出整个循环

break 用于立即终止当前所在的循环(forwhile),程序会跳到循环后面的代码继续执行。
生活例子:你有一张零食清单,要从第一项开始找“巧克力”。只要找到了,后面就不用再看了,直接去吃巧克力。

代码示例:在列表中查找一个数字,找到就停止。

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 时发现整除,执行 breakelse 被跳过。

注意elseforwhile 同级,不是和 if 同级。缩进要小心。


常见错误与注意事项

  1. break 只跳出最内层循环
    如果有多层嵌套循环,break 只跳出它所在的那一层。要想跳出外层需要额外标记或使用“退出标志”。

    # 错误例子:break 只跳出内层 for,外层 while 继续
    while True:
        for x in range(5):
            if x == 3:
                break   # 只跳出 for,while 仍在运行
        print("外层还在运行")
    
  2. continue 在 while 中可能导致死循环
    如果在 while 循环中不小心把循环变量更新语句写在 continue 之后,可能会永远跳不过去。

    i = 0
    while i < 10:
        if i % 2 == 0:
            continue       # 跳过后面的 i += 1,i 永远为0!
        print(i)
        i += 1             # 这条语句被跳过了
    

    解决方法:把更新语句放在 continue 之前,或者改用 for 循环。

  3. else 容易误解为“循环中的最终操作”
    很多人以为 else 是“不管怎样都会执行”,其实它只在不触发 break 时执行。可以用 break 来测试理解。

  4. 不要忘记冒号和缩进
    breakcontinueelse 后的冒号很容易漏掉,导致语法错误。


完整可运行示例:找出两个列表中的共同数字

下面综合使用 breakcontinueelse 设计一个小游戏:有两个数字列表,程序在第一个列表中找第一个同时在第二个列表里出现的数字。

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 循环:条件循环,需要自己控制循环变量,容易出错。
  • 嵌套循环breakcontinue 只作用于最内层,需要小心。
  • 循环中的异常处理:可以用 try...except 捕获错误并配合 breakcontinue 控制流程。
  • 推导式:有时可以用列表推导式替代循环加 continue,更简洁。

掌握了这三个控制工具,你就能像指挥交通一样灵活地控制代码的流程了。多写几段代码练习,很快就能得心应手!

例题精讲

1单选题

以下代码的输出是什么? for i in range(5): if i == 3: break print(i, end=' ')

A0 1 2 3
B0 1 2
C0 1 2 3 4
D0 1 2 4
2判断题

在Python的for-else结构中,如果循环因为break语句提前终止,那么else子句不会被执行。

3填空题
以下代码用于输出1到10中所有的奇数,请填空完善程序。
for i in range(1, 11):
    if i % 2 == 0:
        ___
    print(i)
4单选题

以下代码的输出是什么? count = 0 while count < 5: count += 1 if count == 3: break else: print("else执行") print("循环结束")

A输出"else执行"和"循环结束"
B只输出"循环结束"
C输出"else执行"
D无任何输出
5填空题
以下代码用于在列表nums中查找第一个能被3整除的数,找到后输出该数并停止查找。请填空。
nums = [1, 4, 6, 8, 9]
for num in nums:
    if num % 3 == 0:
        print(num)
        ___