我用 Python 自制成语接龙小游戏,刺激!

作者:小小明
原文链接:

https://blog.csdn.net/as604049322/article/details/118154687
本文为读者投稿

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

结构如下:

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

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

import pandas as pdchengyu = pd.read_json("https://github.com/pwxcoo/chinese-xinhua/blob/master/data/idiom.json?raw=true")

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

import pandas as pd
import numpy as npchengyu = 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 = True
if word not in chengyu.index:print("你输入的不是一个成语,程序结束!")flag = False
while flag:n = input("接龙的次数(1-100次的整数,输入任意字母表示结束程序)")if not n.isdigit():print("程序结束")breakn = int(n)if not (0 < n <= 100):print("非法数字,程序结束")breakfor _ in range(n):words = chengyu.index[chengyu.shoupin == chengyu.loc[word, "weipin"]]if words.shape[0] == 0:print("没有找到可以接龙的成语,程序结束")flag = Falsebreakword = np.random.choice(words)print(word)

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

完整代码

import pandas as pd
import numpy as npchengyu = 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 = True
if word not in chengyu.index:print("你输入的不是一个成语,程序结束!")flag = False
while flag:n = input("接龙的次数(1-100次的整数,输入任意字母表示结束程序)")if not n.isdigit():print("程序结束")breakn = int(n)if not (0 < n <= 100):print("非法数字,程序结束")breakfor _ in range(n):words = chengyu.index[chengyu.shoupin == chengyu.loc[word, "weipin"]]if words.shape[0] == 0:print("没有找到可以接龙的成语,程序结束")flag = Falsebreakword = np.random.choice(words)print(word)

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

import pandas as pd
import numpy as npchengyu = 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表示后手,其他表示先手)")
if is_head == "N":word2 = np.random.choice(chengyu.index)print(word2)weipin = chengyu.loc[word2, "weipin"]
else:weipin = ''
while True:word = input("请输入一个成语(认输或离开请按Q):")if word == "Q":print("你离开了游戏,再见!!!")breakif word not in chengyu.index:print("你输入的不是一个成语,请重新输入!")continueif weipin and chengyu.loc[word, 'shoupin'] != weipin:print("你输入的成语并不能与机器人出的成语接上来,你输了,游戏结束!!!")breakwords = chengyu.index[chengyu.shoupin == chengyu.loc[word, "weipin"]]if words.shape[0] == 0:print("恭喜你赢了!成语机器人已经被你打败!!!")breakword2 = np.random.choice(words)print(word2)weipin = chengyu.loc[word2, "weipin"]

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

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

from gooey import Gooey, GooeyParser
import pandas as pdchengyu = 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"]]@Gooey
def main():parser = GooeyParser(description="成语接龙查询器 - @小小明")parser.add_argument('word', help="被查询的成语")args = parser.parse_args()word = args.wordif word not in chengyu.index:print("你输入的不是一个成语,请重新输入!")else:words = chengyu.index[chengyu.shoupin == chengyu.loc[word, "weipin"]]if words.shape[0] > 0:print("满足条件的成语有:")print("、".join(words))else:print("抱歉,没有找到能够满足条件的成语")print("-----" * 10)if __name__ == '__main__':main()

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

pip install Gooey

项目地址:https://github.com/chriskiehl/Gooey

体验一把:

点击start后:

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

往期推荐

张一鸣购得元宇宙入场券,谁将是头号玩家?

移动 9.9 风暴手把手教你!

谁说理工男不浪漫?吸猫日常

被 AI 算法“监控”的打工人

点分享

点收藏

点点赞

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SLS构建RDS审计合规监控

简介&#xff1a; 数据库是企业业务的数据核心&#xff0c;其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源。因此&#xff0c;对数据库的操作行为尤其是全量 SQL 执行记录的审计日志&#xff0c;就显得尤为重要。 背景 数据库是企业业务的数据核心&#xff0c;其…

云效DevOps实践-如何基于云效实现测试自动化集成和分析

简介&#xff1a; 对于现代软件研发来说&#xff0c;持续、快速、高质量、低风险地交付需求特性&#xff0c;是业务对研发的主要诉求。而要做到这一点&#xff0c;除了要有良好的架构设计、卓越的工程能力&#xff0c;快速可靠的测试反馈也是其非常重要的一环&#xff0c;达到这…

spring 使用其他类protected方法_Java操作bean、属性、方法的使用工具类

在实际的项目开发中&#xff0c;反射操作类的实例、属性赋值、执行方法是常规的操作&#xff0c;虽然spring提供了比较完整的API来执行上述操作&#xff0c;不过在实际的应用中&#xff0c;spring的函数隐藏比较深&#xff0c;比较分散&#xff0c;小伙伴们可能懒得花时间去寻找…

2021年阿里云采购季大促主会场全攻略

在疫情的影响下&#xff0c;企业都在谋求各种转机&#xff0c;探寻各种转型之路&#xff0c;为助力企业复工复产低成本上云&#xff0c;日前阿里云开年采购季优惠活动于3月1日正式开启。 从主会场页面来看&#xff0c;活动分为三个阶段&#xff1a; 3月1日-3月16日&#xff1a…

应云而生,幽灵的威胁 - 云原生应用交付与运维的思考

简介&#xff1a; 过去的 2020 是充满不确定性的一年&#xff0c;但也是充满机遇的一年。突发的新冠疫情为全社会的数字化转型按下加速键。云计算已经不再是一种技术&#xff0c;而是成为支撑数字经济发展和业务创新的关键基础设施。在利用云计算重塑企业 IT 的过程中&#xff…

技术干货 | mPaaS 小程序高玩带你起飞:客户端预置小程序无视网络质量

简介&#xff1a; 弱网拉包无障碍&#xff0c;深度提升用户体验 传统的小程序技术容易受到网络环境影响&#xff0c;当网络质量不佳时可能导致拉取不到小程序包的情况。通过预置小程序&#xff0c;即可规避该问题。本文介绍了预置小程序的原理和预置小程序的实现过程。 什么是预…

Delta Lake在Soul的应用实践

简介&#xff1a; 传统离线数仓模式下&#xff0c;日志入库前首要阶段便是ETL&#xff0c;我们面临如下问题&#xff1a;天级ETL任务耗时久&#xff0c;影响下游依赖的产出时间&#xff1b;凌晨占用资源庞大&#xff0c;任务高峰期抢占大量集群资源&#xff1b;ETL任务稳定性不…

亚马逊云科技中国线上峰会开幕,发力汽车产业链、少年人工智能等

亚马逊云科技于9月9日-14日举办以“构建新格局 重塑云时代”为主题的中国线上峰会&#xff0c;推出涵盖行业视野、技术创新、开发者和开源、云安全、以及人工智能的5大主题演讲、覆盖云计算各细分领域的8大技术分论坛&#xff0c;以及汇聚各行业上云趋势及创新实践的10大行业分…

【产品能力深度解读】连续入围Gartner魔力象限的Quick BI有何魔力?

简介&#xff1a; 国际权威分析机构Gartner发布2021年商业智能和分析平台魔力象限报告&#xff0c;阿里云Quick BI再度入选&#xff0c;并继续成为该领域魔力象限唯一入选的中国企业。 Quick BI凭借在增强分析能力上的持续投入、数据中台矩阵化产品优势和电商行业的专业度&…

mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数

《Mysql实例详解Mysql中的JSON系列操作函数》要点&#xff1a;本文介绍了Mysql实例详解Mysql中的JSON系列操作函数&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。MYSQL必读前言MYSQL必读JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,…

256变4096:分库分表扩容如何实现平滑数据迁移?

简介&#xff1a; 本文作者就一个高德打车弹外订单系统进行了一次扩分库分表和数据库迁移。 一、 背景 2020年&#xff0c;笔者负责的一个高德打车弹外订单系统进行了一次扩分库分表和数据库迁移。该订单系统整体部署在阿里云上&#xff0c;服务使用阿里云ECS部署&#xff0c;…

OpenYurt 如何 “0 侵入” 攻破云边融合难点

简介&#xff1a; 随着 5G、IoT、直播、CDN 等行业和业务的发展&#xff0c;越来越多的算力和业务开始下沉到距离数据源或者终端用户更近的位置&#xff0c;以期获得很好的响应时间和成本&#xff0c;这是一种明显区别于传统中心模式的计算方式——边缘计算。 随着 5G、IoT、直…

Python - 深夜数据结构与算法之 Graph

目录 一.引言 二.图的简介 1.Graph 图 2.Undirected graph 无向图 3.Directed Graph 有向图 4.DFS / BFS 遍历 三.经典算法实战 1.Num-Islands [200] 2.Land-Perimeter [463] 3.Largest-Island [827] 四.总结 一.引言 Graph 无论是应用还是算法题目在日常生活中比较…

Docker Desktop宣布收费;腾讯7月已申请注册WECHAT CLOUD商标;MongoDB成为当前最具价值开源软件公司...

NEWS本周新闻回顾Docker Desktop 宣布收费近日 Docker 官方宣布一项新的动作&#xff0c;即将产品订阅划分为个人、专业、团队和商业不同版本。如果企业规模在 250 名员工以上或年收入超过 1000 万美元的公司想要使用 Docker Desktop&#xff0c;那么必须使用付费订阅。付费订阅…

Serverless 2.0,鸡蛋还是银弹?

简介&#xff1a; 本篇旨在介绍 Serverless 如今应用到应用&#xff08;非病句&#xff09;的各种困境&#xff0c;以及帮助用户如何去规避一些问题&#xff0c;提前了解方向。 浪潮 从 2014 年 Serverless 冒头至今&#xff0c;已经有无数的勇士在前面探路&#xff0c;阿里、…

基础组件完善的今天,如何通过业务组件提效?

简介&#xff1a; 无论是在前端刀耕火种的 jQuery/YUI 时代&#xff0c;还是到现在基于数据驱动 UI 的 React/Vue 时代&#xff0c;物料/组件一直是前端永恒的话题。基于大量重复逻辑的封装可以很显而易见地提升前端 UI 的构建效率&#xff0c;简单而直接&#xff0c;因此无论技…

​做安全操作系统,这位技术老兵是认真的!

受访者 | 王文东记者 | 伍杏玲出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;近年来国际形势变化莫测&#xff0c;基础软件作为建设国家信息系统的核心&#xff0c;其自主研发能力备受关注与热议。作为企业和个人开发者&#xff0c;我们如何打破当前国产基…

基于 Flink SQL 构建流批一体的 ETL 数据集成

简介&#xff1a; 如何利用 Flink SQL 构建流批一体的 ETL 数据集成。 本文整理自云邪、雪尽在 Flink Forward Asia 2020 的分享&#xff0c;该分享以 4 个章节来详细介绍如何利用 Flink SQL 构建流批一体的 ETL 数据集成, 文章的主要内容如下&#xff1a; 数据仓库与数据集成…

入选 SIGMOD2021 的时间序列多周期检测通用框架 RobustPeriod 如何支撑阿里业务场景?

简介&#xff1a; 本文除了介绍RobustPeriod的核心技术亮点&#xff0c;还将重点解释如何将它构筑成服务来解决阿里云的业务痛点。 近日&#xff0c;由阿里云计算平台和阿里云达摩院合作的时序多周期检测相关论文RobustPeriod: Robust Time-Frequency Mining for Multiple Peri…

《新程序员002》图书正式上市! 从“新数据库时代”到“软件定义汽车”

20年前&#xff0c;伴随着互联网打开信息化大门&#xff0c;技术人成为新时代的开拓者。在时代的召唤下&#xff0c;CSDN于2001年推出国内首个面向IT人员的专业杂志——《程序员》&#xff0c;成为一代代开发者的技术启蒙。20年后的今天&#xff0c;人工智能、云计算、大数据等…