嵌套'while'循环作为函数

时间:2016-09-04 18:34:58

标签: python-2.7

def Commands():
            command = raw_input("Type 'Mod', 'Run', 'Exit', or 'Help':")
            elif command == "Run" :
                restart = True
                break
if groups == 4 :
    restart = True
    while restart :
        restart = False
        Commands()

如何让此功能正常工作? “restart = True”“break”行不会再次启动前一个“while”循环。我在多个“if”语句中使用命令,并希望避免为每个语句重复80行代码。我删除了无法正常运行的代码。

3 个答案:

答案 0 :(得分:3)

而不是在循环外尝试use a global variablebreak(您的当前用法应该给出语法错误) - 您应该return一个布尔值并评估返回值的功能,如:

def Commands():
    command = raw_input("Type 'Mod', 'Run', 'Exit', or 'Help':")
    if command.lower() == "run" :
        return True
        # changed this to use lower (so it sees run or Run or RUn)
        # and now it just returns a True value to say - keep going
    return False 
    # assuming that everything else means break out of loop just return False if not "Run"

while True:
    if not Commands():
        break

print "We're out"

您也可以将while循环设置为while Commands():并移除break,如this answer to a related question

所示

答案 1 :(得分:0)

当函数返回时变量restart不为true,因为它超出了范围。一个简单的解决方案可能只是让Commands()返回值true或false,并在分配该值的while循环中重新启动。

restart = Command() #Where command returns true or false

Short Description of the Scoping Rules?

答案 2 :(得分:0)

使用返回值最简单。如果您想进一步消除样板,可以使用例外:

def Commands():
    command = raw_input("Type 'Mod', 'Run', 'Exit', or 'Help':")
    if command != "Run" :
        raise StopIteration
if groups == 4 :
    try:
        while True:
            Commands()
    except StopIteration:
        print('Done')