美文网首页其它
Python的控制流:break和continue

Python的控制流:break和continue

作者: 皮皮大 | 来源:发表于2021-11-18 22:56 被阅读0次

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

    大家好,我是Peter~

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

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

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

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

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

    • break和continue语句
    • 缩进对代码块的影响
    python

    range函数

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

    • m:起始位置,整数;默认从0开始,可以取到m;可省略
    • n:终止位置,整数,必须有,取不到n;不能省略
    • s:步长,每次取数的长度;可正可负

    下面举例说明:

    image image

    单层for循环-break

    例子1:

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

    怎么解释上面的结果呢?

    • 当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:
            break
    print(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)
        
    # 结果
    p
    y
    t
    h
    

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

    单层for循环-continue

    例子4:

    for i in range(8):  # i=0,1,2....7
        if i == 5:
            continue
        print(i)
        
    # 结果
    0
    1
    2
    3
    4
    6
    7
    

    解释下上面的结果:

    • 当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:
            continue
    print(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 + i
    print(sum)
       
    # 结果
    1
    

    解释上面的结果:

    • 当i=1进入if,不满足if条件,执行sum += i的语句,此时sum变成了1,i变成了2进入下次循环
    • 当i=2进入if,满足偶数的条件,执行break,直接跳出整个循环,后面的sum+i不再执行
    • print(sum)实际上就是第一步中的sum值1
    image

    例子9:

    sum = 0
    
    for i in range(1,101):   # i从1到100
        if i % 2 == 0:    # i除以2的余数为0,即i是偶数
            continue
        sum += i
    print(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进入第一层循环:

    i j 是否满足if执行break 是否执行print
    0 0 是,(0,0)
    0 1
    0 2 已跳过
    0 3 已跳过
    1 0 是,(1,0)
    1 1 是,(1,1)
    1 2 已跳过
    1 3 已跳过
    2 0 是,(2,0)
    2 1 是,(2,1)
    2 2 是,(2,2)
    2 3 已跳过

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

    例子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

    i j 是否满足if执行break 是否执行print
    0 0
    0 1 是,(0,1)
    0 2 已跳过
    0 3 已跳过
    1 0
    1 1
    1 2 是,(1,2)
    1 3 已跳过
    2 0
    2 1
    2 2
    2 3 是,(2,3)

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

    例子12:

    for i in range(3):
        for j in range(4):
            if j > i:
                break
    print((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)
    

    解释上面的结果:

    i j 是否满足if执行continue 是否执行print
    0 0 是,(0,0)
    0 1 是,跳出
    0 2 是,跳出
    0 3 是,跳出
    1 0 是,(1,0)
    1 1 是,(1,1)
    1 2 是,跳出
    1 3 是,跳出
    2 0 是,(2,0)
    2 1 是,(2,1)
    2 2 是,(2,2)
    2 3 是,跳出

    例子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

    i j 是否满足if执行continue 是否执行print
    0 0
    0 1 是,跳出
    0 2 是,跳出
    0 3 是,跳出 是,(0,3)
    1 0
    1 1
    1 2 是,跳出
    1 3 是,跳出 是,(1,3)
    2 0
    2 1
    2 2
    2 3 是,跳出 是,(2,3)

    例子15:

    for i in range(3):
        for j in range(4):
            if j > i:
                continue
    print((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、写入代码

    image

    2、演示过程:

    image

    3、具体过程

    image

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

    image

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

    image

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

    相关文章

      网友评论

        本文标题:Python的控制流:break和continue

        本文链接:https://www.haomeiwen.com/subject/mlajtrtx.html