Python:由于某种原因,检查palindrome返回False

时间:2013-05-12 09:48:09

标签: python palindrome

我试图编写一个程序,我需要做的一件事就是检查一个数字是否是回文。 出于某种原因,我写的内容不起作用:

flag = True
for j in range(0, len(listnum)):
    for t in range(len(listnum) -1, -1, -1):
        if listnum[j] == listnum[t]:
            flag = True
            print "false"
         else:
            flag = False
            print "false"
            break
if flag == True:
    return True
else:
    return False

打印" false" /" true"部分用于调试。 我从我写的一个函数中取出了这个代码,这就是为什么它会说"返回True / False"。

我检查的号码是906609

3 个答案:

答案 0 :(得分:2)

这不是你的代码不起作用的答案,但你可能有兴趣知道有一种更简单的方法来确定一个单词是否是回文。根据定义,回文是一个不会通过反转来改变的词。因此:

def is_palindrome(word):
    return word == ''.join(reversed(word))

print is_palindrome('906609') # True

可能需要解释的唯一部分是join。这是必要的,因为reversed一个接一个地返回单词的字母,所以你首先需要把它们放在一起。

正如评论中所指出的,另一种写作方式是word == word[::-1]。它意味着完全一样,但可以说有点神秘。

答案 1 :(得分:2)

这里的主要问题是for循环的嵌套。看起来你想要在锁定步骤中更新j和t,而是从j = 0开始,然后检查t的所有值。然后j = 1并再次检查t的所有值,等等。

您可以使用循环计数器来跟踪您正在查看单词的距离,然后从中计算j和t,而不是嵌套循环。 E.g。

for d in range(len(listnum)/2):
    j = d
    t = len(listnum) - d - 1
    #letter equality check here, return if false

return True

答案 2 :(得分:1)

您的功能会检查最后一个号码是否与列表中的任何其他号码不同。你想要的可能是:

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])