当前位置:首页>python>Python学习笔记——从入门到报废(十一、循环(下))

Python学习笔记——从入门到报废(十一、循环(下))

  • 2026-09-05 06:20:59
Python学习笔记——从入门到报废(十一、循环(下))
(欢迎喜欢的朋友点赞关注~)

前面两个章节,我们着重对两类循环及循环嵌套进行了介绍。这一章节,我们继续深入探讨循环的一些控制语句。

一、break语句

设想这样一个例子,有一个成绩列表,每个分数都是小于等于100的数,唯独有一个学生答题太好了,老师奖励他10分,他的成绩最终大于100,那么如何找到这个分数呢?

利用上面循环和判断的嵌套,可以写成:

points = [68, 89, 100, 99, 105, 20, 6]for p in points:    if p > 100:        print(p)

然而,我们大胆极端一下,如果成绩单上有100万个成绩,而105那个成绩却在前200个数值里就出现了,那后面的循环就是单纯浪费计算资源,因此我们会想在找到105这个分数时,直接结束循环。这里就要引入“break”语句了,这个语句用于立即终止当前“break”所属的循环,无论后面是否还有其他计算(代码执行逻辑位于break之后的代码)。因此,上述代码变为:

points = [68, 89, 100, 99, 105, 20, 6]for p in points:    if p > 100:        print(p)        break

假设老师想知道花了几次遍历找到这个分数,那么代码就可以写作:

points = [68, 89, 100, 99, 105, 20, 6]count = 1for p in points:    if p > 100:        print(p)        break    count += 1print(count)

这里注意到,由于“count += 1”的操作是在if之后,if与“count += 1”同级,而if中的子级代码先运行,因而“count += 1”逻辑上在break之后。因此,当触发break语句时,循环立即终止,“count += 1”的计算也被跳过,程序直接跳转至运行“print(count)”。

如果有很多科目的成绩列表,我们想找出每个科目的异常分,那么代码写作:

points_dict = {    "chinese": [68, 89, 100, 99, 105, 20, 6],    "math": [99, 100, 109, 89, 68, 100, 100],    "english": [5, 19, 32, 60, 110, 80, 75]}for course, points in points_dict.items():    count = 1    for point in points:        if point > 100:            print("Found!")            break        count += 1    print("Found point " + str(point) + " in " + course + \          " at " + str(count) + " times")# Output:# Found!# Found point 105 in chinese at 5 times# Found!# Found point 100 in math at 3 times# Found!# Found point 110 in english at 5 times

代码行末尾的“\”表示当前代码行未编写结束,转接下一行内容。从这个嵌套循环的例子可以看出,当触发break后,只有里层的循环结束,外层循环的内容依然继续运行。

二、continue语句

前面介绍了break,下面我们介绍一个比较简单的循环语句continue。这个语句用于结束当前一轮循环,被触发后,逻辑上位于continue的代码在本轮循环不执行,直接开始下一轮循环。

例如,老师想查看一下成绩单中的奇数分数,那么可以写成:

points = [13, 46, 98, 65, 82, 52]for p in points:    if p % 2 == 0:        continue    print(p, end=" ")# Output: 13 65

随着continue触发,位于其之后的print在本轮循环不发生执行。

很多时候,continue语句可以转换为if-else,例如上面的代码可以写成:

points = [13, 46, 98, 65, 82, 52]for p in points:    if p % 2:  # 1 表示 True        print(p, end=" ")    else:        pass  # pass表示此处无待执行代码,用于保持代码结构

然而这些转换很可能导致代码可读性变差,尤其是当continue需要跳过很多代码时。因此,适当的使用continue会更加有助于代码的调试和检查。

三、循环里的else

可能有的读者会觉得else与循环好像并不搭,因为确实是这样的。在大多数高级语言并没有提供循环对else的支持,而Python提供的此操作用于去处理循环正常结束(没有被break语句中断)的情况。

例如,要找一个数字列表里有没有6:

numbers_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]for num in numbers_1:    if num == 6:        print("Found")        breakelse:    print("Not Found")# Output: Foundnumbers_2 = [9, 8, 7, 5, 4, 3, 2, 1, 0]for num in numbers_2:    if num == 6:        print("Found")        breakelse:    print("Not Found")# Output: Not Found

由于这种写法个人觉得有点另类(有些人会觉得比较elegant),因此个人更加偏向于用标志变量的方法:

numbers_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]flag = Falsefor num in numbers_1:    if num == 6:        flag = True        breakif flag:    print("Found")else:    print("Not Found")

这种方法可能会产生冗余变量和代码行,因此是否在循环时使用else根据读者的个人喜好即可。


往期回顾:

Python学习笔记——从入门到报废(十、循环(中))

Python学习笔记——从入门到报废(九、循环(上))

用Python Pygame做小游戏|从设计到算法,手把手复刻经典款

baoyu-skills 全攻略:AI效率神器,一键解锁创作/办公超能力

最新文章

随机文章