python:递归检查以确定字符串是否为回文

2024-03-28 22:05:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是定义一个过程是回文,它接受一个字符串作为输入,并返回一个布尔值,指示输入字符串是否是回文。在这种情况下,单个字母应该返回True,空字符串也应该返回''

不幸的是,我没有得到预期的结果。我很感激你的帮助。

我的代码版本1:

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

print is_palindrome('')
#>>> True    (expected = True)

print is_palindrome('abab')
#>>> False    (expected = False)

print is_palindrome('abba')
#>>> None    (expected = True)

print is_palindrome('andrea')
#>>> None    (expected = False)

print is_palindrome('abaaba')
#>>> None    (expected = True)

我通过调试器跟踪我的代码,当代码采用适当的路径时,逻辑似乎是正确的。然而,对于上面强调的一些情况,最终结果似乎会切换到“无”。

如果我将代码更改为以下内容:

我的代码版本2:

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

print is_palindrome('')
#>>> True    (expected = True)

print is_palindrome('abab')
#>>> False    (expected = False)

print is_palindrome('abba')
#>>> Error    (expected = True)
UnboundLocalError: local variable 'result' referenced before assignment 

print is_palindrome('andrea')
#>>> Error   (expected = False)         
UnboundLocalError: local variable 'result' referenced before assignment

print is_palindrome('abaaba')
#>>> Error    (expected = True)
UnboundLocalError: local variable 'result' referenced before assignment

Tags: 字符串代码nonefalsetruelenreturnif
3条回答
# ask user to enter any string
a = raw_input("Enter the string : ")
#palindrome check
print (a == a[::-1]) and "String is palindrome" or "String is not palindrome"

在第一个示例中,您忘记了返回语句:

def is_palindrome(s):
    if s == '':
        return True
    else:
        if (ord(s[0]) - ord(s[len(s)-1])) == 0:
            # v-- forgot this here
            return is_palindrome(s[1:len(s)-1])
        else:
            return False
        is_palindrome(s[1:len(s)-1])

需要。。。

        return is_palindrome(s[1:len(s)-1])

在你的第一个版本中,或者

        result = is_palindrome(s[1:len(s)-1])

在你的第二秒。否则,您实际上永远不会将递归调用的返回值传播回原始调用方。

相关问题 更多 >