我必须在文本文件中搜索给定单词的字谜。文本文件每行有一个单词。到目前为止,我已经设法编写了一个函数,该函数根据给定的单词生成一个字典,其中的键是单词中的一个字母,它的值是字母在单词中的次数。第二个函数循环遍历文本文件的每一行,创建具有相同键和值的第二个字典,并比较两者。如果两者相等,则该函数会将该单词添加到列表中。一旦函数完成循环遍历文本文件,它应该打印字谜列表,但它打印一个空白列表。这是我的代码,我不知道它出了什么问题。
这是用于创建给定单词的字典。
word= input("Enter a word: ")
letterdict = {}
def count_letters(word,letterdict):
for letter in word:
letterdict[letter] = letterdict.get(letter,0) + 1
return letterdict
print(count_letters(word,letterdict))
这是为了循环文本文件并进行比较
def search():
count_letters(word,letterdict)
anagrams = []
letterdict2={}
f = open('EnglishWords.txt', 'r')
for letter in f:
letterdict2[letter] = letterdict2.get(letter,0) + 1
if letterdict == letterdict2:
anagrams.append[f]
letterdict2.clear()
f.close()
anagrams.sort() #put list in alphabetical order
return print(anagrams)
search()
答案 0 :(得分:4)
更快的算法(在循环内部,无论如何):只需翻阅整个字典一次,创建一个每行两个单词的新文件;第一个是带字母按字母顺序排列的单词,然后是单词本身,例如:
aaadkrrv aardvark
aabcsu abacus
. . .
然后,对该文件进行排序。现在,查找单词的所有字谜就是直接查找排序列表。
答案 1 :(得分:0)
这看起来像是一个不使用global
关键字来访问(和写入)您创建的letterdict
的问题。在本地声明您的变量并使用函数参数将它们传递给您的程序。 Python不提供强大的全局变量支持(它就在那里,但需要注意细节才能使用)。
考虑重写你的功能:
def count_letters(word):
letterdict = dict()
for letter in word:
letterdict[letter] = letterdict.get(letter,0) + 1
return letterdict
def search(word):
letterdict = count_letters(word)
anagrams = []
letterdict2={}
with open('EnglishWords.txt', 'r') as f:
for line in f:
for letter in line:
letterdict2[letter] = letterdict2.get(letter,0) + 1
if letterdict == letterdict2:
anagrams.append[line]
letterdict2.clear()
anagrams.sort() #put list in alphabetical order
return anagrams
关于原始代码的一些注释:
return print(anagrams)
可能没有做任何事情,似乎是代码中的语法错误。for letter in f:
将文件的行加载到letter
count_letters(word,letterdict)
对计算值letterdict