Python 3.3,找到字谜?

时间:2012-12-07 00:32:17

标签: python

我正在尝试用Python创建一个找到字谜的程序。这是我目前的代码:

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 

我无法输出字谜。字谜应该在一行中,措辞应该反映出找到的字谜的数量。比如...

  

“只有一个(插入字谜)(插入输入的单词)”

     

“(插入字输入)”(插入字谜)“

     

“没有字谜(插入输入的单词)”

     

“(插入输入的单词)不在字典中”)

1 个答案:

答案 0 :(得分: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个。在完成整本字典之前,你无法决定要打印哪个句子。

同时,请注意你有“只有一个”与“不在字典中”的不同情况。因此,您需要某种标记“在词典中找到的entered_word”,您可以在if语句中设置。或者,也许,你可以把特殊情况留下 - 例如,最后,如果你有0结果,你知道它不在字典中。这取决于您是想在结束时还是在循环内部获得更多逻辑。