测试失败 - python回文检查

时间:2013-11-13 11:17:19

标签: python python-2.7 doctest

我用doctests创建了一个非常简单的回文检查器。

我遇到了上一次doctest的问题。它失败了,没有执行ignorecase=True。我无法弄清楚为什么最后一次测试失败了。

代码:

# This Python file uses the following encoding: utf-8
def isPalindrome(s, ignorecase=False):
    """
    >>> type(isPalindrome("bob"))
    <type 'bool'>
    >>> isPalindrome("abc")
    False
    >>> isPalindrome("bob")
    True
    >>> isPalindrome("a man a plan a canal, panama")
    True
    >>> isPalindrome("A man a plan a canal, Panama")
    False
    >>> isPalindrome("A man a plan a canal, Panama", ignorecase=True)
    True
    """

    # Create an empty string "onlyLetters"
    # Loop over all characters in the string argument, and add each 
    #   character which is a letter to "onlyletters"

    # Reverse "onlyletters" and test if this is equal to "onlyletters"

    #s = ""
    news = ""
    for eachLetter in s:
        if eachLetter.isalpha():
            news += eachLetter
    #print news

    onlyLetters = news
    #print onlyLetters   

    onlyletters = news[::-1]
    #print onlyletters

    if onlyLetters == onlyletters:
        return True
    else:
        return False

3 个答案:

答案 0 :(得分:3)

请注意,我讨厌你的变量选择。 onlylettersonlyLetters相反,是的,显然......无论如何。

你没有使用ignorecase所以它怎么能起作用?

这是一个可能的解决方案:

if ignorecase:
    return onlyLetters.lower() == onlyletters.lower()
else:
    return onlyLetters == onlyletters

答案 1 :(得分:1)

我的2¢解决方案:

def is_palindrome(s):
    if s == '':
        return True
    else:
        if s[0] == s[-1]:
            return is_palindrome(s[1:-1])
        else:
            return False

输出:

print is_palindrome('')
#>>> True 
print is_palindrome('abab')
#>>> False 
print is_palindrome('abba')
#>>> True

答案 2 :(得分:0)

在降低案件后,我的解决方案是用任何无字母替换任何非字母。

import re
def isPalindrome(s, ignoreCase):
    if ignoreCase: 
       s = s.lower()
    onlyLetters = re.sub("[^a-z]+", "", s)
    return(onlyLetters == onlyLetters[::-1])