2016-05-13 87 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這是非常簡單的天才! –

相關問題