首页 > 解决方案 > 在堆栈中,如何让 elif 在 if 之后运行?

问题描述

我已经编写了一个在测试之前运行的菜单,它只会运行第一行if而不是以下任何elif一行。

例如,当被要求在菜单的第一个问题中输入时,如果我输入 exit(或任何大写的变体),它将按预期输出“再见”并停止运行,但如果我输入“颜色”,“颜色” , 'play' 或进行无效输入什么都不会发生并且脚本停止运行。

print("Python Adventure\n")


def menu():  # This is the menu text for options before running the game
    option_1 = input("Select an option:\nPlay  Color  Exit\nType:")
    if option_1.lower() == "exit":
        print("\nGoodbye")
        exit()
    elif option_1.lower() == "color" or "colour":  # color options here
        def color():
            color_1 = input("Play with color? yes/no\nType:")
            if color_1.lower() == "n" or "no":
                print("Color off\n")
                menu()
            elif color_1.lower() == "y" or "yes":
                print("Color on\n")
                menu()
            elif color_1.lower() != "":
                print("Not recognised please try again.")
                color()
        color()
    elif option_1.lower() == "play": # Text based game will start here.
        print("Running: Python Woods")  
    elif option_1.lower() != "":  # Invalid entry trigger.
        print("Invalid entry, try again.")
        menu()


menu()

欢迎在任何术语和格式上纠正我。任何学习都是有帮助的。

标签: pythonpython-3.xfunctionif-statementexit

解决方案


这是一个更好的设计,大多数评论者都暗示了这一点:

print("Python Adventure\n")

def color():
    color_1 = input("Play with color? yes/no\nType:")
    if color_1.lower() in ("n", "no"):
        print("Color off\n")
    elif color_1.lower() in ("y", "yes"):
        print("Color on\n")
    else:
        print("Not recognised please try again.")
        return True
    return False

def menu():  # This is the menu text for options before running the game
    option_1 = input("Select an option:\nPlay  Color  Exit\nType:")
    if option_1.lower() == "exit":
        print("\nGoodbye")
        return False
    elif option_1.lower() in ("color", "colour"):  # color options here
        while color():
            pass
    elif option_1.lower() == "play": # Text based game will start here.
        print("Running: Python Woods")  
    elif option_1.lower() != "":  # Invalid entry trigger.
        print("Invalid entry, try again.")
    return True

while menu():
    pass

推荐阅读