2012-12-07 81 views
0

我試圖使一個Python程序,發現字謎。這裏是我當前的代碼:Python 3.3,找到anagrams?

def anagram(word,checkword): 
    for letter in word: 
     if letter in checkword: 
      checkword = checkword.replace(letter, '') 
     else: 
      return False 
    return True 

while True: 
    f = open('listofwords.txt', 'r') 
    try: 
     inputted_word = input('Word? ') 
     for word in f: 
      word = word.strip() 
      if len(word)==len(inputted_word): 
       if word == inputted_word: 
        continue 
       elif anagram(word, inputted_word): 
        print(word) 
         #try: 
          #if word == 1: 
          #print ('The only anagram for', user_input, 'is', word) 
         #elif word > 1: 
          #print ('The anagrams for', user_input, 'are', word) 
         #except TypeError: 
          #pass 
    except: 
     break 
我有麻煩 輸出的字謎

。字謎應該排成一行,措辭應該反映找到的字謎的數量。如...

「世界上只有一個(插入字謎)爲(輸入插入Word)」

「有(插入字謎)爲(輸入插入Word)」

「有對(輸入插入Word)」

‘的(輸入插入Word)沒有字謎未在字典中’)

+1

我們不是在這裏做你的功課你。你有什麼嘗試? – Colleen

+0

好的,我編輯了這個問題。代碼中的評論是我嘗試過的。 – Ace

+1

您的anagram()函數將返回任何屬於另一個單詞部分的單詞,例如,如果你正在檢查'貓'對'撒切爾',你仍然會成爲現實。 。 。我建議將這兩個單詞轉換爲列表並比較排序列表。 – ernie

回答

2

下面是一些提示:

首先,如果您有任何打印它們之前打印字謎的數量,你需要抓住他們的名單,而你循環。事情是這樣的:

anagrams = [] 
for word in f: 
    word = word.strip() 
    if len(word)==len(inputted_word): 
     if word == inputted_word: 
      continue 
     elif anagram(word, inputted_word): 
      anagrams.append(word) 

現在你只需要弄清楚如何打印右側的文本末的基礎上,什麼是在anagrams列表。

至於你嘗試過什麼:

#try: 
    #if word == 1: 
    #print ('The only anagram for', user_input, 'is', word) 
#elif word > 1: 
    #print ('The anagrams for', user_input, 'are', word) 
#except TypeError: 
    #pass 

這不可能工作。首先,word是一個字,因此它不可能是等於1,或大於1更大。另外,如果你只經歷了字典中的前20個單詞,並找到了第一個字謎,你怎麼能知道這是唯一的字謎?字典的其餘部分可能有1000個。在完成整本詞典之前,您無法決定要打印哪個句子。

同時,請注意,你有不同的情況下,爲「世界上只有一個」與「不是在字典」。因此,您需要某種標誌來查找「在dictionary中找到input_word」,您在if聲明中設置了該標誌。或者,也許你可以將特殊情況拋出 - 例如,最後,如果你有0個結果,你就知道它不在字典中。這取決於你是否想要更多的邏輯在最後,或者在循環中。