0

我正在尝试编写一个程序,我需要做的一件事是检查一个数字是否是回文。出于某种原因,我写的东西不起作用:

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

print "false"/"true" 部分用于调试。我从我编写的函数中取出了这段代码,这就是为什么它说“返回真/假”。

我正在检查的号码是 906609

4

3 回答 3

2

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

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

print is_palindrome('906609') # True

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

正如评论中指出的那样,另一种写法是word == word[::-1]. 它的意思完全一样,但可以说有点神秘。

于 2013-05-12T10:05:31.513 回答
2

这里的主要问题是 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
于 2013-05-12T10:06:39.857 回答
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])
于 2013-05-12T10:01:37.353 回答