我在python中的palindrome程序上需要帮助

时间:2017-01-09 21:03:07

标签: python palindrome

这是我目前的代码:

  def main():
        list1 = [(x) for x in input()]
        if (list1 == list1.reverse()):
            print("The sentence is a palindrome.")
        else:
            print("The sentence is not a palindrome.")

    main()

它不起作用。当我在论坛上找到它们时,我做了以下调整并且它有效:

def main():
    list1 = [(x) for x in input()]
    if (list1 == list1[::-1]):
        print("The sentence is a palindrome.")
    else:
        print("The sentence is not a palindrome.")

main()

我的问题是,为什么第一个版本不起作用? 它始终打印:句子不是回文。

1 个答案:

答案 0 :(得分:4)

list1.reverse()就地工作。它会反转list1并返回None,因此您要将列表与None进行比较,并始终False ...

第二个代码将list1的反向副本作为list返回,因此两个列表都会进行比较并且有效。

注意:另一个陷阱是与list1 == reversed(list1)进行比较。这可以在python 2中工作,但不能在python 3中工作,因为reversed已经变成了可迭代的。

除此之外:不要list1 = [(x) for x in input()],而只是list1 = list(input())

(或者正如一些优秀的评论者建议,直接使用str类型,根本不需要转换为字符串,[::-1]操作也适用于字符串,因此只需更改为list1 = input()在你的第二个代码片段中)