【问题标题】:How to break while loop in an inner for loop in python?如何在python的内部for循环中打破while循环?
【发布时间】: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 你能说得更具体点吗?

标签: python for-loop while-loop break


【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-28
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 2018-10-14
          • 1970-01-01
          • 2021-06-29
          相关资源
          最近更新 更多