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

我正在尝试编写程序,我需要做的一件事情就是检查数字是否是回文。由于某些原因,我写的内容不起作用:


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”部分用于调试。我从编写的函数中取出了这段代码,这就是为什么它说“ return True / False”。



慕桂英3389331
浏览 170回答 3
3回答

交互式爱情

您的函数将检查最后一个数字是否与列表中的其他数字不同。您想要的可能是:def palindrome(listnum):    for j in range(0, len(listnum)):        t = len(listnum) - j - 1        if listnum[j] != listnum[t]:            return False                return Trueassert 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。例如for d in range(len(listnum)/2):    j = d    t = len(listnum) - d - 1    #letter equality check here, return if falsereturn True 

达令说

这不是为什么您的代码不起作用的答案,但是您可能想知道,有一种更简单的方法来确定一个单词是否是回文。根据定义,回文是一个不能通过反转而改变的词。因此:def is_palindrome(word):    return word == ''.join(reversed(word))print is_palindrome('906609') # True其中可能需要解释的唯一部分是joining。这是必要的,因为reversed一个单词一个字母一个字母地返回,因此您首先需要将它们重新组合在一起。正如评论中指出的那样,另一种书写方式是word == word[::-1]。它的含义完全相同,但可以说有点晦涩难懂。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python