我期望返回True,但是返回None。
我在代码中放入了一些打印语句,以帮助调试。它显示了'print(“ Got True”)'语句已运行,因此我知道代码最终在'return True'之前位于代码的右分支中,但由于某种原因,我得到了'None'。但是,当我输入不是回文的单词时,“ return False”非常有效。
感谢您的帮助。
def first(word):
return word[0]
def last(word):
return word[-1]
def middle(word):
return word[1:-1]
def is_palindrome(word):
print(word)
if len(word) <= 1:
print("Got True")
return True
else:
print(len(word))
if first(word) == last(word):
is_palindrome(middle(word))
else:
print("Got False")
return False
print(is_palindrome('allen'))
print("\n")
print(is_palindrome('redivider'))
输出:
allen
5
Got False
False
redivider
9
edivide
7
divid
5
ivi
3
v
Got True
None
答案 0 :(得分:1)
即使在递归函数中,也必须使用return语句返回值:
if first(word) == last(word):
return is_palindrome(middle(word))
答案 1 :(得分:1)
您需要返回函数的每个分支,例如:
def is_palindrome(word):
print(word)
if len(word) <= 1:
print("Got True")
return True
else:
print(len(word))
if first(word) == last(word):
return is_palindrome(middle(word)) # **Added return**
else:
print("Got False")
return False
但是您可以简化结构,因为如果您return
则不需要else:
子句,因为它无法到达,因此可以这样写:
def is_palindrome(word):
print(word)
if len(word) <= 1:
print("Got True")
return True
print(len(word))
if first(word) == last(word):
return is_palindrome(middle(word))
print("Got False")
return False
答案 2 :(得分:0)
您应该在所有可能的条件分支中返回结果。您可以直接使用return语句,也可以将is_palindrome函数的结果捕获到某个变量中,然后在令人困惑的情况下返回它。