您必须传播您的palindrome(w)
呼叫的结果:
return palindrome(w)
如果函数在没有执行return
的情况下结束,该函数将自动返回值None
.因此,例如,如果您调用palindrome(["a", "b", "a"])
,您将计算子调用palindrome(["b"])
,然后丢弃其结果,并返回None
以换取palindrome(["a", "b", "a"])
的值.如果使用return palindrome(w)
,则值palindrome(["a", "b", "a"])
将变为值palindrome(["b"])
,这是所需的逻辑.
以下不是错误,而是良好的实践.
可能更好的做法是使函数更通用.与其制作一个只能处理列表的回文函数,为什么不让它可以处理任何序列,包括直接处理字符串呢?但是:
del w[0]
del w[-1]
这在字符串上不起作用,并且会给您一个TypeError:‘Str’对象不支持项删除.不能使用del
来删除字符串中的字符:Python字符串是不可变的.您必须创建不包含第一个和最后一个字符的新字符串:
w = w[1:-1]
现在,该功能将同时适用于palindrome([1, 2, 3])
和palindrome("abc")
.
最后,对"yes"和"no"使用标准布尔类型会更好.如果您需要向用户显示yes
或no
,请在执行测试的函数之外实现此逻辑,最好是在您需要显示它之前的最后一刻.
最终形式:
def palindrome(w):
if len(w)==0 or len(w)==1:
return True
else:
if w[0]==w[-1]:
w = w[1:-1]
return palindrome(w)
else:
return False
s = input()
w = s.replace(" ","")
if palindrome(w):
print("yes")
else:
print("no")