From df939b99586a9fc4fe6be9150c661497a8be8da2 Mon Sep 17 00:00:00 2001 From: st2411020112 <839319171@qq.com> Date: Fri, 9 Jan 2026 10:27:07 +0800 Subject: [PATCH] Remove idiom_game_qa.py and idiom_solitaire.py --- idiom_game_qa.py | 256 ------------------- idiom_solitaire.py | 617 --------------------------------------------- 2 files changed, 873 deletions(-) delete mode 100644 idiom_game_qa.py delete mode 100644 idiom_solitaire.py diff --git a/idiom_game_qa.py b/idiom_game_qa.py deleted file mode 100644 index cc05af5..0000000 --- a/idiom_game_qa.py +++ /dev/null @@ -1,256 +0,0 @@ -import streamlit as st -import requests -from pydantic import BaseModel, Field -from dotenv import load_dotenv -import os -import json - -# 加载环境变量 -load_dotenv() - -# 设置API密钥 -DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY", "sk-b04b9134730c4375a5789e2e00978ee0") -API_BASE_URL = "https://api.deepseek.com/v1/chat/completions" - -# 定义Pydantic数据模型 -class IdiomResponse(BaseModel): - idiom: str = Field(..., description="成语") - meaning: str = Field(..., description="成语含义") - pinyin: str = Field(..., description="拼音") - explanation: str = Field(..., description="详细解释") - -class GameState(BaseModel): - current_idiom: str = Field(default="", description="当前成语") - history: list = Field(default_factory=list, description="成语接龙历史") - score: int = Field(default=0, description="得分") - is_game_over: bool = Field(default=False, description="游戏是否结束") - -# 初始化游戏状态 -if "game_state" not in st.session_state: - st.session_state.game_state = GameState() - -# 调用DeepSeek API生成下一个成语 -def get_next_idiom(last_idiom: str) -> IdiomResponse: - headers = { - "Authorization": f"Bearer {DEEPSEEK_API_KEY}", - "Content-Type": "application/json" - } - - # 构建提示词 - prompt = f"请你作为一个成语接龙游戏的助手,根据最后一个成语的最后一个字,生成下一个成语。上一个成语是:{last_idiom}。请严格按照JSON格式返回:{{\"idiom\": \"成语\", \"meaning\": \"简短含义\", \"pinyin\": \"拼音\", \"explanation\": \"详细解释\"}},不要添加任何其他内容。" - - payload = { - "model": "deepseek-chat", - "messages": [ - {"role": "system", "content": "你是一个中文成语专家,精通成语接龙游戏。"}, - {"role": "user", "content": prompt} - ], - "temperature": 0.3, - "response_format": {"type": "json_object"} - } - - response = requests.post(API_BASE_URL, headers=headers, json=payload, timeout=30.0) - response.raise_for_status() - data = response.json() - - # 解析API响应 - content = data["choices"][0]["message"]["content"] - return IdiomResponse.model_validate_json(content) - -# 检查用户输入的成语是否有效 -def validate_user_idiom(user_idiom: str, last_idiom: str) -> bool: - if len(user_idiom) != 4: - return False - - if last_idiom and user_idiom[0] != last_idiom[-1]: - return False - - return True - -# 检测用户输入是否为问题 -def is_question(user_input: str) -> bool: - question_markers = ['?', '?', '吗', '呢', '吧', '什么', '怎么', '为什么', '何时', '何地', '谁', '哪个'] - return any(marker in user_input for marker in question_markers) - -# 处理用户问题 -def handle_question(user_question: str) -> str: - headers = { - "Authorization": f"Bearer {DEEPSEEK_API_KEY}", - "Content-Type": "application/json" - } - - payload = { - "model": "deepseek-chat", - "messages": [ - {"role": "system", "content": "你是一个中文成语专家,同时也是一个知识渊博的助手。你可以进行成语接龙游戏,也可以回答各种问题。"}, - {"role": "user", "content": user_question} - ], - "temperature": 0.7 - } - - response = requests.post(API_BASE_URL, headers=headers, json=payload, timeout=30.0) - response.raise_for_status() - data = response.json() - - return data["choices"][0]["message"]["content"] - -# 重置游戏 -def reset_game(): - st.session_state.game_state = GameState() - -# 主应用界面 -st.title("🎯 成语接龙游戏") -st.write("与AI一起玩成语接龙,看看谁的成语储备更丰富!你也可以随时向AI提问。") - -# 游戏控制区 -col1, col2 = st.columns(2) -with col1: - if st.button("🎮 开始新游戏", type="primary"): - reset_game() - -with col2: - if st.button("📊 查看规则"): - st.info(""" - **成语接龙规则:** - 1. 游戏开始时,AI会先出一个成语 - 2. 玩家需要接一个以AI成语最后一个字开头的四字成语 - 3. AI会继续接玩家的成语 - 4. 如此循环,直到一方无法接出成语 - 5. 每成功接一个成语,得分+1 - - **提问功能:** - - 随时可以向AI提问,输入包含问号或疑问词的句子 - - AI会回答你的问题,然后继续游戏 - """) - -# 游戏状态显示 -st.markdown("---") - -# 初始状态:AI先出成语 -if not st.session_state.game_state.current_idiom and not st.session_state.game_state.is_game_over: - with st.spinner("🤖 AI正在思考第一个成语..."): - try: - # 使用一个默认的起始成语让AI开始 - initial_idiom = get_next_idiom("开门见山") - st.session_state.game_state.current_idiom = initial_idiom.idiom - st.session_state.game_state.history.append({ - "role": "ai", - "type": "idiom", - "idiom": initial_idiom.idiom, - "meaning": initial_idiom.meaning, - "pinyin": initial_idiom.pinyin, - "explanation": initial_idiom.explanation - }) - except Exception as e: - st.error(f"🤖 AI出错了:{str(e)}") - st.session_state.game_state.is_game_over = True - -# 游戏进行中 -if st.session_state.game_state.current_idiom and not st.session_state.game_state.is_game_over: - # 显示当前成语 - current = st.session_state.game_state.history[-1] - if current["type"] == "idiom": - st.markdown(f"\n**🤖 AI 出的成语:** {current['idiom']}") - st.caption(f"拼音:{current['pinyin']} | 含义:{current['meaning']}") - - with st.expander("查看详细解释"): - st.write(current['explanation']) - elif current["type"] == "answer": - st.markdown(f"\n**🤖 AI 的回答:** {current['content']}") - - # 用户输入区 - user_input = st.text_input( - f"\n请接一个以'**{st.session_state.game_state.current_idiom[-1]}**'开头的四字成语,或向AI提问:", - placeholder="例如:xxx 或 你好吗?", - key="user_idiom_input" - ) - - # 提交按钮 - if st.button("✅ 提交", key="submit_btn"): - # 检测是否为问题 - if is_question(user_input): - # 处理问题 - with st.spinner("🤖 AI正在思考..."): - try: - answer = handle_question(user_input) - st.session_state.game_state.history.append({ - "role": "user", - "type": "question", - "content": user_input - }) - st.session_state.game_state.history.append({ - "role": "ai", - "type": "answer", - "content": answer - }) - st.rerun() - except Exception as e: - st.error(f"🤖 AI出错了:{str(e)}") - else: - # 处理成语接龙 - if validate_user_idiom(user_input, st.session_state.game_state.current_idiom): - # 验证通过,记录用户的成语 - st.session_state.game_state.history.append({ - "role": "user", - "type": "idiom", - "idiom": user_input, - "meaning": "", - "pinyin": "" - }) - st.session_state.game_state.score += 1 - - # AI 接成语 - with st.spinner("🤖 AI正在思考..."): - try: - next_idiom = get_next_idiom(user_input) - st.session_state.game_state.current_idiom = next_idiom.idiom - st.session_state.game_state.history.append({ - "role": "ai", - "type": "idiom", - "idiom": next_idiom.idiom, - "meaning": next_idiom.meaning, - "pinyin": next_idiom.pinyin, - "explanation": next_idiom.explanation - }) - st.rerun() - except Exception as e: - st.success("🎉 AI接不上来,你赢了!") - st.session_state.game_state.is_game_over = True - else: - st.error("❌ 无效的成语!请确保是四字成语且第一个字与上一个成语的最后一个字相同。") - -# 游戏结束 -if st.session_state.game_state.is_game_over: - st.markdown("\n---") - st.success(f"🎉 游戏结束!你的得分:{st.session_state.game_state.score}") - - # 显示历史记录 - if st.session_state.game_state.history: - st.markdown("\n📝 **游戏历史:**") - for i, item in enumerate(st.session_state.game_state.history): - role = "🤖 AI" if item["role"] == "ai" else "👤 你" - if item["type"] == "idiom": - st.write(f"{i+1}. {role}: {item['idiom']}") - else: - st.write(f"{i+1}. {role}: {item['content']}") - -# 侧边栏信息 -with st.sidebar: - st.markdown("## 📊 游戏统计") - st.write(f"**当前得分:** {st.session_state.game_state.score}") - st.write(f"**接龙次数:** {len([item for item in st.session_state.game_state.history if item.get('type') == 'idiom'])}") - - if st.session_state.game_state.history: - st.markdown("\n## 📖 最近互动") - for i, item in enumerate(reversed(st.session_state.game_state.history[-5:])): - role = "🤖" if item["role"] == "ai" else "👤" - if item["type"] == "idiom": - st.write(f"{role} {item['idiom']}") - else: - st.write(f"{role} {item['content'][:30]}...") - - st.markdown("\n## 📌 提示") - st.write("- 确保输入的是标准四字成语") - st.write("- 注意汉字的正确写法") - st.write("- 可以使用同音字进行接龙") - st.write("- 随时可以向AI提问") \ No newline at end of file diff --git a/idiom_solitaire.py b/idiom_solitaire.py deleted file mode 100644 index 89fb5d8..0000000 --- a/idiom_solitaire.py +++ /dev/null @@ -1,617 +0,0 @@ -import streamlit as st -import requests -import random -import json -import re - -# 配置 -DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions" -# 尝试从secrets获取API密钥,如果失败则使用默认值 -try: - DEEPSEEK_API_KEY = st.secrets.get("deepseek_api_key", "your_api_key_here") -except Exception: - DEEPSEEK_API_KEY = "your_api_key_here" - -# 本地成语库(仅用于生成题目) -IDIOMS = { - "一心一意": {"pinyin": "yī xīn yī yì", "meaning": "形容做事专心一意,没有其他念头"}, - "意气风发": {"pinyin": "yì qì fēng fā", "meaning": "形容精神振奋,气概豪迈"}, - "发扬光大": {"pinyin": "fā yáng guāng dà", "meaning": "使事业、传统等更加发展壮大"}, - "大材小用": {"pinyin": "dà cái xiǎo yòng", "meaning": "比喻使用不当,浪费人才"}, - "用兵如神": {"pinyin": "yòng bīng rú shén", "meaning": "形容指挥军队作战的才能极高"}, - "神采飞扬": {"pinyin": "shén cǎi fēi yáng", "meaning": "形容精神饱满,容光焕发"}, - "扬长避短": {"pinyin": "yáng cháng bì duǎn", "meaning": "发扬长处,避开短处"}, - "短兵相接": {"pinyin": "duǎn bīng xiāng jiē", "meaning": "比喻面对面地进行激烈的斗争"}, - "接二连三": {"pinyin": "jiē èr lián sān", "meaning": "一个接着一个,接连不断"}, - "三心二意": {"pinyin": "sān xīn èr yì", "meaning": "形容犹豫不决,意志不坚定"}, - "意气用事": {"pinyin": "yì qì yòng shì", "meaning": "凭感情冲动办事,缺乏理智"}, - "事在人为": {"pinyin": "shì zài rén wéi", "meaning": "事情的成功全在于人的努力"}, - "为人师表": {"pinyin": "wéi rén shī biǎo", "meaning": "指在人品学问方面作别人学习的榜样"}, - "表里如一": {"pinyin": "biǎo lǐ rú yī", "meaning": "形容言行和思想完全一致"}, - "一如既往": {"pinyin": "yī rú jì wǎng", "meaning": "指态度没有变化,完全像从前一样"}, - "往返徒劳": {"pinyin": "wǎng fǎn tú láo", "meaning": "来回白跑,没有成效"}, - "劳民伤财": {"pinyin": "láo mín shāng cái", "meaning": "既使人民劳苦,又耗费钱财"}, - "财大气粗": {"pinyin": "cái dà qì cū", "meaning": "指人仗着钱财多而气势凌人"}, - "粗枝大叶": {"pinyin": "cū zhī dà yè", "meaning": "比喻工作粗糙,不认真细致"}, - "叶公好龙": {"pinyin": "yè gōng hào lóng", "meaning": "比喻表面上爱好某事物,实际上并不真爱好"}, - "龙马精神": {"pinyin": "lóng mǎ jīng shén", "meaning": "比喻人精神旺盛"}, - "神采奕奕": {"pinyin": "shén cǎi yì yì", "meaning": "形容精神饱满,容光焕发"}, - "奕奕生辉": {"pinyin": "yì yì shēng huī", "meaning": "形容光彩闪耀的样子"}, - "辉煌腾达": {"pinyin": "huī huáng téng dá", "meaning": "形容事业或成就非常辉煌"}, - "达官贵人": {"pinyin": "dá guān guì rén", "meaning": "指地位高的官吏和显赫的人物"}, - "人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"}, - "海阔天空": {"pinyin": "hǎi kuò tiān kōng", "meaning": "比喻言谈议论等漫无边际,没有中心"}, - "空穴来风": {"pinyin": "kōng xué lái fēng", "meaning": "比喻消息和谣言的传播不是完全没有原因的"}, - "风调雨顺": {"pinyin": "fēng tiáo yǔ shùn", "meaning": "形容风雨适合农时"}, - "顺理成章": {"pinyin": "shùn lǐ chéng zhāng", "meaning": "指写文章或做事情顺着条理就能做好"}, - "章句小儒": {"pinyin": "zhāng jù xiǎo rú", "meaning": "指不能通达大义而拘泥于辨析章句的儒生"}, - "儒雅风流": {"pinyin": "rú yǎ fēng liú", "meaning": "形容人学识渊博,举止潇洒"}, - "流芳百世": {"pinyin": "liú fāng bǎi shì", "meaning": "好的名声永远流传下去"}, - "世代相传": {"pinyin": "shì dài xiāng chuán", "meaning": "祖祖辈辈传下来"}, - "传宗接代": {"pinyin": "chuán zōng jiē dài", "meaning": "指生儿育女,延续后代"}, - "代人受过": {"pinyin": "dài rén shòu guò", "meaning": "替别人承担过错的责任"}, - "过目不忘": {"pinyin": "guò mù bù wàng", "meaning": "看过就不忘记,形容记忆力非常强"}, - "忘乎所以": {"pinyin": "wàng hū suǒ yǐ", "meaning": "指因过分兴奋或得意而忘了应有的举止"}, - "以卵击石": {"pinyin": "yǐ luǎn jī shí", "meaning": "比喻不自量力,自取灭亡"}, - "石沉大海": {"pinyin": "shí chén dà hǎi", "meaning": "比喻从此没有消息"}, - "海纳百川": {"pinyin": "hǎi nà bǎi chuān", "meaning": "比喻包容的东西非常广泛,而且数量很大"}, - "川流不息": {"pinyin": "chuān liú bù xī", "meaning": "形容行人、车马等像水流一样连续不断"}, - "息事宁人": {"pinyin": "xī shì níng rén", "meaning": "指调解纠纷,使事情平息下来,消除事端,使人们平安相处"}, - "人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"}, - "海底捞月": {"pinyin": "hǎi dǐ lāo yuè", "meaning": "比喻去做根本做不到的事,只能白费力气"}, - "月明星稀": {"pinyin": "yuè míng xīng xī", "meaning": "月亮明亮时,星星就显得稀疏了"}, - "稀奇古怪": {"pinyin": "xī qí gǔ guài", "meaning": "指很少见,很奇异,不同一般"}, - "怪诞不经": {"pinyin": "guài dàn bù jīng", "meaning": "指言语奇怪荒唐,不合常理"}, - "经久不息": {"pinyin": "jīng jiǔ bù xī", "meaning": "经过长时间停不下来"}, - "息息相关": {"pinyin": "xī xī xiāng guān", "meaning": "形容彼此的关系非常密切"}, - "关门大吉": {"pinyin": "guān mén dà jí", "meaning": "指商店倒闭或企业破产停业"}, - "吉祥如意": {"pinyin": "jí xiáng rú yì", "meaning": "多用祝颂他人美满称心"}, - "意气相投": {"pinyin": "yì qì xiāng tóu", "meaning": "指志趣和性格相同的人,彼此投合"}, - "投桃报李": {"pinyin": "tóu táo bào lǐ", "meaning": "比喻友好往来或互相赠送东西"}, - "李代桃僵": {"pinyin": "lǐ dài táo jiāng", "meaning": "比喻互相顶替或代人受过"}, - "僵李代桃": {"pinyin": "jiāng lǐ dài táo", "meaning": "比喻代人受罪责或以此代彼"}, - "桃红柳绿": {"pinyin": "táo hóng liǔ lǜ", "meaning": "形容花木繁盛、色彩鲜艳的春景"}, - "绿水青山": {"pinyin": "lǜ shuǐ qīng shān", "meaning": "泛称美好山河"}, - "山明水秀": {"pinyin": "shān míng shuǐ xiù", "meaning": "形容风景优美"}, - "秀色可餐": {"pinyin": "xiù sè kě cān", "meaning": "形容女子姿容非常美丽或景物非常优美"}, - "餐风露宿": {"pinyin": "cān fēng lù sù", "meaning": "形容旅途或野外工作的辛苦"}, - "宿弊一清": {"pinyin": "sù bì yī qīng", "meaning": "多年的弊病一下就肃清了"}, - "清夜扪心": {"pinyin": "qīng yè mén xīn", "meaning": "指深夜不眠,进行反省"}, - "心花怒放": {"pinyin": "xīn huā nù fàng", "meaning": "心里高兴得像花儿盛开一样,形容极其高兴"}, - "放虎归山": {"pinyin": "fàng hǔ guī shān", "meaning": "比喻把坏人放回老巢,留下祸根"}, - "山高水长": {"pinyin": "shān gāo shuǐ cháng", "meaning": "原比喻人的风范或声誉像高山一样永远存在,后比喻恩德深厚"}, - "长生不老": {"pinyin": "cháng shēng bù lǎo", "meaning": "指生命不老不死永生不灭"}, - "老当益壮": {"pinyin": "lǎo dāng yì zhuàng", "meaning": "年纪虽老而志气更旺盛,干劲更足"}, - "壮志凌云": {"pinyin": "zhuàng zhì líng yún", "meaning": "形容理想宏伟远大"}, - "云开见日": {"pinyin": "yún kāi jiàn rì", "meaning": "比喻黑暗已经过去,光明已经到来"}, - "日新月异": {"pinyin": "rì xīn yuè yì", "meaning": "每天都在更新,每月都有变化,指发展或进步迅速,不断出现新事物、新气象"}, - "异想天开": {"pinyin": "yì xiǎng tiān kāi", "meaning": "比喻荒唐离奇,想象着暂时无法实现的事"}, - "开门见山": {"pinyin": "kāi mén jiàn shān", "meaning": "比喻说话或写文章直截了当谈本题,不拐弯抹角"}, - "山高路远": {"pinyin": "shān gāo lù yuǎn", "meaning": "形容路途艰难而遥远"}, - "远见卓识": {"pinyin": "yuǎn jiàn zhuó shí", "meaning": "有远大的眼光和高明的见解"}, - "识文断字": {"pinyin": "shí wén duàn zì", "meaning": "指识字,指有一点文化知识"}, - "字斟句酌": {"pinyin": "zì zhēn jù zhuó", "meaning": "指写文章或说话时慎重细致,一字一句地推敲琢磨"}, - "酌古御今": {"pinyin": "zhuó gǔ yù jīn", "meaning": "指择古之善者以为治今的借鉴"}, - "今非昔比": {"pinyin": "jīn fēi xī bǐ", "meaning": "现在不是过去能比得上的,多指形势、自然面貌等发生了巨大的变化"}, - "比翼双飞": {"pinyin": "bǐ yì shuāng fēi", "meaning": "比喻夫妻情投意合,在事业上并肩前进"}, - "飞黄腾达": {"pinyin": "fēi huáng téng dá", "meaning": "形容骏马奔腾飞驰,比喻骤然得志,官职升得很快"}, - "达官贵人": {"pinyin": "dá guān guì rén", "meaning": "指地位高的官吏和显赫的人物"}, - "人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"}, - "海枯石烂": {"pinyin": "hǎi kū shí làn", "meaning": "海水干涸、石头腐烂,形容历时久远,比喻坚定的意志永远不变"}, - "烂熟于心": {"pinyin": "làn shú yú xīn", "meaning": "形容对某件事情或者事物的发展情况在心里记得很清楚"}, - "心灵手巧": {"pinyin": "xīn líng shǒu qiǎo", "meaning": "心思灵敏,手艺巧妙"}, - "巧夺天工": {"pinyin": "qiǎo duó tiān gōng", "meaning": "人工的精巧胜过天然,形容技艺十分巧妙"}, - "工欲善其事,必先利其器": {"pinyin": "gōng yù shàn qí shì,bì xiān lì qí qì", "meaning": "比喻要做好一件事,准备工作非常重要"}, - "器宇轩昂": {"pinyin": "qì yǔ xuān áng", "meaning": "形容人精力充沛,风度不凡"}, - "昂首挺胸": {"pinyin": "áng shǒu tǐng xiōng", "meaning": "抬起头,挺起胸膛,形容斗志高,士气旺"}, - "胸有成竹": {"pinyin": "xiōng yǒu chéng zhú", "meaning": "原指画竹子要在心里有一幅竹子的形象,后比喻在做事之前已经拿定主意"}, - "竹报平安": {"pinyin": "zhú bào píng ān", "meaning": "比喻平安家信"}, - "安步当车": {"pinyin": "ān bù dàng chē", "meaning": "以从容的步行代替乘车,形容轻松缓慢地行走"}, - "车水马龙": {"pinyin": "chē shuǐ mǎ lóng", "meaning": "形容来往车马很多,连续不断的热闹情景"}, - "龙飞凤舞": {"pinyin": "lóng fēi fèng wǔ", "meaning": "原形容山势的蜿蜒雄壮,后也形容书法笔势有力,灵活舒展"}, - "舞文弄墨": {"pinyin": "wǔ wén nòng mò", "meaning": "故意玩弄文笔,原指曲引法律条文作弊,后常指玩弄文字技巧"}, - "墨守成规": {"pinyin": "mò shǒu chéng guī", "meaning": "指思想保守,守着老规矩不肯改变"}, - "规行矩步": {"pinyin": "guī xíng jǔ bù", "meaning": "指严格按照规矩办事,毫不苟且"}, - "步步为营": {"pinyin": "bù bù wéi yíng", "meaning": "军队每向前推进一步就设下一首营垒,形容防守严密,行动谨慎"}, - "营私舞弊": {"pinyin": "yíng sī wǔ bì", "meaning": "因图谋私利而玩弄欺骗手段做犯法的事"}, - "弊绝风清": {"pinyin": "bì jué fēng qīng", "meaning": "贪污、舞弊的事情没有了,形容坏事绝迹,社会风气良好"}, - "清风明月": {"pinyin": "qīng fēng míng yuè", "meaning": "只与清风、明月为伴,比喻不随便结交朋友,也比喻清闲无事"}, - "月白风清": {"pinyin": "yuè bái fēng qīng", "meaning": "形容幽静美好的夜晚"}, - "清风徐来": {"pinyin": "qīng fēng xú lái", "meaning": "清风缓缓地吹来"}, - "来日方长": {"pinyin": "lái rì fāng cháng", "meaning": "未来的日子还很长,表示事有可为,或劝人不必急于做某事"}, - "长驱直入": {"pinyin": "cháng qū zhí rù", "meaning": "迅速向很远的目的地前进,形容进军迅猛顺利"}, - "入木三分": {"pinyin": "rù mù sān fēn", "meaning": "形容书法极有笔力,现多比喻分析问题很深刻"}, - "分秒必争": {"pinyin": "fēn miǎo bì zhēng", "meaning": "一分一秒也一定要争取,形容抓紧时间"}, - "争先恐后": {"pinyin": "zhēng xiān kǒng hòu", "meaning": "抢着向前,唯恐落后"}, - "后来居上": {"pinyin": "hòu lái jū shàng", "meaning": "后来的超过先前的,用以称赞后起之秀超过前辈"}, - "上行下效": {"pinyin": "shàng xíng xià xiào", "meaning": "上面的人怎么做,下面的人就跟着怎么干"}, - "效颦学步": {"pinyin": "xiào pín xué bù", "meaning": "比喻盲目模仿,效果极坏"}, - "步履维艰": {"pinyin": "bù lǚ wéi jiān", "meaning": "指行走困难行动不方便"}, - "艰苦奋斗": {"pinyin": "jiān kǔ fèn dòu", "meaning": "不怕艰难困苦,坚持英勇斗争"}, - "斗志昂扬": {"pinyin": "dòu zhì áng yáng", "meaning": "斗争的意志旺盛"}, - "扬长而去": {"pinyin": "yáng cháng ér qù", "meaning": "大模大样地径自走了"}, - "去伪存真": {"pinyin": "qù wěi cún zhēn", "meaning": "除掉虚假的,留下真实的"}, - "真相大白": {"pinyin": "zhēn xiàng dà bái", "meaning": "真实情况完全弄明白了"}, - "白头偕老": {"pinyin": "bái tóu xié lǎo", "meaning": "夫妻相亲相爱,一直到老"}, - "老气横秋": {"pinyin": "lǎo qì héng qiū", "meaning": "形容老练而自负的神态,现形容自高自大,摆老资格,也形容缺乏朝气"}, - "秋高气爽": {"pinyin": "qiū gāo qì shuǎng", "meaning": "形容秋季晴空万里,天气清爽"}, - "爽心悦目": {"pinyin": "shuǎng xīn yuè mù", "meaning": "指景色美丽,令人心情愉快"}, - "目瞪口呆": {"pinyin": "mù dèng kǒu dāi", "meaning": "形容因吃惊或害怕而发愣的样子"}, - "呆若木鸡": {"pinyin": "dāi ruò mù jī", "meaning": "形容因恐惧或惊异而发愣的样子"}, - "鸡飞狗跳": {"pinyin": "jī fēi gǒu tiào", "meaning": "把鸡吓得飞起来,把狗吓得到处乱跳,形容惊慌得乱成一团"}, - "跳梁小丑": {"pinyin": "tiào liáng xiǎo chǒu", "meaning": "比喻猖狂捣乱而成不了大气候的坏人"}, - "丑态百出": {"pinyin": "chǒu tài bǎi chū", "meaning": "各种丑恶的样子都表现出来了"}, - "出类拔萃": {"pinyin": "chū lèi bá cuì", "meaning": "超出同类之上,多指人的品德才能"}, - "萃萃学子": {"pinyin": "cuì cuì xué zǐ", "meaning": "众多的学生"}, - "子虚乌有": {"pinyin": "zǐ xū wū yǒu", "meaning": "指假设的、不存在的、不真实的事情"}, - "有目共睹": {"pinyin": "yǒu mù gòng dǔ", "meaning": "指非常明显,谁都看得见"}, - "睹物思人": {"pinyin": "dǔ wù sī rén", "meaning": "看见死去或离别的人留下的东西就想起了这个人"}, - "人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"}, - "海阔天空": {"pinyin": "hǎi kuò tiān kōng", "meaning": "比喻言谈议论等漫无边际,没有中心"}, - "空穴来风": {"pinyin": "kōng xué lái fēng", "meaning": "比喻消息和谣言的传播不是完全没有原因的"}, - "风言风语": {"pinyin": "fēng yán fēng yǔ", "meaning": "没有根据的、不怀好意的、带有讥讽的话"}, - "语重心长": {"pinyin": "yǔ zhòng xīn cháng", "meaning": "话深刻有力,情意深长"}, - "长话短说": {"pinyin": "cháng huà duǎn shuō", "meaning": "把要用很多话才能说完的事用简短的话说完"}, - "说三道四": {"pinyin": "shuō sān dào sì", "meaning": "形容不负责任地胡乱议论"}, - "四面楚歌": {"pinyin": "sì miàn chǔ gē", "meaning": "比喻陷入四面受敌、孤立无援的境地"}, - "歌舞升平": {"pinyin": "gē wǔ shēng píng", "meaning": "边歌边舞,庆祝太平,有粉饰太平的意思"}, - "平心静气": {"pinyin": "píng xīn jìng qì", "meaning": "心情平和,态度冷静"}, - "气宇轩昂": {"pinyin": "qì yǔ xuān áng", "meaning": "形容人精力充沛,风度不凡"}, - "昂首阔步": {"pinyin": "áng shǒu kuò bù", "meaning": "抬起头迈开大步向前,形容精神抖擞,意气风发"}, - "步履蹒跚": {"pinyin": "bù lǚ pán shān", "meaning": "走路一瘸一拐的样子,形容走路腿脚不方便,歪歪倒倒的样子"}, - "跚跚来迟": {"pinyin": "shān shān lái chí", "meaning": "形容慢腾腾地来晚了"}, - "迟疑不决": {"pinyin": "chí yí bù jué", "meaning": "形容拿不定主意"}, - "决一雌雄": {"pinyin": "jué yī cí xióng", "meaning": "指较量一下胜败高低"}, - "雄才大略": {"pinyin": "xióng cái dà lüè", "meaning": "非常杰出的才智和谋略"}, - "略知一二": {"pinyin": "lüè zhī yī èr", "meaning": "略微知道一点"}, - "二话不说": {"pinyin": "èr huà bù shuō", "meaning": "不说任何别的话,指立即行动"}, - "说一不二": {"pinyin": "shuō yī bù èr", "meaning": "说怎么样就怎么样,形容说话算数"}, - "二龙戏珠": {"pinyin": "èr lóng xì zhū", "meaning": "两条龙相对,戏玩着一颗宝珠"}, - "珠光宝气": {"pinyin": "zhū guāng bǎo qì", "meaning": "形容妇女服饰华贵富丽,闪耀着珍宝的光色"}, - "气吞山河": {"pinyin": "qì tūn shān hé", "meaning": "气势可以吞没山河,形容气魄很大"}, - "河清海晏": {"pinyin": "hé qīng hǎi yàn", "meaning": "黄河水清,大海平静,形容天下太平"}, - "晏然自若": {"pinyin": "yàn rán zì ruò", "meaning": "形容在紧张状态下沉静如常"}, - "若无其事": {"pinyin": "ruò wú qí shì", "meaning": "好像没有那么回事似的,形容不动声色或漠不关心"}, - "事半功倍": {"pinyin": "shì bàn gōng bèi", "meaning": "指做事得法,因而费力小,收效大"}, - "倍道兼行": {"pinyin": "bèi dào jiān xíng", "meaning": "每天加倍行进,一天走两天的路程,形容加速急行"}, - "行云流水": {"pinyin": "xíng yún liú shuǐ", "meaning": "形容文章自然不受约束,就像漂浮着的云和流动着的水一样"}, - "水落石出": {"pinyin": "shuǐ luò shí chū", "meaning": "水落下去,水底的石头就露出来,比喻事情的真相完全显露出来"}, - "出人头地": {"pinyin": "chū rén tóu dì", "meaning": "指高人一等,形容德才超众或成就突出"}, - "地大物博": {"pinyin": "dì dà wù bó", "meaning": "指国家疆土辽阔,资源丰富"}, - "博古通今": {"pinyin": "bó gǔ tōng jīn", "meaning": "对古代的事知道得很多,并且通晓现代的事情,形容知识丰富"}, - "今不如昔": {"pinyin": "jīn bù rú xī", "meaning": "现在不如过去,多表示对世事的感叹"}, - "昔不如今": {"pinyin": "xī bù rú jīn", "meaning": "现在比过去好"}, - "今非昔比": {"pinyin": "jīn fēi xī bǐ", "meaning": "现在不是过去能比得上的,多指形势、自然面貌等发生了巨大的变化"}, - "比比皆是": {"pinyin": "bǐ bǐ jiē shì", "meaning": "到处都是,形容极其常见"}, - "是非曲直": {"pinyin": "shì fēi qǔ zhí", "meaning": "正确还是不正确,有理还是无理"}, - "直截了当": {"pinyin": "zhí jié liǎo dàng", "meaning": "形容说话做事爽快,不绕弯子"}, - "当机立断": {"pinyin": "dāng jī lì duàn", "meaning": "在紧要时刻立即做出决断"}, - "断章取义": {"pinyin": "duàn zhāng qǔ yì", "meaning": "指不顾全篇文章或谈话的内容,孤立地取其中的一段或一句的意思"}, - "义不容辞": {"pinyin": "yì bù róng cí", "meaning": "道义上不允许推辞"}, - "辞旧迎新": {"pinyin": "cí jiù yíng xīn", "meaning": "告别旧的一年,迎接新的一年的到来"}, - "新陈代谢": {"pinyin": "xīn chén dài xiè", "meaning": "指生物体不断用新物质代替旧物质的过程"}, - "谢天谢地": {"pinyin": "xiè tiān xiè dì", "meaning": "表示目的达到或困难解除后满意轻松的心情"}, - "地老天荒": {"pinyin": "dì lǎo tiān huāng", "meaning": "指经历的时间极久"}, - "荒诞不经": {"pinyin": "huāng dàn bù jīng", "meaning": "形容言论荒谬,不合情理"}, - "经年累月": {"pinyin": "jīng nián lěi yuè", "meaning": "形容经历很长的时间"}, - "月朗风清": {"pinyin": "yuè lǎng fēng qīng", "meaning": "月光明朗,微风清爽,形容宁静美好的月夜"}, - "清风明月": {"pinyin": "qīng fēng míng yuè", "meaning": "只与清风、明月为伴,比喻不随便结交朋友,也比喻清闲无事"}, - "月黑风高": {"pinyin": "yuè hēi fēng gāo", "meaning": "比喻没有月光风也很大的夜晚,比喻险恶的环境"}, - "高风亮节": {"pinyin": "gāo fēng liàng jié", "meaning": "形容道德和行为都很高尚"}, - "节衣缩食": {"pinyin": "jié yī suō shí", "meaning": "省吃省穿,形容节约"}, - "食不甘味": {"pinyin": "shí bù gān wèi", "meaning": "吃东西都觉得没有味道,形容心里有事,吃东西也不香"}, - "味同嚼蜡": {"pinyin": "wèi tóng jiáo là", "meaning": "像吃蜡一样,没有一点儿味,形容语言或文章枯燥无味"}, - "蜡炬成灰": {"pinyin": "là jù chéng huī", "meaning": "蜡烛烧成了灰,比喻自己为不能相聚而痛苦,无尽无休,仿佛蜡泪直到蜡烛烧成了灰方始流尽一样"}, - "灰心丧气": {"pinyin": "huī xīn sàng qì", "meaning": "形容因失败或不顺利而失去信心,意志消沉"}, - "气象万千": {"pinyin": "qì xiàng wàn qiān", "meaning": "形容景象或事物壮丽而多变化"}, - "千变万化": {"pinyin": "qiān biàn wàn huà", "meaning": "形容变化极多"}, - "化为乌有": {"pinyin": "huà wéi wū yǒu", "meaning": "变得什么都没有,指全部消失或完全落空"}, - "有备无患": {"pinyin": "yǒu bèi wú huàn", "meaning": "事先有准备,就可以避免祸患"}, - "患得患失": {"pinyin": "huàn dé huàn shī", "meaning": "担心得不到,得到了又担心失掉,形容对个人得失看得很重"}, - "失之交臂": {"pinyin": "shī zhī jiāo bì", "meaning": "形容当面错过"}, - "臂有四肘": {"pinyin": "bì yǒu sì zhǒu", "meaning": "比喻不凡的相貌"}, - "肘腋之患": {"pinyin": "zhǒu yè zhī huàn", "meaning": "比喻极近的地方的祸患"}, - "患难与共": {"pinyin": "huàn nàn yǔ gòng", "meaning": "共同承担危险和困难,指彼此关系密切,利害一致"}, - "共商国是": {"pinyin": "gòng shāng guó shì", "meaning": "共同商量国家的政策和方针"}, - "是非分明": {"pinyin": "shì fēi fēn míng", "meaning": "正确与错误非常分明"}, - "明目张胆": {"pinyin": "míng mù zhāng dǎn", "meaning": "原指有胆识,敢做敢为,后形容公开放肆地干坏事"}, - "胆大包天": {"pinyin": "dǎn dà bāo tiān", "meaning": "形容胆子极大"}, - "天长地久": {"pinyin": "tiān cháng dì jiǔ", "meaning": "跟天和地存在的时间那样长,形容时间悠久,也形容永远不变(多指爱情)"}, - "久别重逢": {"pinyin": "jiǔ bié chóng féng", "meaning": "指朋友或亲人在长久分别之后再次见面"}, - "逢凶化吉": {"pinyin": "féng xiōng huà jí", "meaning": "遇到凶险转化为吉祥、顺利,这是带有迷信的说法"}, - "吉祥如意": {"pinyin": "jí xiáng rú yì", "meaning": "多用祝颂他人美满称心"}, - "意气风发": {"pinyin": "yì qì fēng fā", "meaning": "形容精神振奋,气概豪迈"}, - "发扬光大": {"pinyin": "fā yáng guāng dà", "meaning": "使事业、传统等更加发展壮大"}, - "大智若愚": {"pinyin": "dà zhì ruò yú", "meaning": "某些才智出众的人,看来好像愚笨,不露锋芒"}, - "愚公移山": {"pinyin": "yú gōng yí shān", "meaning": "比喻坚持不懈地改造自然和坚定不移地进行斗争"}, - "山清水秀": {"pinyin": "shān qīng shuǐ xiù", "meaning": "形容风景优美"}, - "秀外慧中": {"pinyin": "xiù wài huì zhōng", "meaning": "外表秀丽,内心聪明"}, - "中流砥柱": {"pinyin": "zhōng liú dǐ zhù", "meaning": "比喻坚强独立的人能在动荡艰难的环境中起支柱作用"}, - "柱石之坚": {"pinyin": "zhù shí zhī jiān", "meaning": "像柱石一样坚硬,比喻大臣坚强可靠,能担负国家重任"}, - "坚如磐石": {"pinyin": "jiān rú pán shí", "meaning": "像大石头一样坚固,比喻不可动摇"}, - "石破天惊": {"pinyin": "shí pò tiān jīng", "meaning": "原形容箜篌的声音,忽而高亢,忽而低沉,出人意外,有难以形容的奇境,后多比喻文章议论新奇惊人"}, - "惊天动地": {"pinyin": "jīng tiān dòng dì", "meaning": "使天地惊动,形容某个事件的声势或意义极大"}, - "地动山摇": {"pinyin": "dì dòng shān yáo", "meaning": "地震发生时大地颤动,山河摇摆,亦形容声势浩大或斗争激烈"}, - "摇头晃脑": {"pinyin": "yáo tóu huàng nǎo", "meaning": "形容自己感觉很有乐趣或自己认为很不差的样子"}, - "脑满肠肥": {"pinyin": "nǎo mǎn cháng féi", "meaning": "形容饱食终日的剥削者大腹便便,肥胖丑陋的形象"}, - "肥头大耳": {"pinyin": "féi tóu dà ěr", "meaning": "一个肥胖的脑袋,两只大耳朵,形容体态肥胖,有时指小孩可爱"}, - "耳熟能详": {"pinyin": "ěr shú néng详", "meaning": "指听得多了,能够说得很清楚、很详细"}, - "详略得当": {"pinyin": "xiáng lüè dé dàng", "meaning": "指应当详细和应当简略的地方都处理得很妥当"}, - "当务之急": {"pinyin": "dāng wù zhī jí", "meaning": "当前任务中最急切要办的事"}, - "急功近利": {"pinyin": "jí gōng jìn lì", "meaning": "急于求成,贪图眼前的成效和利益"}, - "利欲熏心": {"pinyin": "lì yù xūn xīn", "meaning": "贪财图利的欲望迷住了心窍"}, - "心灰意冷": {"pinyin": "xīn huī yì lěng", "meaning": "灰心失望,意志消沉"}, - "冷若冰霜": {"pinyin": "lěng ruò bīng shuāng", "meaning": "冷得象冰霜一样,比喻待人接物毫无感情,象冰霜一样冷,也比喻态度严正,不可接近"}, - "霜露之病": {"pinyin": "shuāng lù zhī bìng", "meaning": "因感受风寒而引起的病"}, - "病入膏肓": {"pinyin": "bìng rù gāo huāng", "meaning": "形容病情十分严重,无法医治,比喻事情到了无法挽救的地步"}, - "荒诞不经": {"pinyin": "huāng dàn bù jīng", "meaning": "形容言论荒谬,不合情理"}, - "经久不息": {"pinyin": "jīng jiǔ bù xī", "meaning": "经过长时间停不下来"}, - "息事宁人": {"pinyin": "xī shì níng rén", "meaning": "指调解纠纷,使事情平息下来,消除事端,使人们平安相处"}, - "人山人海": {"pinyin": "rén shān rén hǎi", "meaning": "形容人聚集得非常多"}, - "海纳百川": {"pinyin": "hǎi nà bǎi chuān", "meaning": "比喻包容的东西非常广泛,而且数量很大"}, - "川流不息": {"pinyin": "chuān liú bù xī", "meaning": "形容行人、车马等像水流一样连续不断"}, - "息息相关": {"pinyin": "xī xī xiāng guān", "meaning": "形容彼此的关系非常密切"}, - "关门大吉": {"pinyin": "guān mén dà jí", "meaning": "指商店倒闭或企业破产停业"}, - "吉祥如意": {"pinyin": "jí xiáng rú yì", "meaning": "多用祝颂他人美满称心"}, - "意气风发": {"pinyin": "yì qì fēng fā", "meaning": "形容精神振奋,气概豪迈"}, - "发扬光大": {"pinyin": "fā yáng guāng dà", "meaning": "使事业、传统等更加发展壮大"} -} - -# 谐音字典(简化版,仅包含部分常见谐音) -HOMOPHONES = { - "一": ["衣", "医", "依", "伊", "仪", "宜", "贻", "移", "遗", "疑", "沂", "颐", "彝", "乙", "已", "以", "亿", "义", "忆", "艺", "议", "亦", "易", "译", "异", "翼", "翌", "绎", "轶", "役", "疫", "诣", "谊", "逸", "毅", "熠", "镒", "驿", "翳", "臆", "肄", "逸"], - "人": ["仁", "壬", "任", "忍", "韧", "认", "刃", "纫", "仞", "荏", "稔", "妊", "饪", "衽"], - "大": ["达", "妲", "怛", "炟", "笪", "靼", "打", "瘩", "迖", "跶", "搭", "嗒", "褡", "耷", "大", "汏", "釱"], - "天": ["填", "田", "甜", "恬", "腆", "舔", "阗", "钿", "畋", "佃", "畑", "沺", "忝", "殄", "瑱", "璅"], - "地": ["第", "弟", "帝", "谛", "蒂", "缔", "娣", "睇", "碲", "递", "第", "棣", "睇", "娣", "嵽", "馰"], - "风": ["丰", "封", "枫", "疯", "峰", "烽", "锋", "蜂", "葑", "酆", "冯", "逢", "缝", "讽", "奉", "俸", "凤", "唪", "堋", "捀", "珮", "琫", "甮", "紴", "俸", "蜯", "諷", "靊", "霛", "鳯"], - "月": ["越", "粤", "跃", "钥", "岳", "乐", "约", "悦", "阅", "跃", "栎", "钥", "钺", "岳", "粤", "樾", "龠", "瀹", "爚", "礿", "篗", "籥", "跃", "鸑", "鷽"], - "水": ["睡", "税", "说", "谁", "水", "税", "睡", "说", "谁", "涗", "祱", "説", "鋭", "鐩", "陎", "说"], - "火": ["伙", "或", "货", "获", "祸", "霍", "惑", "豁", "活", "火", "伙", "或", "货", "获", "祸", "霍", "惑", "豁", "活", "钬", "伙", "吙", "佸", "栝", "湱", "漷", "煷", "瘛", "穫", "篧", "輠", "锪", "镬", "耠", "祸", "靃", "蠖", "諕", "謋", "貣", "货", "趏", "跞", "踝", "躧", "鏸", "鐜", "镬", "雘", "霍", "嚯", "蠖", "祸", "穫", "耠", "锪", "镬", "雘"], - "山": ["杉", "删", "姗", "珊", "栅", "舢", "扇", "善", "擅", "赡", "膳", "缮", "嬗", "骟", "疝", "讪", "汕", "潸", "澘", "邖", "删", "姗", "珊", "栅", "舢", "扇", "善", "擅", "赡", "膳", "缮", "嬗", "骟", "疝", "讪", "汕", "潸", "澘", "邖"], - "石": ["时", "识", "实", "拾", "食", "蚀", "史", "使", "始", "驶", "士", "氏", "市", "示", "世", "仕", "式", "事", "侍", "势", "视", "试", "饰", "室", "是", "柿", "峙", "适", "逝", "释", "嗜", "噬", "誓", "嗜", "噬", "誓", "莳", "蓍", "弑", "螫", "舐", "谥", "氏", "世", "仕", "式", "事", "侍", "势", "视", "试", "饰", "室", "是", "柿", "峙", "适", "逝", "释", "嗜", "噬", "誓", "莳", "蓍", "弑", "螫", "舐", "谥", "舐", "谥"], - "金": ["今", "斤", "巾", "仅", "尽", "卺", "紧", "堇", "锦", "谨", "馑", "瑾", "槿", "瑾", "觐", "斤", "筋", "仅", "卺", "紧", "堇", "锦", "谨", "馑", "瑾", "槿", "瑾", "觐", "斤", "筋", "仅", "卺", "紧", "堇", "锦", "谨", "馑", "瑾", "槿", "瑾", "觐"], - "木": ["目", "牧", "睦", "穆", "暮", "募", "墓", "幕", "慕", "亩", "母", "牡", "姆", "拇", "姆", "母", "牡", "姆", "拇", "姆", "母", "牡", "姆", "拇", "姆"], - "土": ["吐", "兔", "菟", "堍", "秃", "突", "图", "徒", "途", "涂", "屠", "荼", "菟", "堍", "秃", "突", "图", "徒", "途", "涂", "屠", "荼"], - "草": ["操", "曹", "槽", "嘈", "漕", "螬", "艚", "褿", "嘈", "漕", "螬", "艚", "褿"], - "花": ["华", "哗", "骅", "铧", "划", "画", "话", "桦", "猾", "滑", "化", "划", "画", "话", "桦", "猾", "滑", "化"], - "鸟": ["尿", "捏", "聂", "啮", "镊", "镍", "涅", "蘖", "孽", "啮", "镊", "镍", "涅", "蘖", "孽"], - "鱼": ["渔", "余", "予", "妤", "盂", "臾", "鱼", "俞", "谀", "娱", "萸", "雩", "嵛", "愉", "揄", "瑜", "榆", "虞", "愚", "觎", "舆", "窬", "逾", "腴", "渝", "愉", "瑜", "榆", "虞", "愚", "觎", "舆", "窬", "逾", "腴", "渝"], - "虫": ["冲", "充", "忡", "憧", "艟", "舂", "虫", "崇", "宠", "铳", "冲", "充", "忡", "憧", "艟", "舂", "虫", "崇", "宠", "铳"], - "日": ["入", "如", "茹", "孺", "蠕", "儒", "濡", "襦", "嚅", "孺", "蠕", "儒", "濡", "襦", "嚅"], - "月": ["越", "粤", "跃", "钥", "岳", "乐", "约", "悦", "阅", "跃", "栎", "钥", "钺", "岳", "粤", "樾", "龠", "瀹", "爚", "礿", "篗", "籥", "跃", "鸑", "鷽"], - "星": ["兴", "性", "姓", "幸", "形", "刑", "型", "行", "陉", "荥", "型", "硎", "铏", "饧", "悻", "婞", "涬", "睲", "惺", "猩", "瑆", "煋", "觲", "謃", "醒", "擤", "省", "眚", "圣", "胜", "晟", "盛", "剩", "乘", "绳", "胜", "晟", "盛", "剩", "乘", "绳"], - "光": ["广", "犷", "逛", "咣", "洸", "茪", "珖", "胱", "輄", "銧", "黆", "姯", "侊", "咣", "洸", "茪", "珖", "胱", "輄", "銧", "黆", "姯", "侊"], - "明": ["名", "命", "鸣", "冥", "铭", "茗", "溟", "暝", "瞑", "螟", "酩", "洺", "眀", "朙", "螟", "蓂", "铭", "溟", "暝", "瞑", "螟", "酩", "洺"], - "春": ["椿", "醇", "唇", "纯", "莼", "淳", "鹑", "蝽", "蠢", "春", "椿", "醇", "唇", "纯", "莼", "淳", "鹑", "蝽", "蠢"], - "夏": ["下", "吓", "夏", "厦", "罅", "瞎", "虾", "霞", "暇", "瑕", "遐", "黠", "下", "吓", "夏", "厦", "罅", "瞎", "虾", "霞", "暇", "瑕", "遐", "黠"], - "秋": ["邱", "丘", "蚯", "秋", "鳅", "湫", "楸", "萩", "啾", "遒", "酋", "逑", "球", "赇", "巯", "蝤", "鳅", "囚", "泅", "俅", "酋", "逑", "球", "赇", "巯", "蝤", "鳅"], - "冬": ["东", "咚", "岽", "氡", "鸫", "董", "懂", "动", "冻", "侗", "垌", "峒", "恫", "栋", "洞", "胨", "硐", "鲷", "东", "咚", "岽", "氡", "鸫", "董", "懂", "动", "冻", "侗", "垌", "峒", "恫", "栋", "洞", "胨", "硐", "鲷"] -} - -# 同音字检查函数 -def is_homophone(char1, char2): - """检查两个字是否为同音字""" - if char1 == char2: - return True - # 检查是否在谐音字典中 - for key, values in HOMOPHONES.items(): - if char1 == key and char2 in values: - return True - if char2 == key and char1 in values: - return True - return False - -# 获取下一个成语(本地库) -def get_next_idioms(last_char): - """获取以指定字符开头的成语(支持谐音)""" - result = [] - for idiom in IDIOMS: - first_char = idiom[0] - if idiom.startswith(last_char) or is_homophone(first_char, last_char): - result.append(idiom) - return result - -# 验证成语函数 -def validate_idiom(idiom, last_char, history): - """验证成语是否有效(完全依赖AI验证,支持谐音)""" - # 检查是否已经使用过 - if idiom in history: - return False, "成语已经使用过" - - # 检查首字是否匹配(支持谐音) - if last_char: - first_char = idiom[0] - if not (idiom.startswith(last_char) or is_homophone(first_char, last_char)): - return False, f"成语必须以'{last_char}'或其谐音开头" - - # 完全依赖AI验证,不再使用本地成语库 - if DEEPSEEK_API_KEY and DEEPSEEK_API_KEY != "your_api_key_here": - try: - headers = { - "Content-Type": "application/json", - "Authorization": f"Bearer {DEEPSEEK_API_KEY}" - } - - # 专业的成语验证提示 - system_prompt = "你是一个专业的成语专家,精通中国成语。请判断以下内容是否为标准的四字成语。\n" - system_prompt += "判断标准:\n" - system_prompt += "1. 必须是四字短语\n" - system_prompt += "2. 必须是约定俗成的成语,而非普通短语\n" - system_prompt += "3. 包括常见成语、典故成语、书面成语和较少见的成语\n" - system_prompt += "4. 只要符合成语特征,即使不太常见也应判断为成语\n" - system_prompt += "请严格按照要求判断,如果是成语,请只回答'是';如果不是成语,请只回答'否'。" - - messages = [ - {"role": "system", "content": system_prompt}, - {"role": "user", "content": f"{idiom}"} - ] - - data = { - "model": "deepseek-chat", - "messages": messages, - "max_tokens": 10, - "temperature": 0.1, - "response_format": {"type": "text"} - } - - response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=8) - response.raise_for_status() - result = response.json() - ai_answer = result['choices'][0]['message']['content'].strip() - - print(f"AI验证结果: {idiom} -> {ai_answer}") - - # 更宽松的AI回答匹配 - if ai_answer in ["是", "是的", "对", "正确", "是成语"]: - # AI确认是成语 - return True, "AI验证通过" - elif ai_answer in ["否", "不是", "不对", "错误", "不是成语"]: - return False, "成语不存在" - else: - # AI回答不明确,尝试再次验证 - print(f"AI回答不明确: {ai_answer}") - try: - messages = [ - {"role": "system", "content": "请重新判断,只回答'是'或'否',不要添加任何其他内容"}, - {"role": "user", "content": f"{idiom}是否是标准的四字成语?"} - ] - data['messages'] = messages - response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=5) - response.raise_for_status() - result = response.json() - ai_answer = result['choices'][0]['message']['content'].strip() - print(f"AI二次验证结果: {idiom} -> {ai_answer}") - if ai_answer in ["是", "是的", "对", "正确", "是成语"]: - return True, "AI验证通过" - except Exception as e: - print(f"二次验证失败: {e}") - # 多次验证失败 - return False, "成语不存在" - except Exception as e: - print(f"AI验证失败: {e}") - # AI验证失败,使用兜底验证 - if len(idiom) == 4 and all('\u4e00' <= c <= '\u9fff' for c in idiom): - return True, "四字短语验证通过" - else: - return False, "成语不存在" - else: - # 未配置API密钥,使用兜底验证 - if len(idiom) == 4 and all('\u4e00' <= c <= '\u9fff' for c in idiom): - return True, "四字短语验证通过" - else: - return False, "成语不存在" - -# 获取随机成语 -def get_random_idiom(): - """获取随机成语""" - return random.choice(list(IDIOMS.keys())) - -# 使用DeepSeek API生成接龙成语 -def get_deepseek_idiom(last_char, history): - """使用DeepSeek API生成接龙成语(支持谐音)""" - if not DEEPSEEK_API_KEY or DEEPSEEK_API_KEY == "your_api_key_here": - # API密钥未配置,返回None - return None - - try: - headers = { - "Content-Type": "application/json", - "Authorization": f"Bearer {DEEPSEEK_API_KEY}" - } - - # 构建系统提示 - system_prompt = "你是一个成语接龙专家,擅长根据最后一个字(或谐音)生成接龙成语。\n" - system_prompt += "请按照以下要求生成成语:\n" - system_prompt += "1. 必须是四字成语\n" - system_prompt += "2. 要与前一个成语的最后一个字谐音或同字\n" - system_prompt += "3. 不要重复已经使用过的成语\n" - system_prompt += "4. 尽量使用常见的成语\n" - system_prompt += "5. 只需要返回成语本身,不要添加任何其他内容\n" - - # 构建用户提示 - user_prompt = f"请生成一个以'{last_char}'(或其谐音)开头的成语,不要使用以下成语:{', '.join(history) if history else '无'}" - - messages = [ - {"role": "system", "content": system_prompt}, - {"role": "user", "content": user_prompt} - ] - - data = { - "model": "deepseek-chat", - "messages": messages, - "max_tokens": 20, - "temperature": 0.7 - } - - # 发送请求 - response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=10) - response.raise_for_status() - - # 解析响应 - result = response.json() - idiom = result['choices'][0]['message']['content'].strip() - - # 验证生成的成语 - if validate_idiom(idiom, last_char, history)[0]: - return idiom - else: - # 生成的成语无效,尝试再次生成 - print(f"AI生成的成语无效: {idiom}") - # 再次调用API尝试生成 - try: - response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=8) - response.raise_for_status() - result = response.json() - idiom = result['choices'][0]['message']['content'].strip() - if validate_idiom(idiom, last_char, history)[0]: - return idiom - else: - return None - except Exception as e: - print(f"二次生成失败: {e}") - return None - - except Exception as e: - print(f"DeepSeek API调用失败: {e}") - return None - -# Streamlit应用 - -def main(): - """成语接龙主应用""" - st.title("🤖 智能成语接龙") - st.write("与AI进行成语接龙游戏,支持谐音接龙!") - - # 初始化会话状态 - if "game_started" not in st.session_state: - st.session_state.game_started = False - if "current_idiom" not in st.session_state: - st.session_state.current_idiom = "" - if "history" not in st.session_state: - st.session_state.history = [] - if "game_over" not in st.session_state: - st.session_state.game_over = False - if "score" not in st.session_state: - st.session_state.score = 0 - if "error" not in st.session_state: - st.session_state.error = "" - if "ai_score" not in st.session_state: - st.session_state.ai_score = 0 - - # 游戏设置 - col1, col2 = st.columns(2) - with col1: - game_mode = st.selectbox("游戏模式", ["人机对战", "双人对战"], index=0) - with col2: - difficulty = st.selectbox("难度", ["简单", "中等", "困难"], index=0) - - # 开始游戏 - if not st.session_state.game_started: - if st.button("开始游戏"): - # 初始化游戏状态 - st.session_state.game_started = True - st.session_state.game_over = False - st.session_state.history = [] - st.session_state.score = 0 - st.session_state.ai_score = 0 - st.session_state.error = "" - - # 生成第一个成语(仅使用本地成语库) - first_idiom = get_random_idiom() - st.session_state.current_idiom = first_idiom - st.session_state.history.append(first_idiom) - - st.success(f"游戏开始!第一个成语是:**{first_idiom}**") - - # 游戏进行中 - if st.session_state.game_started and not st.session_state.game_over: - # 显示当前成语 - st.subheader(f"当前成语:**{st.session_state.current_idiom}**") - last_char = st.session_state.current_idiom[-1] - st.write(f"请接:**{last_char}**(支持谐音)") - - # 用户输入 - user_input = st.text_input("请输入接龙成语:", key="user_input") - - if st.button("提交"): - if user_input: - # 验证用户输入 - is_valid, message = validate_idiom(user_input, last_char, st.session_state.history) - - if is_valid: - # 验证通过,更新游戏状态 - st.session_state.history.append(user_input) - st.session_state.score += 1 - st.success(f"回答正确!**{user_input}**") - - # 检查是否为双人对战 - if game_mode == "人机对战": - # AI接龙 - st.write("🤖 AI正在思考...") - ai_idiom = get_deepseek_idiom(user_input[-1], st.session_state.history) - - if ai_idiom: - st.session_state.history.append(ai_idiom) - st.session_state.ai_score += 1 - st.session_state.current_idiom = ai_idiom - st.info(f"🤖 AI回答:**{ai_idiom}**") - else: - # AI无法接龙,游戏结束 - st.session_state.game_over = True - st.success(f"游戏结束!AI无法接龙,你赢了!") - st.balloons() - else: - # 验证失败 - st.error(f"错误:{message}") - st.session_state.error = message - else: - st.error("请输入成语") - - # 显示游戏状态 - st.sidebar.title("游戏状态") - st.sidebar.write(f"当前分数:{st.session_state.score}") - if game_mode == "人机对战": - st.sidebar.write(f"AI分数:{st.session_state.ai_score}") - st.sidebar.write(f"已接龙:{len(st.session_state.history)} 个成语") - - # 显示历史记录 - if st.sidebar.checkbox("显示历史记录"): - st.sidebar.write("历史接龙:") - for i, idiom in enumerate(st.session_state.history): - if i % 2 == 0: - st.sidebar.write(f"{i+1}. 🧑 **{idiom}**") - else: - st.sidebar.write(f"{i+1}. 🤖 **{idiom}**") - - # 游戏结束 - if st.session_state.game_over: - st.subheader("游戏结束!") - st.write(f"你的分数:{st.session_state.score}") - if game_mode == "人机对战": - st.write(f"AI分数:{st.session_state.ai_score}") - st.write(f"总共接龙:{len(st.session_state.history)} 个成语") - - if st.button("重新开始"): - # 重置游戏状态 - st.session_state.game_started = False - st.session_state.current_idiom = "" - st.session_state.history = [] - st.session_state.game_over = False - st.session_state.score = 0 - st.session_state.error = "" - st.session_state.ai_score = 0 - st.experimental_rerun() - - # 未开始游戏 - if not st.session_state.game_started: - st.write("---") - st.info("📝 游戏规则:") - st.write("1. 输入以当前成语最后一个字(或谐音)开头的成语") - st.write("2. 成语不能重复使用") - st.write("3. 支持谐音接龙") - st.write("4. 游戏由AI生成第一个成语,之后由AI和玩家交替接龙") - st.write("5. AI会验证你的回答是否正确") - -if __name__ == "__main__": - main() \ No newline at end of file