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

Python字典菜单与子菜单开发问题:TXT数据导入实现困惑

问题解决:Python字典菜单与子菜单实现

核心问题

  • 已完成主菜单,不知道如何进入并实现蔬菜子菜单的交互逻辑
  • 询问水果子菜单是否可以采用与蔬菜子菜单相同的实现方式

原代码问题修正

先修正原代码中的几个错误:

  1. 变量名错误:dici应为basket,否则会报未定义错误
  2. 缩进错误:子菜单的条件判断未正确缩进
  3. 变量名不一致:opcao_legume应为option_vegetable
  4. 文件操作未关闭:改用with语句自动管理文件,避免资源泄漏

子菜单实现思路

1. 蔬菜子菜单实现

在主菜单的option == "c"分支中,调用蔬菜子菜单函数,并在子菜单内部做循环,直到用户选择返回主菜单。核心是通过子菜单内部的循环维持交互,不打断主菜单的循环逻辑。

2. 水果子菜单实现

完全可以采用和蔬菜子菜单相同的实现方式,甚至可以封装通用函数减少重复代码,本质都是对字典中对应分类的列表进行增删改查操作。

完整修正代码

#################### 导入TXT文件并读取为字典 
basket = {"vegetable": [], "fruit": []}
# 用with语句自动管理文件,更安全
with open("fruits_vegetables.txt", "r", encoding="UTF-8-SIG") as fp:
    cont = fp.readlines() 
    for linha in cont:
        dados = linha.strip().split(",")  # 去掉换行符再分割
        if len(dados) == 2:  # 确保每行格式正确,避免索引错误
            basket[dados[0]].append(dados[1])

###########################################
def main_menu():
    print("\nM E N U")
    print("a. 显示购物篮")
    print("b. 清屏")
    print("c. 蔬菜子菜单")
    print("d. 水果子菜单")
    print("e. 退出程序")

def vegetable_submenu():
    while True:
        print("\nV E G E T A B L E S")
        print("1. 列出所有蔬菜")
        print("2. 删除蔬菜")
        print("3. 添加蔬菜")
        print("4. 编辑蔬菜名称")
        print("5. 返回主菜单")
        
        option = input("请选择选项: ")
        if option == "1":
            print("蔬菜列表:", basket["vegetable"])
        elif option == "2":
            veg = input("请输入要删除的蔬菜名称: ")
            if veg in basket["vegetable"]:
                basket["vegetable"].remove(veg)
                print(f"已删除蔬菜: {veg}")
            else:
                print("该蔬菜不在列表中")
        elif option == "3":
            veg = input("请输入要添加的蔬菜名称: ")
            basket["vegetable"].append(veg)
            print(f"已添加蔬菜: {veg}")
        elif option == "4":
            old_veg = input("请输入要编辑的蔬菜名称: ")
            if old_veg in basket["vegetable"]:
                new_veg = input("请输入新的蔬菜名称: ")
                idx = basket["vegetable"].index(old_veg)
                basket["vegetable"][idx] = new_veg
                print(f"已将{old_veg}修改为{new_veg}")
            else:
                print("该蔬菜不在列表中")
        elif option == "5":
            break  # 退出子菜单,返回主菜单
        else:
            print("请选择有效的选项!")

def fruit_submenu():
    # 和蔬菜子菜单逻辑完全一致,仅操作basket["fruit"]
    while True:
        print("\nF R U I T S")
        print("1. 列出所有水果")
        print("2. 删除水果")
        print("3. 添加水果")
        print("4. 编辑水果名称")
        print("5. 返回主菜单")
        
        option = input("请选择选项: ")
        if option == "1":
            print("水果列表:", basket["fruit"])
        elif option == "2":
            fruit = input("请输入要删除的水果名称: ")
            if fruit in basket["fruit"]:
                basket["fruit"].remove(fruit)
                print(f"已删除水果: {fruit}")
            else:
                print("该水果不在列表中")
        elif option == "3":
            fruit = input("请输入要添加的水果名称: ")
            basket["fruit"].append(fruit)
            print(f"已添加水果: {fruit}")
        elif option == "4":
            old_fruit = input("请输入要编辑的水果名称: ")
            if old_fruit in basket["fruit"]:
                new_fruit = input("请输入新的水果名称: ")
                idx = basket["fruit"].index(old_fruit)
                basket["fruit"][idx] = new_fruit
                print(f"已将{old_fruit}修改为{new_fruit}")
            else:
                print("该水果不在列表中")
        elif option == "5":
            break
        else:
            print("请选择有效的选项!")

# 主程序循环
main_menu()
option = input("请选择选项: ")
while option != "e":
    if option == "a":
        for category, items in basket.items():
            print(f"{category}: {items}")
    elif option == "b":
        print("\n" * 15)
    elif option == "c":
        vegetable_submenu()  # 进入蔬菜子菜单
    elif option == "d":
        fruit_submenu()  # 进入水果子菜单
    else:
        print("请选择有效的选项!")
    
    print()
    main_menu()
    option = input("请选择选项: ")

print("感谢使用本程序。")

关键说明

  • 子菜单通过内部循环维持交互,直到用户选择返回主菜单(选项5),不影响主菜单的循环逻辑
  • 水果子菜单完全复用了蔬菜子菜单的逻辑,仅操作的字典键不同,证明可以采用相同实现方式
  • 优化了文件读取逻辑,添加格式校验避免索引错误

内容的提问来源于stack exchange,提问作者Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:29:56