首页 > 解决方案 > 检查字符串是否为回文返回错误结果

问题描述

我正在尝试使用递归检查字符串是否为回文。我目前只是在尝试开发简单的案例。

我的函数将一个字符串作为输入。然后它会去掉标点符号。接下来我要做的是检查单词的第一个字母是否等于单词的最后一个字母。如果是,则返回字符串一。如果不是,则返回第二个字符串。

def palindrome(word):    
    stringOne = "It's a palindrome"
    stringTwo = "It's not a palindrome"
    edit = word.strip("!").strip(",").strip("")

    if edit[0] == edit[-1]:
        return stringOne 
    else:
        return stringTwo

print(palindrome("Yay!"))

代码正在运行。但是,输入字符串“Yay!” (这是回文)返回“这不是回文”。为什么我的if陈述不起作用?

标签: pythonrecursion

解决方案


除了@RWRkeSBZ 在评论中指出的字母大小写问题之外,这是使用递归辅助函数有意义的一个很好的例子。一旦您清理字符串以仅包含字母,就没有理由在递归时再次这样做。相反,我们有一个处理这些问题的例程和一个更集中的递归辅助函数来进行真正的处理:

def palindrome_recursive(letters):
    if len(letters) <= 1:
        return True

    if letters[0] != letters[-1]:
        return False

    return palindrome_recursive(letters[1:-1])

def palindrome(phrase):
    stringOne = "It's a palindrome"
    stringTwo = "It's not a palindrome"

    edit = phrase.strip("!,").strip().lower()

    if palindrome_recursive(edit):
        return stringOne

    return stringTwo

print(palindrome("Able was I ere I saw Elba!"))

推荐阅读