python - 在堆栈中,如何让 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()
欢迎在任何术语和格式上纠正我。任何学习都是有帮助的。
解决方案
这是一个更好的设计,大多数评论者都暗示了这一点:
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
推荐阅读
- mysql - 如何从数据库中查询/搜索某个用户的非朋友的名字?
- javascript - 尝试获取 JSON 的价值时未定义
- selenium-webdriver - webdriver-manager 更新失败并出现类型错误:无法读取 null 的属性“url”
- c# - 使用 ASP.NET Core 2.2 “找不到任何兼容的框架版本”
- excel - 向 Array 元素添加过滤
- linux - 在ubuntu中查找一个守护进程的包名和服务名
- c++ - 在 pybind11 和 C++ 中添加源时没有给目标错误提供源
- browser - 基于图像的 WebAR 浏览器框架?
- spring-boot - 为配置文件禁用 JMS
- javascript - 在首次渲染期间处理组件中的未定义/空属性