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

15

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

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

这段代码会打印出"ok" 100次。如何在for循环中当i等于10时,跳出while循环?


5
将其放入一个函数中并从内部循环中返回。 - sshannin
你为什么使用 =< 而不是 <=?这是打错了还是有特定的功能? - Darian Lewin
@sshannin,你能具体说明一下吗? - alwbtc
5个回答

15

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

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

break 语句只会退出内部循环,但由于外部循环的条件将求值为 False,它也将退出。


1
请确保在 for 循环后不要添加任何内容,否则将在内部循环中断后执行。 - Matt Briançon
@Matt Briançon 是的吗?我以为只要 for 中断了,while 就会中断? - alwbtc
5
除非以下情况之一发生,否则while循环不会停止:a)在其主体内调用break(严格在其主体内,在内部循环中不算);b)主体执行完毕,条件计算结果为 False;c)在其主体内(同样是严格在其中),调用continue并且条件计算结果为 False - mgibsonbr

8
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()

1
问题在于外层循环的条件只有在内层循环完成后才会被检查 - 此时 i 已经是100了。从我的角度来看,编写代码并获得所需的输出的正确方法是在内层循环中放置一个保护条件,并在 i 达到10时中断它。
for a in xrange(1, x+1):
    if i < 10:
        print "ok"
        i+=1
    else:
        break

如果您在内部循环中想要退出外部循环的原因是其他的,也许您应该告诉我们细节以更好地理解它。


-1
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

-1

这个怎么样?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接