【JRs观点】闲着无聊,我用Python写了成语接龙的程序,战胜了siri!

虎朴中国
楼主 (虎扑)
前言: 大家最近的状态应该跟我一样,整天在家待着,不是吃就是睡,躺着玩手机,实在是无聊,无意间发现街上有人和siri玩成语接龙打发时间,所以我也开始玩了几把,后来我现在根本玩不过siri,每次都需要百度,后来实在闲着无聊,打算写个程序打败siri! 过程: 1、上网找了一个成语词库,是个json文件(csdn下载的,由于没有积分,淘宝花了3毛5代下载的),下载完之后,打开json发现了新大陆,文件里太全面了,3万多个成语,包括读音,意思,使用方法,哪些诗句典故文章使用过等等,但是对我来说没必要。使用Python把json中的成语名字,第一个字拼音,最后一个字拼音取出来重新保存成一个json。 2、但是成语接龙中,允许最后一个字的四个音都可以接,所以再次把json中的拼音部分的数据做了修改,保证没有的读音的区别。 3、再接下来,写了个函数,把传入的成语的最后一个字的音取出来,用这个音去json中遍历一遍,把可以接下去的成语全部找出来存入列表 4、接下来是核心部分,我又把所有可以接的成语的最后一个字去json中跑了一遍这一步也就是siri检索它有没有可以回答的成语,检索之后,把可能数最少的成语返回出来,告诉siri 结局: 由于siri的成语库也非常庞大,所以一般需要多玩几把才能把siri打败。 Pls:哎,真的太无聊了。。。 下面上图吧,代码截图(需要源码可以私信我) 运行效果图:后面的数字表示,理论上siri可以有几种接法,但是由于siri的成语库没有我的大,所以他玩不过我 最后上siri的投降: 最后说一下,研究了成语接龙无法接下去的成语也就几个,主要是fou,nou,cou...

 

🔥 最新回帖

科比丶紫金丶湖人
162 楼
引用 @上将本内特 发表的:
鲁个鸡儿

儿给爷爬

虎扑用户371879
161 楼
搞个对抗学习啊

虎朴中国
160 楼
引用 @Wuey66 发表的:
尔康

康熙

香蕉你个芭蜡
159 楼
我尼玛在虎扑看编程?

虎扑用户660566
158 楼
引用 @tancy90 发表的:
内马尔

尔康

 

🛋️ 沙发板凳

结束什么玩意儿
尾字转拼音, JSON词库首字转拼音, 每次拿到新的成语最后一个字转拼音去对比词库的就可以了, 词库还可以再初始化的时候做个键值对去分类,这样就不需要每次都遍历大量的词库了
虎朴中国
引用 @结束什么玩意儿 发表的:
尾字转拼音, JSON词库首字转拼音, 每次拿到新的成语最后一个字转拼音去对比词库的就可以了, 词库还可以再初始化的时候做个键值对去分类,这样就不需要每次都遍历大量的词库了

厉害,没了解过汉字转拼音,有想过这个思路

饮下星光
秀秀秀~

熊喵叔不爱讲话
还有pa也是siri死穴,所以siri说dao和lian也是必胜时机

勇士球星斯蒂芬库里
虽然很厉害,但是我一个回合就解决了啊。。

虎朴中国
引用 @熊喵叔不爱讲话 发表的:
还有pa也是siri死穴,所以siri说dao和lian也是必胜时机

好的吧,这个没有研究诶,不过pa,dao,lian在我的数据库里是可以接下去的

萨克风
牛逼嗷

我是周星星呀
引用 @虎朴中国 发表的:
厉害,没了解过汉字转拼音,有想过这个思路

文科的优势展现出来了🐶

星星之偷
可以优化一下搜索路径,每局必杀siri🐶

熊喵叔不爱讲话
引用 @虎朴中国 发表的:
好的吧,这个没有研究诶,不过pa,dao,lian在我的数据库里是可以接下去的

dao和lian是可以接的,我的意思是说siri结尾是dao就说倒打一耙,结尾是lian就说连滚带爬就能赢

虎朴中国
引用 @星星之偷 发表的:
可以优化一下搜索路径,每局必杀siri🐶

哈哈,倒是效果dfs和bfs,但是你没发知道siri接哪个,都是发散的,没发搜索呀。。

陈磊真棒
盲猜楼主没学过数据结构🐶
用图解决时间复杂度会小很多

l
lowwww
引用 @虎朴中国 发表的:
厉害,没了解过汉字转拼音,有想过这个思路

汉字转拼音网上一堆的现成函数,通讯录用的最多。

虎朴中国
引用 @陈磊真棒 发表的:
盲猜楼主没学过数据结构🐶
用图解决时间复杂度会小很多

哈哈哈,学过学过,C++ ACM比赛有学,Python中没接触过,就直接写了,没优化,献丑了,万幸Python运行速度还不错,一秒钟不到就出结果

虎朴中国
引用 @lowwww 发表的:
汉字转拼音网上一堆的现成函数,通讯录用的最多。

Oook,可以去看看的

也许大概可能是
你说siri是不是有时候耍赖。

玉泉路小霸王
引用 @虎朴中国 发表的:
哈哈哈,学过学过,C++ ACM比赛有学,Python中没接触过,就直接写了,没优化,献丑了,万幸Python运行速度还不错,一秒钟不到就出结果

不用那么麻烦,把list换成dict,速度飙升

虎扑用户333689
keyword有bug吗

a
appconfig
是怎么实现语音识别的呢?

虎朴中国
引用 @appconfig 发表的:
是怎么实现语音识别的呢?

我自己输入的

虎朴中国
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

哈哈哈,运气太好啦

虎朴中国
引用 @也许大概可能是 发表的:
你说siri是不是有时候耍赖。

是的,有时候我数据库的成语它不认可。。。

不会起名群殴他
一个顶俩怎么接?

咸柚子
我觉得如果有多音字的话否也可以接否极泰来。。。

N
NUGUR1
理论上siri可以有几种接法 但是由于siri的成语库没有我的大 所以他玩不过我

这句话莫名喜感 有一种屌屌的感觉

虎朴中国
引用 @不会起名群殴他 发表的:
一个顶俩怎么接?

电脑在楼下,明天我跑一下给你答案啊,太冷了,现在不下楼了

虎朴中国
引用 @咸柚子 发表的:
我觉得如果有多音字的话否也可以接否极泰来。。。

这个是不允许的。。。

你咋就不敢和旅长干一架呢
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

😄

天选之子陈全秀
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

勤能补拙🐶

勒布朗GD
你这是咋和手机连上的

勇士球星斯蒂芬库里
引用 @你咋就不敢和旅长干一架呢 发表的:
😄

华为的语音助手有点傻。。我好多成语他说我错的。。

虎扑用户441485
引用 @虎朴中国 发表的:
哈哈,倒是效果dfs和bfs,但是你没发知道siri接哪个,都是发散的,没发搜索呀。。

就往最短的分枝接啊

a
appconfig
引用 @虎朴中国 发表的:
我自己输入的

弱弱的问一句,那这样不就和查百度一样了吗?

虎扑用户445344
eval这个函数平常都没用过,用eval读文件真的是第一次见。

不会起名群殴他
引用 @虎朴中国 发表的:
电脑在楼下,明天我跑一下给你答案啊,太冷了,现在不下楼了

好的,qq发成语接龙红包,这个没人接的上

D
Darkchoc
求你了把源码发github上吧,我在家天天读jdk源码太单调了

光之训练师
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

琴瑟不调

琴酒尽力了


清高宗乾隆
lz能不能把词库分享我一下 我想写个Java的玩一下 谢谢 [email protected]

K
KimJiWonn
引用 @虎朴中国 发表的:
哈哈哈,学过学过,C++ ACM比赛有学,Python中没接触过,就直接写了,没优化,献丑了,万幸Python运行速度还不错,一秒钟不到就出结果

或者三万多个感觉用HashMap应该也挺快的。不过相同拼音冲突处理需要考虑考虑怎么弄比较快

虎朴中国
引用 @nicoplus 发表的:
eval这个函数平常都没用过,用eval读文件真的是第一次见。

哈哈,eval这个函数真的牛逼,除了这个方法读取文件,推荐别的方法吗,把json数据读取进来

虎扑用户771756
求个源码?

虎朴中国
引用 @KimJiWonn 发表的:
或者三万多个感觉用HashMap应该也挺快的。不过相同拼音冲突处理需要考虑考虑怎么弄比较快

没明白你说的相同拼音指的是啥。。。

虎朴中国
引用 @赵日猪 发表的:
求个源码?

明天吧,兄弟,上床了

C
CurryBaby30
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

肯堂肯构

虎扑用户445344
引用 @虎朴中国 发表的:
哈哈,eval这个函数真的牛逼,除了这个方法读取文件,推荐别的方法吗,把json数据读取进来

import json;json.loads()

虎扑用户445344
引用 @虎朴中国 发表的:
哈哈,eval这个函数真的牛逼,除了这个方法读取文件,推荐别的方法吗,把json数据读取进来

还有一个,用with open('xxx') as f: 就不用写f.close()了。

n
niLiynisH
引用 @虎朴中国 发表的:
厉害,没了解过汉字转拼音,有想过这个思路

不是,你那里不是用了转拼音吗?

虎扑用户439653
mark

虎扑用户345615
可以,楼主学习了

无逻辑的风
引用 @appconfig 发表的:
弱弱的问一句,那这样不就和查百度一样了吗?

你是魔鬼吗🐶

劳资就粉登哥
引用 @虎朴中国 发表的:
厉害,没了解过汉字转拼音,有想过这个思路

通讯录排序没写过吗

把鞋还我
逛着逛着感觉自己打开的是csdn

虎扑用户472158
Siri属实不行

虎朴中国
引用 @nicoplus 发表的:
import json;json.loads()

好吧,没有系统了解过json,用的土办法,谢谢!

虎扑用户349629
楼主,可以求个源码吗

当地较英俊的人
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

琴瑟和鸣

m
millionhhh
引用 @KimJiWonn 发表的:
或者三万多个感觉用HashMap应该也挺快的。不过相同拼音冲突处理需要考虑考虑怎么弄比较快

Python里的哈希表就是dictionary字典

m
millionhhh
引用 @虎朴中国 发表的:
哈哈哈,学过学过,C++ ACM比赛有学,Python中没接触过,就直接写了,没优化,献丑了,万幸Python运行速度还不错,一秒钟不到就出结果

Python比C C++慢得不是一点半点 只是开发效率高了而已

虎朴中国
引用 @millionhhh 发表的:
Python比C C++慢得不是一点半点 只是开发效率高了而已

是的!

h
hoop-DJ
你这第四步看着怎么还有点可以往minmax拓展的感觉

大姨守护者
wc

虎扑用户176568
引用 @天选之子陈全秀 发表的:
勤能补拙🐶

Ken

深沉的呐喊
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

勤学苦练

R
Russwest布鲁克
楼主求个源代码,谢谢

厶厶厶厶
感觉挺好玩的,老哥我最近也在学习Python ,能把那个json文件和py文件源代码发给我吗,[email protected]
谢谢啦~

虎朴中国
引用 @hoop-DJ 发表的:
你这第四步看着怎么还有点可以往minmax拓展的感觉

是的,不过当时想多保留一些数据,因为我的发音,siri很难识别部分成语

篮筐后面投篮
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

小米的回答,擒贼擒王

勇士球星斯蒂芬库里
引用 @篮筐后面投篮 发表的:
小米的回答,擒贼擒王

siri提问的天道酬勤,我回答的勤勤恳恳

四维木童
华为助手有毒吧

虎扑用户766763
楼主 求私个数据源

腮帮已肿
引用 @虎朴中国 发表的:
没明白你说的相同拼音指的是啥。。。

存放汉字时因为他们拼写相同,hash函数分配地址会产生冲突,所以需要通过一些方法再散列解决冲突。上学期刚学完数据结构,说的可能有问题,说错了希望指正

胯里压内拉
整个阿尔法🐶,我去挑战柯洁

新手教程
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

这siri好菜啊,我接肯巴沃克

虎子哥哥丶
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

我居无定所不如他的饮食男女????

Z
ZohnnyZoey
引用 @新手教程 发表的:
这siri好菜啊,我接肯巴沃克

克里斯泡

小悦立正向前走
遍历差评

勇士球星斯蒂芬库里
引用 @ZohnnyZoey 发表的:
克里斯泡

泡儿椒汁

风云伴我闯荡
siri:我虽然不是人,但你是真的狗

虎扑用户758445
放假想自学python 怎么开始啊楼主!

虎扑用户085409
那为所欲为呢?

建宁泡脚24
来者不善 善者不来?

风云伴我闯荡
引用 @四维木童 发表的:
华为助手有毒吧

yoyo: 别管我有毒没毒,你就给我接🐶

超酷
楼主求源码 多谢啦🙏

K
KimJiWonn
引用 @虎朴中国 发表的:
没明白你说的相同拼音指的是啥。。。

拼音相同算出来的哈希值也相同啊。。你得进行处理不是么

z
zjs183658kk
引用 @结束什么玩意儿 发表的:
尾字转拼音, JSON词库首字转拼音, 每次拿到新的成语最后一个字转拼音去对比词库的就可以了, 词库还可以再初始化的时候做个键值对去分类,这样就不需要每次都遍历大量的词库了

I can do this all day🐶

K
KimJiWonn
引用 @millionhhh 发表的:
Python里的哈希表就是dictionary字典

哦哦,python 用的不多不太了解😂

K
KimJiWonn
引用 @millionhhh 发表的:
Python里的哈希表就是dictionary字典

因为Java里这是两个东西

昵称怎么算拉风
引用 @光之训练师 发表的:
琴瑟不调

……

四维木童
引用 @风云伴我闯荡 发表的:
yoyo: 别管我有毒没毒,你就给我接🐶

我给他接了de不配位。他说不是成语

X
XIAOYLIN
引用 @勇士球星斯蒂芬库里 发表的:
虽然很厉害,但是我一个回合就解决了啊。。

我的Siri 是不是耍赖

省港澳第一德莱文
引用 @勇士球星斯蒂芬库里 发表的:
泡儿椒汁

吉米巴特

风云伴我闯荡
引用 @四维木童 发表的:
我给他接了de不配位。他说不是成语

哈哈哈,憨批助手

虎朴中国
引用 @结束什么玩意儿 发表的:
尾字转拼音, JSON词库首字转拼音, 每次拿到新的成语最后一个字转拼音去对比词库的就可以了, 词库还可以再初始化的时候做个键值对去分类,这样就不需要每次都遍历大量的词库了

借楼,太多兄弟私信我要源码,我现在躺下啦,明天我给大家发,私信就不统一回复了,谢谢

K
KimJiWonn
引用 @腮帮已肿 发表的:
存放汉字时因为他们拼写相同,hash函数分配地址会产生冲突,所以需要通过一些方法再散列解决冲突。上学期刚学完数据结构,说的可能有问题,说错了希望指正

是的!有往后接链表和多次哈希两种方法🐶

皇帝詹乐邦
引用 @省港澳第一德莱文 发表的:
吉米巴特

不应该是巴特勒嘛
那就勒布朗
特就特奥多西奇