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

如何将用户输入添加到可复用列表,实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:36:01