2012-07-09 74 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())