python之异位构词游戏

异位构词游戏

编写一个程序,使之能从文件中读取单词的列表并且打印出所有符合异位构词的组合。下面是一个输出异位构词的样例:

{1: [‘alas’, ‘aals’], 2: [‘baas’, ‘abas’], 3: [‘babe’, ‘abbe’], 4: [‘bade’, ‘abed’, ‘bead’], 5: [‘bate’, ‘abet’, ‘beat’, ‘beta’]

异位构词是将组成一个词或短句的字母重新排列顺序,所有字母的每次出现都被被使用一次,这样构造出另外一些新的词或短句。
异位构词文件下载链接:https://pan.baidu.com/s/1LE4ncGqRffUmguLVQRxEWw 密码:moox。文档中有10W个单词,如果你认为你的代码无懈可击了但是当用这个文档的单词估计也会有BUG。

参考代码

import sys
sys.setrecursionlimit(1000000)	#调整递归最大深度
files = open("words.txt")   #读取文档
word = dict()   #定义字典
n = "测试\n"  #n的内容纯属瞎填
while n != "":   #给字典添加键对值
    n = files.readline().strip()    #依次读取文档内容并赋值给n然后在添加到字典当中
    if len(n) not in word:  #每次循环n的长度作为word中的键如果没有找到则添加进去
        word[len(n)] = [n]  #添加字典键和值(值以列表的方式添加),字典中的值是n的内容。它的键就是n的长度
    else:
        word[len(n)].append(n)  #把相同长度的单词添加到同一个键中(以列表的方式加入)

"""这个函数是删除指定的列表
	由seek函数调用"""
def dels(lis,del_list):
    o = 0
    for i in range(len(del_list)):
        if i == 0:
            del lis[del_list[i]]
        else:
            o = o + 1
            del lis[del_list[i]-o]
    return lis


"""这个函数用递归判断单词是否符合异位构词的条件
	如果符合条件就会保存
		最后会返回一个字典
	"""
def seek(dict,temporary=dict(),n=0):
    number = list()
    number.append(0)
    for i in range(len(dict)):
        swap = dict[i]
        if i not in number:
            for m in dict[0]:
                swap = swap.replace(m,"",1)
            if swap == "":
                number.append(i)
                if n not in temporary:
                    temporary[n] = [dict[i],dict[0]]
                else:
                    temporary[n].append(dict[i])
    dict = dels(dict,number)
    if dict == []:
        return temporary
    else:
        return seek(dict, temporary,n+1)

print(seek(word[1]))

只能在家带着学点python因为不会任何算法代码写的有点乱,希望大家能够看懂。

你可能感兴趣的:(python)