如何跳出多个循环?
给定以下这段代码(它不能正常工作):
while True:
# Snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok.lower() == "y": break 2 # This doesn't work :(
if ok.lower() == "n": break
# Do more processing with menus and stuff
有没有办法让它正常运行?还是说我需要先在输入循环中做一个检查来退出,然后再在外层循环中做另一个更有限的检查,以便如果用户满意就完全退出?
40 个回答
503
这里有另一种简短的方法。缺点是你只能跳出外层循环,但有时候这正是你想要的效果。
for a in xrange(10):
for b in xrange(20):
if something(a, b):
# Break the inner loop...
break
else:
# Continue if the inner loop wasn't broken.
continue
# Inner loop was broken, break the outer.
break
这个方法使用了 for / else 结构,具体解释可以参考这里:为什么 Python 在 for 和 while 循环后面使用 'else'?
关键点:看起来外层循环总是会被打断,但如果内层循环没有被打断,外层循环也不会被打断。
这里的魔法在于 continue
语句。它出现在 for-else 结构中。根据定义,如果内层没有打断,这种情况就会发生。在这种情况下,continue
可以巧妙地绕过外层的打断。
737
我第一反应是把这个嵌套的循环整理成一个函数,然后用 return
来退出这个函数。