如何将用户输入添加到可复用列表,实现Python程序持久化存储自定义回答
家庭用餐选择程序动态回答识别实现方案
这个需求完全可实现,核心逻辑是将肯定/否定回答列表持久化存储在本地文件中,程序启动自动加载、新增回答自动写入文件,全程无需手动修改代码。
实现思路
- 用JSON格式存储回答配置,Python原生支持读写,无需额外安装依赖
- 程序启动时优先读取本地配置文件,文件不存在则自动初始化默认的肯定/否定回答
- 遇到未识别的用户输入时,新增二次确认步骤,将新回答同步存入内存和本地配置文件
- 原有餐食匹配逻辑完全保留,仅替换回答判断的硬编码部分
修改后完整可运行代码
import random import json # 加载回答配置 def load_answer_config(): default_config = { "positive": ["igen", "yes", "van", "igen van", "i do", "yes i do"], "negative": ["nem", "no", "nincs"] } try: with open("answer_config.json", "r", encoding="utf-8") as f: return json.load(f) except FileNotFoundError: # 首次运行生成默认配置文件 with open("answer_config.json", "w", encoding="utf-8") as f: json.dump(default_config, f, ensure_ascii=False, indent=2) return default_config # 保存回答配置到本地 def save_answer_config(config): with open("answer_config.json", "w", encoding="utf-8") as f: json.dump(config, f, ensure_ascii=False, indent=2) # 处理用户输入,自动识别/新增回答 def process_user_input(input_str): input_str = input_str.lower().strip() answer_config = load_answer_config() positive = answer_config["positive"] negative = answer_config["negative"] if input_str in positive: return "positive" if input_str in negative: return "negative" # 未识别回答,询问用户 print(f"未识别回答:{input_str}") while True: confirm = input("请选择该回答的类型:1=肯定/同意,2=否定/不同意:").strip() if confirm == "1": positive.append(input_str) answer_config["positive"] = positive save_answer_config(answer_config) print(f"已将「{input_str}」加入肯定回答列表,下次可直接识别") return "positive" elif confirm == "2": negative.append(input_str) answer_config["negative"] = negative save_answer_config(answer_config) print(f"已将「{input_str}」加入否定回答列表,下次可直接识别") return "negative" else: print("输入无效,请输入1或2") # 原有餐单配置 Order_list = ["McDonalds", "Langos(Rendeles)", "Pizza(Pasa)", "Kinai", "KFC", "Kebab", "Pizza(Forte)", "Mexicoi(Rendeles)", "Sushi", "Asiai Etelek", "Hamburger(Rendeles(nem meki/kfc))", "Pizza(Nem Pasa es nem Forte)", "Burger King"] Stove_list = ["Carbonara", "Brassoi", "Bolognai", "Flekken", "Magvas Rantot Hus", "Curry Csirke", "Teriyaki Teszta", "Vifon Teszta", "Tojasos Nokedli"] Oven_list = ["Rakott Teszta", "Rakott Krumpli", "Rakott Karfiol", "Rakott Kaposzta", "Mutans Hus", "Baconbe Csavart Csirke"] Cold_lst = ["szendvics", "salata", "meleg szendvics(micro)", "Vifon Teszta"] Hungry_Q = "" Hungry = True while True: Hungry_Q = input("Éhes vagy?: ") Hungry_res = process_user_input(Hungry_Q) if Hungry_res == "positive": Hungry = True if Hungry is True: Order = input("Van pénzed rendelni?: ") Order_res = process_user_input(Order) if Order_res == "positive": Energy = input("Van energiád főzni?: ") Energy_res = process_user_input(Energy) if Energy_res == "positive": Mood = input("Van kedved főzni?: ") Mood_res = process_user_input(Mood) if Mood_res == "positive": Oven = input("Működik a sütő?: ") Oven_res = process_user_input(Oven) if Oven_res == "positive": print("A választott étel: " + random.choice(Order_list + Oven_list + Stove_list)) break elif Oven_res == "negative": print("A választott étel: " + random.choice(Order_list + Stove_list)) break elif Mood_res == "negative": Meleg = input("Akarsz meleg ételt enni?: ") Meleg_res = process_user_input(Meleg) if Meleg_res == "positive": print("A választott étel: " + random.choice(Order_list)) break elif Meleg_res == "negative": print("A választott étel: " + random.choice(Cold_lst)) break elif Energy_res == "negative": Meleg = input("Akarsz meleg ételt enni?: ") Meleg_res = process_user_input(Meleg) if Meleg_res == "positive": print("A választott étel: " + random.choice(Order_list)) break elif Meleg_res == "negative": print("A választott étel: " + random.choice(Cold_lst)) break elif Order_res == "negative": Energy = input("Van energiád főzni?: ") Energy_res = process_user_input(Energy) if Energy_res == "positive": Mood = input("Van kedved főzni?: ") Mood_res = process_user_input(Mood) if Mood_res == "positive": Oven = input("Működik a sütő?: ") Oven_res = process_user_input(Oven) if Oven_res == "positive": print("A választott étel: " + random.choice(Oven_list + Stove_list)) break elif Oven_res == "negative": print("A választott étel: " + random.choice(Stove_list)) break elif Mood_res == "negative": print("A választott étel: " + random.choice(Cold_lst)) break elif Energy_res == "negative": print("A választott étel: " + random.choice(Cold_lst)) break elif Hungry_res == "negative": print("Akkor talán nem kéne enned!!!") break
使用说明
- 首次运行会自动在程序同级目录生成
answer_config.json文件,存储所有肯定和否定回答 - 后续遇到
yup/yeah/nah/nope这类未识别回答时,程序会提示你选择对应类型,确认后自动保存,下次启动程序即可直接识别 - 原有的餐单、提问逻辑完全不变,不影响原有使用习惯
内容的提问来源于stack exchange,提问作者ZFV6
相关产品推荐
相关产品推荐

