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 

アナグラムの出力に問題があります。アナグラムは 1 行に収める必要があり、文言は見つかったアナグラムの量を反映する必要があります。そのような...

「(入力された単語を挿入) に対して (アナグラムを挿入) は 1 つしかありません」

「(入力された単語を挿入) には (アナグラムを挿入) があります」

「(入力された単語を挿入) のアナグラムはありません」

「(入力された単語を挿入)は辞書にありません」)

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 個あるかもしれません。辞書全体を読み終えるまで、印刷する文を決めることはできません。

一方、「1 つしかない」と「辞書にない」のケースが異なることに注意してください。ifそのため、そのステートメント内に設定する、「辞書にinput_wordが見つかりました」というフラグが必要です。または、特殊なケースをそのままにしておくこともできます。たとえば、最後に結果が 0 の場合、それが辞書にないことがわかります。それは、最後にロジックを追加するか、ループ内に追加するかによって異なります。

于 2012-12-07T00:39:45.977 に答える