如何在python的内部for循环中打破while循环?

Posted

技术标签:

【中文标题】如何在python的内部for循环中打破while循环?【英文标题】:How to break while loop in an inner for loop in python? 【发布时间】:2012-12-07 09:32:50 【问题描述】:

while 在 for 循环中 i>10 时不会中断:

i = 0
x = 100
while i<=10:
    for a in xrange(1, x+1):
        print "ok"
        i+=1

它会打印"ok" 100 次。当ifor循环中达到10时,如何打破while循环?

【问题讨论】:

只要把它扔到一个函数中,然后从内部循环中返回。 为什么使用= @sshannin 你能说得更具体点吗? 【参考方案1】:

在内循环“返回”之前,外循环中的条件永远不会被重新检查。如果您需要在 i 更改后每次都进行此检查,请改为:

while i<=10:
    for a in xrange(1, x+1):
        print "ok"
        i+=1
        if i > 10:
            break

break 只会退出内部循环,但由于外部循环条件将评估为 False,它也会退出。

【讨论】:

请确保不要在 for 循环之后添加任何内容,否则将在内部循环中断后执行。 @Matt Briançon 是吗?我以为while 会在for 中断时立即中断? @alwbtc while 不会中断,除非发生以下任何一种情况:a)您在其主体中调用break(严格在其主体中,而不是在其内部的循环中); b) 主体完成执行,条件评估为False; c) 你在它的主体中调用continue(严格来说,也是)并且条件评估为False【参考方案2】:
i = 0
x = 100
def do_my_loops():
  while i<=10:
    for a in xrange(1, x+1):
      print "ok"
      i+=1
      if time_to_break:
        return
do_my_loops()

time_to_break 是您正在检查的条件。

或者一般来说:

def loop_container():
  outer_loop:
    inner_loop:
      if done:
        return

loop_container()

【讨论】:

【参考方案3】:

问题在于,直到内部循环完成,才会检查外部循环的条件 - 此时 i 已经是 100。从我的角度来看,编写此代码并获得所需输出的正确方法是在内部循环中放置一个守卫,并在i 达到 10 时打破它。

for a in xrange(1, x+1):
    if i < 10:
        print "ok"
        i+=1
    else:
        break

如果您想在内部循环内部中断外部循环,也许您应该让我们了解细节以便更好地理解它。

【讨论】:

【参考方案4】:

这个怎么样?

x = True 
while x:
    for i in range(20):
        if i>5:
            x = False
            break
        else:
            print(i)

【讨论】:

【参考方案5】:
booked = False
for i in range(100, 200):
    if booked:
        break
    while True:
        for x in range(1, 3):
            if booked:
                break
            result = 0
            if result == 1:
                booked = True
        break
    continue

【讨论】:

以上是关于如何在python的内部for循环中打破while循环?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中打破while循环?

我将如何在 python 的 while 循环中打破一个函数? [复制]

python语言如何结尾?

如何在 Python 中跳出 while 循环?

如何通过 raw_input() 打破 while 循环?蟒蛇 3

Python3