You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:48:20