循环在执行后继续进行

时间:2013-02-24 15:18:28

标签: python python-3.x while-loop break python-3.3

def Help(string):
    while True:
        if string == 'Manifest':
            return Manifest()
            break
        elif string == 'Intent':
            return Intent()
            break
        else:
            print('The options available are: \n')
            for i in andHelp:
                print(i)
            print('Type Q to Quit \n')
            x = input('What option do you choose: ')
            print('\n')
            if x == 'Q':
                break
            else:
                Help(x)

如果它进入else语句,它将如何继续循环? 例如:

“可用选项包括:

意图

清单

键入Q退出

您选择了什么选项:“< - 这将继续出现以及我选择的功能。

2 个答案:

答案 0 :(得分:1)

你甚至不需要一个while循环来检查你的内容。请改用:

def Help(string):
    if string == 'Manifest':
        return Manifest()
    elif string == 'Intent':
        return Intent()
    else:
        print('The options available are:\n%s\nType Q to Quit\n' % '\n'.join(andHelp))
        x = input('What option do you choose: ')
        print('\n')
        if x != 'Q':
            Help(x)

注意:我稍微修改了你的打印件以减少真正的,不需要在那里的额外线条。
note2:正如您在评论中看到的那样,在没有限制的情况下递归执行此操作可能会有危险,因为您可能会达到最大深度级别。

答案 1 :(得分:1)

您的实际问题是由于您的递归实际上没有返回内部框架的值,但是消除递归似乎是一种更直接的解决方案。

关于这一点的愚蠢是在循环内进行递归。递归和循环都有相同的目的:使option选择继续发生,直到给出有效选项。所以你绝对可以消除一个:

def Help(string):
    while True:
        if string == 'Manifest':
            return Manifest()
            break
        elif string == 'Intent':
            return Intent()
            break
        else:
            print('The options available are: \n')
            for i in andHelp:
                print(i)
            print('Type Q to Quit \n')
            string = input('What option do you choose: ') # Change `x` to `string` so next iteration will change behavior
            print('\n')
            if string == 'Q':
                break

正如Inbar Rose's answer指出的那样,你可以通过递归来缩短这一点,但由于Python需要递归限制,你可以通过强制程序重复超出该限制来使程序崩溃。所以也许坚持循环更好。无论如何,你可以通过验证string作为循环本身的条件来进一步清理它:

def Help(string):
    validOptions = ('Manifest', 'Intent', 'Q')

    while string not in validOptions:
        print('The options available are: \n')
        for i in andHelp:
            print(i)
        print('Type Q to Quit \n')
        string = input('What option do you choose: ')
        print('\n')

    # Now you have a guaranteed-valid string, so you don't need this part in the loop.
    if string == 'Manifest':
        return Manifest() # No need for a 'break' after a return. It's [dead code](http://en.wikipedia.org/wiki/Dead_code)
    elif string == 'Intent':
        return Intent()
    elif string == 'Q':
        return