为了账号安全,请及时绑定邮箱和手机立即绑定

如何突破Python中的多个循环?

如何突破Python中的多个循环?

LEATH 2019-06-06 13:49:14
如何突破Python中的多个循环?给定以下代码(不起作用):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有办法让这件事成功吗?或者,如果用户满意的话,我是否需要做一次检查来打破输入循环,然后另一次,更有限制地,在外部循环中签出所有内容?
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

我的第一反应是将嵌套循环重构为函数并使用return为了逃跑。


查看完整回答
反对 回复 2019-06-06
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

这是另一个很短的方法。缺点是你只能打破外部循环,但有时正是你想要的。

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/etc结构:为什么python在for和while循环之后使用“Other”?

关键洞察力:只有它似乎好像外圈总是坏掉似的。但如果内环不破裂,外部回路也不会中断。

这个continue陈述是这里的魔力。在“换-否则”条款中。按定义如果没有内心的突破,就会发生这种情况。在这种情况下continue干净利落地绕过外面的裂口。


查看完整回答
反对 回复 2019-06-06
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

首先,普通的逻辑是有帮助的。

如果,由于某种原因,终止条件无法解决,例外是一个倒退的计划。

class GetOutOfLoop( Exception ):
    passtry:
    done= False
    while not done:
        isok= False
        while not (done or isok):
            ok = get_input("Is this ok? (y/n)")
            if ok in ("y", "Y") or ok in ("n", "N") : 
                done= True # probably better
                raise GetOutOfLoop
        # other stuffexcept GetOutOfLoop:
    pass

对于这个特定的例子,可能没有必要出现异常。

另一方面,在字符模式应用程序中,我们经常有“Y”、“N”和“Q”选项。对于“Q”选项,我们希望立即退出。这更不寻常。


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 894 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信