2012-12-03 33 views
3

我試圖從生成的anagrams列表中找到迴文。這裏的轉折點是我最初的輸入是一個迴文列表。我本質上是試圖自動尋找一個迴文的迴文(不是作業,只是一個英文書呆子)。從anagrams找到迴文

輸入的原始迴文來自'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() 
+1

哪裏定義'wordin'? (或是一個假設函數的輸入參數?) – inspectorG4dget

+0

而不是你的'anagramchk',你可以簡單地使用'sorted(word.lower())== sorted(chkword.lower())' - 排序放置按照規範的順序排列所有的字符串 - 或者你可以使用'collections.Counter'類 - Counter(word.lower())== Counter(chkword.lower()) - 來比較計數。 – DSM

+0

@ inspectorG4dget我對此遺漏了一條線。這給我帶來了另一個問題,我可以嵌套多個這樣的「線路」電話嗎? – ajnachakra

回答

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') 

希望這有助於

+0

忍者編輯,看起來像你沒有完成鍵入=) – ajnachakra

+0

@irrelephant:你是對的。感謝bugreport。已解決 – inspectorG4dget

+0

謝謝!如果我在開頭添加如下內容,這是否可以工作:dictfilepath ='dictionary.txt' palsfilepath ='pals.txt'(假設它們在同一個目錄中) – ajnachakra