3 回答
TA贡献1712条经验 获得超3个赞
您的函数将检查最后一个数字是否与列表中的其他数字不同。您想要的可能是:
def palindrome(listnum):
for j in range(0, len(listnum)):
t = len(listnum) - j - 1
if listnum[j] != listnum[t]:
return False
return True
assert palindrome([9,0,6,6,0,9])
assert palindrome("ABBA")
assert palindrome([])
assert palindrome("1")
assert palindrome([1.0, 2, 1])
assert not palindrome("lolz")
assert not palindrome([1,2,3])
TA贡献1866条经验 获得超5个赞
这里的主要问题是for循环的嵌套。看来您想以锁步方式更新j和t,但是您从j = 0开始,然后检查t的所有值。然后j = 1,然后再次检查t的所有值,依此类推。
除了嵌套循环,您还可以使用循环计数器来跟踪您要搜索的单词的距离,然后从中计算出j和t。例如
for d in range(len(listnum)/2):
j = d
t = len(listnum) - d - 1
#letter equality check here, return if false
return True
TA贡献1821条经验 获得超6个赞
这不是为什么您的代码不起作用的答案,但是您可能想知道,有一种更简单的方法来确定一个单词是否是回文。根据定义,回文是一个不能通过反转而改变的词。因此:
def is_palindrome(word):
return word == ''.join(reversed(word))
print is_palindrome('906609') # True
其中可能需要解释的唯一部分是joining。这是必要的,因为reversed一个单词一个字母一个字母地返回,因此您首先需要将它们重新组合在一起。
正如评论中指出的那样,另一种书写方式是word == word[::-1]。它的含义完全相同,但可以说有点晦涩难懂。
添加回答
举报