在嵌套循环中设置“中断”的位置

where to set "break" in nested loop

提问人:Anna 提问时间:6/22/2023 更新时间:6/22/2023 访问量:88

问:

我正在学习嵌套循环,并且遇到了 break 的使用。我不太明白在嵌套循环中放置中断的什么位置以获得正确的输出。 我尝试了三种不同的代码,但并不完全理解它们。

代码 1:第一轮 j (j=0) 后循环中断,但嵌套循环本身的延续 - 这段代码对我来说是可以理解的,用作下一个代码的比较。

for i in range(6):                 
    print('hello')
    if i<=3:                        
        for j in range(3):
            print('hi')             
            break                   
        print('bye')                  

代码 2:在第一轮(i=0,j=0,1,2)之后中断整个嵌套循环,为什么不直接中断 j?与代码 1 相比,我认为 break 已经从循环 j 的单轮转移到了 j 的整个循环。但事实似乎并非如此。我已经读过,打破最接近的循环,这将是 j。

for i in range(6):
    print('hello')
    if i<=3:
        for j in range(3):
            print('hi')
        break                       
        print('bye')  

代码 3:在这里,我进一步移动了 break,但得到的结果与代码 2 相同。

for i in range(6):
    print('hello')
    if i<=3:
        for j in range(3):
            print('hi')
    break                      
    print('bye')
python 循环 嵌套 中断

评论

1赞 001 6/22/2023
break 突破最内层的封闭 forwhile 循环 *。在第一个示例中,这是,在最后 2 个示例中,它是for j in range(3):for i in range(6):
0赞 001 6/22/2023
您想要获得的预期输出是什么?
0赞 Anna 6/22/2023
@001我没有想要的输出,我只是想了解,如果我在不同的地方找到休息点会发生什么

答:

0赞 ForceBru 6/22/2023 #1

break突破了语句直接位于其中的最内层循环。break

for i in range(...):
   ...
   break

这是在循环内部,所以它会停止整个循环。外部的任何循环都保持不变:breakfor ifor i

for j in ...:
   for i in ...:
      break # Terminate the `for i` loop
   # The `for j` loop continues

放置在另一个循环旁边会影响循环是否在里面breakbreak

for i in ...:
    for j in ...:
        print('Hello')
    break
    # Outside `for j`, but inside `for i`,
    # so only `for i` loop can be affected by this `break`

"break中断最近的循环“的意思是”中断最里面的循环”。break

放置在语句内部仍会终止 it 所处的循环,但仅满足某些条件:breakifbreakif

for i in ...:
    for j in ...:
       if i > j: break # Get out of the `for j` loop ONLY IF `i > j`
0赞 JonSG 6/22/2023 #2

您了解第一个代码块的代码流和输出,这很棒。如果不遵循其他块中的流程,则可以使用调试器逐行执行代码,以查看其工作原理。

撇开这一点不谈,让我们看一下块 2:

for i in range(6):
    print('hello')
    if i<=3:
        for j in range(3):
            print('hi')
        break                       
        print('bye')  

我们希望这段代码是一次,因为我们第一次打印是 when is .由于 0 小于或等于 3,我们进入块并继续三次,然后我们点击语句,这会将我们甩出我们的循环,因为与我们所处的循环上下文相悖,而不是地理上最接近的循环上下文。请注意,您永远不会将我们甩出循环。print('hello')i0ifprint('hi')breakfor ibreakprint('bye')break

现在对于块 3:

for i in range(6):
    print('hello')
    if i<=3:
        for j in range(3):
            print('hi')
    break                      
    print('bye')

我们得到相同的输出“hello”和 3 x “hi”,但转储发生在一个略有不同的时间点。请注意,我们仍然没有击中.breakprint('bye')

在第 3 个块中,它不是我们在语句中做的最后一件事,而是我们现在在语句之后做的第一件事。breakifif

0赞 Metallipod 6/22/2023 #3

该语句只能用于循环。不是 If 语句。break

在示例 1 中,您的语句是嵌套循环的一部分。breakfor

在示例 2 和 3 中,break 语句位于嵌套循环之外,唯一附加自身的另一个循环是第一个循环。forfor

一旦原始循环被打破,就没有其他东西可以运行了,程序就结束了。