Python:检查是否为回文返回 False 的原因。

2024-04-23 06:33:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个程序,我需要做的一件事就是检查一个数字是否是回文。 因为某些原因,我写的不起作用:

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

打印“假”/“真”部分用于调试。 我从我写的一个函数中取出了这段代码,这就是为什么它说“returntrue/False”。在

我查的号码是906609


Tags: in程序falsetrueforlenreturnif
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])

这里的主要问题是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

这不是为什么你的代码不能工作的答案,但是你可能有兴趣知道有一个更简单的方法来确定一个单词是否是回文。根据定义,回文是一个不会因颠倒而改变的词。因此:

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

print is_palindrome('906609') # True

唯一需要解释的是join。这是必需的,因为reversed一个接一个地返回单词的字母,所以您首先需要将它们重新组合起来。在

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

相关问题 更多 >