所以我正在做exercise 6 from chapter 7 from Think Python并且让我感到奇怪的是,我作为解决方案编写的这段代码不起作用:
def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
is_palindrome(middle(word))
else:
return False
它没有输入任何递归,我不知道为什么。对于长度超过1个字符的单词,它返回None。为什么是这样?当单词的长度达到1或更小时,它应该返回True! 为什么不起作用?
PS:这是第一个,最后一个和中间的定义:
def first(word):
return word[0]
def last(word):
return word[-1]
def middle(word):
return word[1:-1]
答案 0 :(得分:5)
您错过了return
:
def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
return is_palindrome(middle(word)) # <--
else:
return False
因此,当您输入None
块时,您的当前片段将返回elif
,因为您在那里没有明确的return语句。换句话说,你做计算is_palindrome(middle(word))
,但你对结果一无所知。
也许通过一个简单的例子会有所帮助。考虑使用'aba'
:
word
现在是'aba'
len(word) <= 1
为False
,if
- 未输入正文。first(word) == last(word)
是True
,elif
- 正文输入:
word
现在是'b'
len(word) <= 1
是True
,if
- 正文输入:
True
已退回return
中没有elif
)None
已退回答案 1 :(得分:1)
添加return
return is_palindrome(middle(word))
答案 2 :(得分:1)
我认为您缺少在函数的第5行返回方法。
return is_palindrome(middle(word))
应该在那里而不是
is_palindrome(middle(word))