提问人:Anna 提问时间:6/22/2023 更新时间:6/22/2023 访问量:88
在嵌套循环中设置“中断”的位置
where to set "break" in nested loop
问:
我正在学习嵌套循环,并且遇到了 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')
答:
break
突破了语句直接位于其中的最内层循环。break
for i in range(...):
...
break
这是在循环内部,所以它会停止整个循环。外部的任何循环都保持不变:break
for i
for i
for j in ...:
for i in ...:
break # Terminate the `for i` loop
# The `for j` loop continues
放置在另一个循环旁边会影响循环是否在里面:break
break
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 所处的循环,但仅满足某些条件:break
if
break
if
for i in ...:
for j in ...:
if i > j: break # Get out of the `for j` loop ONLY IF `i > j`
您了解第一个代码块的代码流和输出,这很棒。如果不遵循其他块中的流程,则可以使用调试器逐行执行代码,以查看其工作原理。
撇开这一点不谈,让我们看一下块 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')
i
0
if
print('hi')
break
for i
break
print('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”,但转储发生在一个略有不同的时间点。请注意,我们仍然没有击中.break
print('bye')
在第 3 个块中,它不是我们在语句中做的最后一件事,而是我们现在在语句之后做的第一件事。break
if
if
该语句只能用于循环。不是 If 语句。break
在示例 1 中,您的语句是嵌套循环的一部分。break
for
在示例 2 和 3 中,break 语句位于嵌套循环之外,唯一附加自身的另一个循环是第一个循环。for
for
一旦原始循环被打破,就没有其他东西可以运行了,程序就结束了。
评论
break
突破最内层的封闭for
或while
循环 *。在第一个示例中,这是,在最后 2 个示例中,它是for j in range(3):
for i in range(6):