失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 用 Python 自制成语接龙小游戏!

用 Python 自制成语接龙小游戏!

时间:2021-07-10 00:51:52

相关推荐

用 Python 自制成语接龙小游戏!

作者:小小明

来源:杰哥的IT之旅

在 /pwxcoo/chinese-xinhua 项目中可以下载到中华成语的语料库,该项目收录包括 14032 条歇后语,16142 个汉字,264434 个词语,31648 个成语。

结构如下:

chinese-xinhua/|+-data/<--数据文件夹|||+-idiom.json<--成语|||+-word.json<--汉字|||+-xiehouyu.json<--歇后语|||+-ci.json<--词语

可以直接从网络读取该github的json文件:

importpandasaspdchengyu=pd.read_json("/pwxcoo/chinese-xinhua/blob/master/data/idiom.json?raw=true")

不过有可能网络不佳导致读取失败,下载好之后读取本地文件更佳:

importpandasaspdimportnumpyasnpchengyu=pd.read_json("idiom.json")chengyu.head(2)

该库有很多列,word列是我们需要的成语,pinyin列已经帮我们转换出了对应的拼音。下面我们整理出我们需要的数据:

t=chengyu.pinyin.str.split()chengyu["shoupin"]=t.str[0]chengyu["weipin"]=t.str[-1]chengyu=chengyu.set_index("word")[["shoupin","weipin"]]chengyu

测试获取任意一个成语的接龙结果集:

word="阿党比周"words=chengyu.index[chengyu.shoupin==chengyu.loc[word,"weipin"]]wordsIndex(['舟车劳顿','舟水之喻','舟中敌国','诌上抑下','侜张为幻','周而不比','周而复始','周公吐哺','周规折矩','周急继乏','周郎顾曲','周情孔思','周穷恤匮','周游列国','诪张变眩','诪张为幻','粥少僧多','粥粥无能'],dtype='object',name='word')

然后随机任取一个:

np.random.choice(words)'诪张为幻'

测试没有问题,我们可以写一个批量接龙程序:

word=input("请输入一个成语:")flag=Trueifwordnotinchengyu.index:print("你输入的不是一个成语,程序结束!")flag=Falsewhileflag:n=input("接龙的次数(1-100次的整数,输入任意字母表示结束程序)")ifnotn.isdigit():print("程序结束")breakn=int(n)ifnot(0<n<=100):print("非法数字,程序结束")breakfor_inrange(n):words=chengyu.index[chengyu.shoupin==chengyu.loc[word,"weipin"]]ifwords.shape[0]==0:print("没有找到可以接龙的成语,程序结束")flag=Falsebreakword=np.random.choice(words)print(word)

请输入一个成语:周郎顾曲接下来程序自动接龙的次数(1-100次的整数,其他情况表示结束)10曲尽奇妙妙趣横生声应气求求人不如求己掎挈伺诈诈痴不颠颠乾倒坤昆山之玉玉叶金枝织当访婢接下来程序自动接龙的次数(1-100次的整数,其他情况表示结束)no结束

完整代码

importpandasaspdimportnumpyasnpchengyu=pd.read_json("idiom.json")t=chengyu.pinyin.str.split()chengyu["shoupin"]=t.str[0]chengyu["weipin"]=t.str[-1]chengyu=chengyu.set_index("word")[["shoupin","weipin"]]word=input("请输入一个成语:")flag=Trueifwordnotinchengyu.index:print("你输入的不是一个成语,程序结束!")flag=Falsewhileflag:n=input("接龙的次数(1-100次的整数,输入任意字母表示结束程序)")ifnotn.isdigit():print("程序结束")breakn=int(n)ifnot(0<n<=100):print("非法数字,程序结束")breakfor_inrange(n):words=chengyu.index[chengyu.shoupin==chengyu.loc[word,"weipin"]]ifwords.shape[0]==0:print("没有找到可以接龙的成语,程序结束")flag=Falsebreakword=np.random.choice(words)print(word)

我们还可以写一个与机器对战的成语接龙小游戏:

importpandasaspdimportnumpyasnpchengyu=pd.read_json("idiom.json")t=chengyu.pinyin.str.split()chengyu["shoupin"]=t.str[0]chengyu["weipin"]=t.str[-1]chengyu=chengyu.set_index("word")[["shoupin","weipin"]]is_head=input("是否先手(输入N表示后手,其他表示先手)")ifis_head=="N":word2=np.random.choice(chengyu.index)print(word2)weipin=chengyu.loc[word2,"weipin"]else:weipin=''whileTrue:word=input("请输入一个成语(认输或离开请按Q):")ifword=="Q":print("你离开了游戏,再见!!!")breakifwordnotinchengyu.index:print("你输入的不是一个成语,请重新输入!")continueifweipinandchengyu.loc[word,'shoupin']!=weipin:print("你输入的成语并不能与机器人出的成语接上来,你输了,游戏结束!!!")breakwords=chengyu.index[chengyu.shoupin==chengyu.loc[word,"weipin"]]ifwords.shape[0]==0:print("恭喜你赢了!成语机器人已经被你打败!!!")breakword2=np.random.choice(words)print(word2)weipin=chengyu.loc[word2,"weipin"]

是否先手(输入N表示后手,其他表示先手)请输入一个成语(认输或离开请按Q):妙趣横生生米煮成熟饭请输入一个成语(认输或离开请按Q):饭来开口口呆目钝请输入一个成语(认输或离开请按Q):遁名匿迹计功谋利

由于成语积累量较少,几局就已经快玩不下去,于是我打算再写个成语查询器方便开挂后再上,而不是疯狂的百度,代码如下:

fromgooeyimportGooey,GooeyParserimportpandasaspdchengyu=pd.read_json("idiom.json")t=chengyu.pinyin.str.split()chengyu["shoupin"]=t.str[0]chengyu["weipin"]=t.str[-1]chengyu=chengyu.set_index("word")[["shoupin","weipin"]]@Gooeydefmain():parser=GooeyParser(description="成语接龙查询器-@小小明")parser.add_argument('word',help="被查询的成语")args=parser.parse_args()word=args.wordifwordnotinchengyu.index:print("你输入的不是一个成语,请重新输入!")else:words=chengyu.index[chengyu.shoupin==chengyu.loc[word,"weipin"]]ifwords.shape[0]>0:print("满足条件的成语有:")print("、".join(words))else:print("抱歉,没有找到能够满足条件的成语")print("-----"*10)if__name__=='__main__':main()

这里我使用了Gooey,需要pip安装:

pipinstallGooey

项目地址:/chriskiehl/Gooey

体验一把:

点击start后:

要重新开始查询只需点击Edit按钮即可。Gooey支持的组件还挺多的,可以参考GitHub项目说明。虽然Gooey远不如专业的图形化框架专业,但对于简单的需求也挺简单便捷,能快速把命令行程序转换为图形化程序。

参考

《文本数据挖掘——基于R语言》黄天元

---------End---------

精选资料

回复关键词,获取对应的资料:

精选内容

神器 VS Code,超详细Python配置使用指南

神器Tushare,财经数据必备工具!

Matplotlib 可视化最有价值的 50 个图表

视频:Plotly 和 Dash 在投资领域的应用

如果觉得《用 Python 自制成语接龙小游戏!》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。