3

生成されたアナグラムのリストから回文を見つけようとしています。ここでのひねりは、私の最初の入力が回文のリストであることです。私は基本的に、回文のアナグラムである回文のハントを自動化しようとしています(宿題ではなく、英語のオタクです)。

入力用の元の回文は、回文が行で区切られ、スペースと数字以外の文字が削除された「pals.txt」から取得されます。英英辞書ファイル「dictionary.txt」を使用してアナグラムを生成しています。

私はまだ非常に初心者のプログラマーであるため、ご意見をいただければ幸いです。ありがとうございました!

def isPalindrome(s):
    return s.lower() == s[::-1].lower()

def anagramchk(word,chkword):
    for letter in word:
        if letter in chkword:
            chkword = chkword.replace(letter, '', 1)
        else:
            return 0
    return 1

f0 = open('pals.txt', 'r')
f1 = open('dictionary.txt', 'r')
for line in f0:
    wordin = line
    for line in f1:
        line = line.strip()
        if len(line) >= 4:
            if anagramchk(line, wordin):
                if isPalindrome(line):
                    print line
f0.close()
f1.close()
4

1 に答える 1

2
import collections

def isPalindrome(s):
    return s.lower() == s[::-1].lower()

def anagramchk(word,chkword):
    return sorted(word.lower()) == sorted(chkword.lower())

def allAnagrams(dictfilepath):
    answer = collections.defaultdict(list)
    with open(dictfilepath) as dictfile:
        for line in dictfile:
            word = line.strip().lower()
            answer[''.join(sorted(word))].append(word)
    return answer

def fetchAllAnagrams(wordin, anagrams):
    return anagrams[''.join(sorted(wordin.lower()))]

def main(dictfilepath, palsfilepath):
    anagrams = allAnagrams(dictfilepath)
    with open(palsfilepath) as palfile:
        for line in palfile:
            word = line.strip().lower()
            if isPalindrome(word):
                for anagram in anagrams[''.join(sorted(word))]:
                    if isPalindrome(anagram):
                        print "%s is an anagram of %s" %(anagram, word)

ファイルパスが'path/to/dictfile'とであるとすると、次のように'path/to/palsfile'呼び出すことができます。main

main('path/to/dictfile', 'path/to/palsfile')

お役に立てれば

于 2012-12-03T02:05:56.657 に答える