zshxsy/idiom_solitaire.py

614 lines
47 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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会验证你的回答是否正确")