吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6821|回复: 12
收起左侧

[Python 转载] 最全的成语接龙代码(附带有网页版)

[复制链接]
miguo835 发表于 2020-6-24 10:04
本帖最后由 miguo835 于 2020-6-24 14:02 编辑

初学python 突然想弄个成语接龙的代码,在网上找了一遍,很多都是不全面,于是自己试着写了个,里边包含同字成语,同音成语,同字接龙,同音接龙。代码如下,注意,同音接龙比较吃性能。


[Python] 纯文本查看 复制代码
import json,os
import random
import pypinyin


#idiom_pingyin.json包含成语与拼音
with open('idiom_pingyin.json',encoding='utf-8') as f:
    idiom_list = json.load(f)#读取的是列表数据。列表中元素为字典

#存储成语为列表
list_idio=[]
for i in idiom_list:
    list_idio.append(i['idio'])


#首尾同字循环成语接龙
class SameZi:
    list1=[]
    def load_idiom(self,idio): 
        res=[]      
        for i in list_idio:        
            if idio[-1]==i[0]:
                res.append(i)            

        if len(self.list1)<35:
            if res:
                nose=random.choice(res)
                self.list1.append(nose)
                self.load_idiom(nose)
        return self.list1



    # 运行多次次,取最长的成语接龙。
    def genter_idiom(self,word):
        loop=[]
        i=1       
        while i<30:           #回调运行30次,数字可以自己更改,数字越大,运行结果越精准。 
            loop1=self.load_idiom(word)
            print(len(loop1))
            if len(loop)<len(loop1):
                loop=loop1[:] 
            self.list1.clear()
            i=i+1
        print(loop)
        return loop

#首尾同音成语接龙循环(运行过程很慢)
class SameYin:
    list_py=[]
    def py_idiom(self,idio): 
        res=[]      
        for i in idiom_list:  
            #拼音方法返回的是个列表包含列表 如'阿保之功': [['ā'], ['bǎo'], ['zhī'], ['gōng']]     
            if pypinyin.pinyin(idio[-1])[0][0]==i["pinyin"][0]:
                res.append(i["idio"])            
            
        if len(self.list_py)<30 :
            if res:
                nose=random.choice(res) #从列表中随机取个成语,继续查找下一个
                self.list_py.append(nose)
                self.py_idiom(nose)
        return self.list_py

    # 运行10次,取最长的成语接龙。
    def genter_py(self,words):
        loop=[]
        i=1    
        while i<10:      #循环运行10次,数字可以更改,看电脑性能。     
            loop1=self.py_idiom(words)
            print(len(loop1))
            if len(loop)<len(loop1):
                loop=loop1[:] 
            self.list_py.clear()
            i=i+1
        #添加拼音
        idiomandpy=[]
        for a in loop:
            #拼音方法返回的是个列表包含列表 如'阿保之功': [['ā'], ['bǎo'], ['zhī'], ['gōng']]
            idpy=pypinyin.pinyin(a)
            list_text=[]
            for b in idpy:
                list_text.append(b[0])
            cont_py=" ".join(list_text)
            content=a+"("+cont_py+")"
            idiomandpy.append(content)                  
        print(idiomandpy)
        return idiomandpy

#同字成语
def one_zi(keyword):
    set_idiom=[]
    for item in list_idio:
        if keyword[-1]==item[0]:
            set_idiom.append(item)
    print(set_idiom)
    print(len(set_idiom))
    return set_idiom

#同音成语
def one_yin(keyword):
    set_yidiom=[]
    for i in idiom_list:
        if pypinyin.pinyin(keyword[-1])[0][0]==i["pinyin"][0]:
            pycont=' '.join(i["pinyin"])
            cont=i["idio"]+"("+pycont+")"
            set_yidiom.append(cont)
    print(set_yidiom)
    print(len(set_yidiom))
    return set_yidiom



#生成结果
def create(word):  
        result_dict={}              
        tongying=one_yin(word)
        result_dict["同音成语"]=tongying
        tongzi=one_zi(word)
        result_dict["同字成语"]=tongzi
        samezi=SameZi().genter_idiom(word)
        result_dict["同字接龙"]=samezi
        #同音循环运行较慢,有需要自己开启
        # sameyin=SameYin().genter_py(word)
        # result_dict["同音接龙"]=sameyin
        print(result_dict)

if __name__=="__main__":
    create("大")



为了方便使用,专门弄了个成语接龙的网站, 便于查询,网址:https://ciyuquan.com/ ,网站做的比较简陋,还有很多BUG,将就着用吧。

代码里面用到的json数据:https://ciyuquan.com/daquan/idiom_pingyin.json

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
0772boy + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

0772boy 发表于 2020-6-29 11:01
miguo835 发表于 2020-6-28 08:52
网站上是一样的,网站上不可能在线计算,太耗时间了,查个词估计得一两分钟,所以直接生成固定的。python ...

感谢回复,没注意看。

手机没法评分。。回去用电脑了给你加分&#1641;( &#5147; )( &#5142; )&#1782;&#8236;
 楼主| miguo835 发表于 2020-6-28 08:52
0772boy 发表于 2020-6-27 02:51
想问一下,结果不随机吗。。。每次同一个字接下去的龙都一模一样

网站上是一样的,网站上不可能在线计算,太耗时间了,查个词估计得一两分钟,所以直接生成固定的。python代码是随机生成的。
caojiale 发表于 2020-6-24 13:57
ciker_li 发表于 2020-6-24 22:15
有没有去重复?
 楼主| miguo835 发表于 2020-6-26 16:13

去了,这是必须的。
0772boy 发表于 2020-6-27 02:51
miguo835 发表于 2020-6-26 16:13
去了,这是必须的。

想问一下,结果不随机吗。。。每次同一个字接下去的龙都一模一样
闰土168 发表于 2020-6-29 15:55
可以,挺好的
fls 发表于 2020-6-29 16:22
点赞~之前看到个不管输入什么,都连接到‘一个顶俩’这个词语上的,可以共同学习下~
ykcbf 发表于 2020-7-15 15:08
运行后啥也没出现。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-10 09:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表