【发布时间】:2012-07-14 20:20:57
【问题描述】:
我的任务是定义一个过程 is_palindrome,它将一个字符串作为输入,并返回一个布尔值,指示输入字符串是否是回文。在这种情况下,单个字母应返回 True,空字符串 '' 也应返回 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
【问题讨论】:
-
在 if 子句中尝试
result = is_palindrome(s[1:len(s)-1]) -
如果这是作业,请标记它。
-
这很奇怪:
(ord(s[0]) - ord(s[len(s)-1])) == 0。s[0] == s[-1]不行吗? -
@NedBatchelder - 不,不是家庭作业。在我的生活中,我已经过去了。我只是在玩免费的在线课程来学习。 :)
-
@JoranBeasley:好吧,如果我们这样做,为什么不
s == s[::-1]?大概OP有递归要求。 [PS:单字母的情况有效,因为s[0] == s[len(s)-1] == s[1-1] == s[0]。]