2012-07-09 123 views
2

下面是一個更大的程序的一部分。Palindrome函數不能在Python中工作

wordStr = open("words.txt",'rU') 

def isPalindrome(wordStr): 
    palindromeCount = 0 
    for word in wordStr: 
     if word == word[::-1]: 
      palindromeCount += 1 
    print palindromeCount 

isPalindrome(wordStr) 

words.txt包含數千個單詞,它與程序位於同一個文件夾中。有了這個功能,我試圖通過並計算文本文件中迴文的單詞數量(拼寫相同的正面和反面)。它每次只返回0,甚至從未進入if語句,我無法弄清楚爲什麼。

+0

爲什麼使用'rU'作爲讀取模式? – Blender 2012-07-09 00:30:01

+0

@Blender,他們應該使用什麼? – huon 2012-07-09 00:33:37

+0

是否有任何理由不在rU模式下打開?我將wordStr分配給包含所有單詞的文本文件。在這個函數中,如果我在for和if循環之間添加一個計數器,並在最後打印計數器,它將打印文件中的字數。所以wordStr顯然包含了一堆單詞。 – user1294377 2012-07-09 00:35:33

回答

4

for word in wordStr將在wordStr中迭代。可能你的每一行都有一個行尾標記,如\n。如果你print repr(word),你可能會看到它。

我會嘗試

for word in wordStr: 
    print repr(word) 
    word = word.strip() 
    [etc] 

在第一遍。

+0

好的電話,我忘了換行符。感謝大家。 – user1294377 2012-07-09 00:43:26

2

您需要從各行剝離額外的新行,有你的函數返回一個值:

wordFile = open("words.txt",'rU') 

def PalindromeCount(wordFile): 
    palindromeCount = 0 
    for word in wordFile: 
     word = word.strip() 
     if word == word[::-1]: 
      palindromeCount += 1 
    return palindromeCount 

當我在這個數據上運行它:

meatloaf 
radar 
ardra 
fish 

我得到這樣的結果:2

+1

你的第一個問題不是問題。 'wordStr'中的單詞將遍歷「words.txt」中的行,因爲儘管其名稱「wordStr」是一個打開的文件對象。 – DSM 2012-07-09 00:40:48

+0

哇......又一個「我愛Python!」時刻!!我不知道它是如此工作。 – 2012-07-09 00:41:44

+0

是的,它很酷。 :-) – DSM 2012-07-09 00:42:02

0
sum(word == word[::-1] for word in wordStr.read().split())