写点什么

Python 中的控制流:break 和 continue

作者:Peter
  • 2021 年 11 月 18 日
  • 本文字数:2910 字

    阅读完需:约 10 分钟

公众号:尤而小屋<br>作者:Peter<br>编辑:Peter


大家好,我是 Peter~


之前给大家介绍过 Python 中的 for、if、赋值等相关语句,本文介绍的 Python 中的两种控制流:break 和 continue


首先,从英文单词的字面上,我们可以简单地理解下二者:


  • break,中断的意思,在代码中就表现为中断后面代码的运行

  • continue,继续的意思,在代码中体现为继续后面代码的运行


其次,我们需要明白的是二者都有跳出循环的作用,都可以用在 for 循环和 while 循环中,但是作用的范围却是不同的。


本文主要讲解两个主要知识点:


  • break 和 continue 语句

  • 缩进对代码块的影响


range 函数

下面多个例子中的 range(m,n,s)函数表示的是取指定数值区间的数值作为迭代器:


  • m:起始位置,整数;默认从 0 开始,可以取到 m;可省略

  • n:终止位置,整数,必须有,取不到 n;不能省略

  • s:步长,每次取数的长度;可正可负


下面举例说明:



单层 for 循环-break

例子 1:


for i in range(8):  # i=0,1,2....7    if i == 5:  # 当i等于5的时候执行break操作        break    print(i)    # 结果01234
复制代码


怎么解释上面的结果呢?


  • 当 i=0,进入 if,不等于 5,不执行 break,直接 print,此时输出 0

  • 同样的道理,i=1,2,3,4 都是同样的操作

  • 当 i=5 进入 if 语句中,发现 i=5,执行 break,跳出了整个循环,后面的 i=6、7 就不会执行了


看例子 2(只是没有缩进):


for i in range(8):   # i=0,1,2....7    if i == 5:        breakprint(i)
# 结果5
复制代码


这个例子说明的是缩进对代码执行的影响:


  • i=0 进行 if,不等于 5,不执行 break,进入下次循环即 i=1

  • 同样的道理,当 i=1、2、3、4 进行 if,不等于 5,不执行 break

  • 当 i=5 进入 if 的时候,刚好是等于 5,执行 break 语句跳出整个循环,此时 i 刚好是 5,打印出来 print(i)就是 5


例子 3:


这个例子的结果解释同例子 1,只是将 range 函数的迭代器换成了字符串的形式:


for i in "python":    if i == "o":        break    print(i)    # 结果pyth
复制代码


这三个 break 相关的例子说明:当遇到满足 break 条件,则会跳出整个 for 循环;当然,这仅仅是针对单层循环。

单层 for 循环-continue

例子 4:


for i in range(8):  # i=0,1,2....7    if i == 5:        continue    print(i)    # 结果0123467
复制代码


解释下上面的结果:


  • 当 i=0 进入 if 循环,不等于 5,不执行 continue,执行 print(i),打印 0;进入下次循环

  • 当 i=1、2、3、4 进入 if 循环的时候,都是同样的效果,且执行 print(i)的语句

  • 当 i=5 进入 if 循环,刚好 i 等于 5,执行 continue,跳出此时的 print(i),也就是不打印 5;直接从开头进入下次的循环

  • 当 i=6、7 就和 i=0、1、2、3、4 的解释是相同的


如果 print 语句不缩进呢?看例子 5:


for i in range(8):    if i == 5:        continueprint(i)
# 结果7
复制代码


从上面例子 5 的结果可以看出来,最后一次 i 是等于 7;当我们的 print 语句不缩进的时候,只有当 for 语句完全执行完毕才会执行,所以要等到最后的 i=7 才会打印。


例子 6:


for i in ["语文","数学","英语"]:    if i != "数学":        continue    print(i)    # 结果数学
复制代码


解释上面的结果:


  • i 为“语文”,第一次进入 if 语句,i 不等于数学,执行 continue,不会执行 print;进入下次循环

  • 第二次 i 取值为“数学”,进入 if 中,不满足 if 条件,所以不执行 continue,执行 print,打印出“数学”

  • 后面的“英语”满足 if 条件,直接 continue 跳出去了


上面 3 个 continue 相关的例子说明:当满足 continue 语句的条件,则会跳出当前的这次不执行,但是不影响后面的语句执行

高斯求和

例子 7:


sum = 0  # 和的初始值
for i in range(1,101): if i % 2 == 0: # i除以2的余数为0,即i是偶数 break sum += i # sum = sum + iprint(sum) # 结果1
复制代码


解释上面的结果:


  • 当 i=1 进入 if,不满足 if 条件,执行 sum += i 的语句,此时 sum 变成了 1,i 变成了 2 进入下次循环

  • 当 i=2 进入 if,满足偶数的条件,执行 break,直接跳出整个循环,后面的 sum+i 不再执行

  • print(sum)实际上就是第一步中的 sum 值 1



例子 9:


sum = 0
for i in range(1,101): # i从1到100 if i % 2 == 0: # i除以2的余数为0,即i是偶数 continue sum += iprint(sum) # 结果2500
复制代码


解释上面的结果:


  • 当 i=1 进入 if 循环,不满足 if 条件(i 为奇数),执行sum += i,sum 变成 1,i 变成 2 进入下次循环

  • 当 i=2 进入 if 循环,刚好满足 if 条件(i 为偶数),执行 continue,不执行后面的sum += 1,i 变成 3 进入下次循环

  • 当 i=3 进入 if 循环,不满足 if 条件(i 为奇数),执行sum += i,sum 变成 1+3=4,i 变成 4 进入下次循环

  • 当 i=4 进入 if 循环,刚好满足 if 条件(i 为偶数),执行 continue,不执行后面的sum += 1,i 变成 5 进入下次循环


通过前 4 步我们发现:只有当 i 为奇数的时候才会执行相加的操作,所以实际上就是 1 到 100 的奇数之和,刚好 2500

双层 for 循环-break

例子 10:


for i in range(3):  # i:0、1、2    for j in range(4):  # j:0、1、2、3        if j > i:            break        print((i,j))  # 和if对齐        # 结果(0, 0)(1, 0)(1, 1)(2, 0)(2, 1)(2, 2)
复制代码


解释上面的结果:


上面的代码包含两层 for 循环,从 i=0 进入第一层循环:



这就是整个过程的执行和解释~


例子 11:


for i in range(3):    # i=0,1,2    for j in range(4):   # j=0,1,2,3        if j > i:            break    print((i,j))  # 和第二个for对齐    # 结果(0, 1)(1, 2)(2, 3)
复制代码


解释上面的结果:


这个例子和上面一个的区别是:print 和第二个 for 对齐,也就是说只有当第二个 for 全部运行结束才会执行 print



也就是说:当两层循环的时候,break 会跳出最里层(靠 break 最近)的 for 循环


例子 12:


for i in range(3):    for j in range(4):        if j > i:            breakprint((i,j))
# 结果(2, 3)
复制代码


上面的结果解释和前两个的过程相同,直到最后的一次(2,3)满足条件 break 条件便会执行 print。

双层 for 循环-continue

例子 13:


for i in range(3):  # i=0,1,2    for j in range(4):  # j=0,1,2,3        if j > i:            continue        print((i,j))        # 结果(0, 0)(1, 0)(1, 1)(2, 0)(2, 1)(2, 2)
复制代码


解释上面的结果:



例子 14:


for i in range(3):    for j in range(4):        if j > i:            continue    print((i,j))    # 结果(0, 3)(1, 3)(2, 3)
复制代码


解释上面的结果:


print 语句的代码进行了缩进,只有当第二层的 for 全部执行完毕,才会 print



例子 15:


for i in range(3):    for j in range(4):        if j > i:            continueprint((i,j))
# 取最后一次的值(2, 3)
复制代码


总结下二者的本质区别:break 是用于终止整个循环;而 continue 是跳出本次循环,不影响下次循环的执行。

神器网站

最后送给大家一个经典的神器网站:https://pythontutor.com/visualize.html#mode=edit,这个网站能够演示我们代码每一步的运行。


我们以这个代码为例:


for i in range(3):    for j in range(4):        if j > i:            continue    print((i,j))    # 结果(0, 3)(1, 3)(2, 3)
复制代码


1、写入代码



2、演示过程:



3、具体过程



当我们运行到第 15 步骤,出现了第一个结果:



40 步全部运行结束,我们想要的结果就看到了:



感兴趣的朋友可以去这个网站看看~

发布于: 刚刚阅读数: 4
用户头像

Peter

关注

志之所趋,无远弗届,穷山距海,不能限也。 2019.01.15 加入

还未添加个人简介

评论

发布
暂无评论
Python中的控制流:break和continue