【发布时间】:2015-04-12 16:08:56
【问题描述】:
我想写一个 Python 函数,它返回 true 一个字符串 s 是一个回文,也就是说,它等于它的倒数。例如,“racecar”和“abba”是回文。到目前为止,这是我不成功的尝试。
def ispalindrome(s):
if len(s) == 1:
return s
else:
reverse = s[-1] + ispalindrome(s[:-1])
当我告诉我的函数返回反向时,我没有问题,但是,我对如何进行比较以返回布尔值感到困惑。
def ispalindrome(s):
if len(s) == 1:
return s
else:
reverse = s[-1] + ispalindrome(s[:-1])
return a == reverse
使用上面的函数会产生以下错误
>>>ispalindrome('racecar')
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
ispalindrome('racecar')
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
File "/Users/Nadir/Desktop/Untitled.py", line 24, in ispalindrome
reverse = s[-1] + ispalindrome(s[:-1])
TypeError: Can't convert 'bool' object to str implicitly
现在我完全明白为什么会产生上述错误了。这是因为一些递归函数返回一个布尔值并试图将其添加到字符串中;但我不能做的是如何避免这个错误。
【问题讨论】:
-
为什么不只测试第一个和最后一个字符,然后在递归之前将它们切掉?
-
我可以,但我正在寻找一种可以使用产生的“反向”的方法。
标签: python-3.x recursion boolean