0

我正在尝试用 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 

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

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

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

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

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

4

1 回答 1

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 个。在读完整本词典之前,您无法决定要打印哪个句子。

同时,请注意,“只有一个”与“不在字典中”有不同的情况。if因此,您需要在该语句中设置的“在字典中找到 inputted_word”的某种标志。或者,您可以忽略特殊情况——例如,最后,如果您有 0 个结果,您就知道它不在字典中。这取决于您是在最后还是在循环内部需要更多逻辑。

于 2012-12-07T00:39:45.977 回答