为Python膳食规划器添加子菜单联动功能的技术求助
解决方案:膳食规划器主菜单与子模块联动实现
问题分析
你的代码目前存在以下核心问题导致主菜单与子模块无法联动:
- 子菜单列表被封装在未调用的
secondary函数中,无法被主逻辑访问 - 缺少主菜单选择后触发对应子菜单的逻辑
- 存在未完成、未被调用的冗余函数和无效全局变量
修改后的完整代码
def get_menu_choice(menu_items): """ 显示菜单选项,获取并验证用户选择,返回选中的选项索引(从1开始) """ for index, item in enumerate(menu_items): print(index + 1, item) user_input = input("Enter your choice: ") while not user_input.isdigit() or int(user_input) < 1 or int(user_input) > len(menu_items): user_input = input("Please enter a valid choice: ") return int(user_input) def main(): # 主菜单选项 main_menu = ["Cereal", "French Continental", "English Breakfast", "Chicken Meals", "Pizzas", "Burgers", "Pastas", "Toppings & Toast Special"] # 主菜单与子菜单的映射,后续可直接添加新的子菜单 sub_menus = { "Cereal": ["Cocoa Puffs", "Crunchy Nut", "Kellogg's", "Honey Nut Cheerios", "Weetabix"], "French Continental": ["Crepes", "Pancakes", "Croissant"], "English Breakfast": [], "Chicken Meals": [], "Pizzas": [], "Burgers": [], "Pastas": [], "Toppings & Toast Special": [] } # 获取主菜单选择 main_choice_idx = get_menu_choice(main_menu) main_choice = main_menu[main_choice_idx - 1] print(f"You chose: {main_choice}! Great choice!") # 触发对应子菜单(如果存在) sub_menu = sub_menus.get(main_choice, []) if sub_menu: print(f"\nPlease select a specific {main_choice}:") sub_choice_idx = get_menu_choice(sub_menu) sub_choice = sub_menu[sub_choice_idx - 1] print(f"不错的选择!你选了{sub_choice}!") else: print(f"No specific options available for {main_choice} yet.") if __name__ == "__main__": main()
关键修改说明
- 子菜单映射字典:用
sub_menus字典将主菜单选项与对应子菜单绑定,后续添加新的食物类型或子品类时,只需修改该字典,无需调整核心逻辑,扩展性更强。 - 复用通用菜单函数:原
get_menu_choice函数具备通用的菜单展示和输入验证能力,直接复用即可处理主菜单和所有子菜单,避免重复代码。 - 联动逻辑实现:在主菜单选择完成后,通过字典匹配对应的子菜单,若子菜单存在则显示并获取用户选择,最后输出指定格式的反馈信息。
- 清理冗余代码:移除未被调用的
secondary函数、无效全局变量cerealinput和未完成的get_cereal_choice函数,简化代码结构,提升可读性。
内容的提问来源于stack exchange,提问作者BobbleBW
相关产品推荐
相关产品推荐

