2012-12-07 59 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个结果,你就知道它不在字典中。这取决于你是否想要更多的逻辑在最后,或者在循环中。