我的任务是定义一个过程is_palindrome, 以字符串作为输入并返回一个布尔值来指示输入的字符串是否是回文。在这种情况下,单个字母应返回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
result = is_palindrome(s[1:len(s)-1])
- Joran Beasley(ord(s[0]) - ord(s[len(s)-1])) == 0
。s[0] == s[-1]
行不行? - Ned Batchelders == "".join(reversed(s))
也可以用来判断一个回文。 - Joran Beasleys == s [:: -1]
?假设OP有递归要求。[PS:单字母情况有效,因为s [0] == s [len(s)-1] == s [1-1] == s [0]
]。 - DSM