为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英3389331 2021-03-03 09:10:37
我正在尝试编写程序,我需要做的一件事情就是检查数字是否是回文。由于某些原因,我写的内容不起作用:flag = Truefor 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"            breakif flag == True:    return Trueelse:    return False打印“ false” /“ true”部分用于调试。我从编写的函数中取出了这段代码,这就是为什么它说“ return True / False”。
查看完整描述

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


查看完整回答
反对 回复 2021-03-23
?
心有法竹

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 


查看完整回答
反对 回复 2021-03-23
?
达令说

TA贡献1821条经验 获得超6个赞

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


def is_palindrome(word):

    return word == ''.join(reversed(word))


print is_palindrome('906609') # True

其中可能需要解释的唯一部分是joining。这是必要的,因为reversed一个单词一个字母一个字母地返回,因此您首先需要将它们重新组合在一起。


正如评论中指出的那样,另一种书写方式是word == word[::-1]。它的含义完全相同,但可以说有点晦涩难懂。


查看完整回答
反对 回复 2021-03-23
  • 3 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信