2016-05-13 71 views
1

我必须通过文本文件搜索给定单词的字谜。该文本文件每行一个字。到目前为止,我已经设法编写一个函数,它可以从一个给定的单词中创建一个字典,其中的关键字是单词中的一个字母,它的值是该单词在单词中的次数。第二个函数循环遍历文本文件的每一行,创建相同键和值的第二个字典,并比较这两个字符。如果两者相等,则该函数会将该单词添加到列表中。一旦函数在文本文件中循环完成,它应该打印字符列表,但是它将打印一个空白列表。这是我的代码,我不知道它出错的地方。如何搜索给定单词的字谜文本文件

这是用于创建给定单词的字典。

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

对于f中的字母'会产生线条,而不是字母 – robyschek

回答

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
3

更加快速的算法的空间和数字(内无论如何,循环):遍历整个字典一次,创建一个新文件,每行有两个单词;首先是单词字母按字母顺序排列,然后是单词本身,例如:

aaadkrrv aardvark 
aabcsu abacus 
. . . 

然后,对该文件进行排序。现在,查找一个单词的所有变体是一个简单的直接查找到一个排序列表。

+0

您已经为第一次正确使用它的总是好建议赢得了赞赏。 – Aaron3468

+0

@我应该指定更多,早期的学生在编写程序时没有太多的自由。 “就像我们在课堂上做到的那样做”就是给你打分的东西。但是,你给我的算法要好得多,如果不是因为我的限制,我会使用它。 –

+0

@Lee这是非常简单的天才! –

相关问题