使用Python测试回文时输出不正确

时间:2019-07-11 09:54:41

标签: python

我正在编写一个程序,以使用Python使用列表来识别回文。但是,我的程序始终声明输入的单词是回文,即使显然不是。


word = input("Type a word, and I'll tell you if it's a palidrome or not: ")
word = " ".join(word)

new_word = word.split() #forms a list from user-inputted word
print(new_word)

variable = new_word
variable.reverse() #reverses word list 
print(variable)

if variable == new_word:
    print("This is a palidrome")
else:
    print("This is not a palidrome")

4 个答案:

答案 0 :(得分:1)

variablenew_word列表的浅表副本,因此variable也被颠倒了(因为它指向同一列表) 。 尝试使用

variable = copy.deepcopy(new_word)

答案 1 :(得分:1)

也可以通过反转输入字符串直接获得结果,请使用以下代码:-

word = input("Type a word, and I'll tell you if it's a palidrome or not: ")
new_word = list(reversed(word))  #Reversing the string
new_word = ''.join(new_word)  # Converting list into string

if word == new_word :
    print("This is a palidrome")
else:
    print("This is not a palidrome") 

OR

我对您的代码进行了更改:-

word = input("Type a word, and I'll tell you if it's a palidrome or not: ")
word = " ".join(word)

new_word = word.split() #forms a list from user-inputted word
print(new_word)

variable = new_word.copy()   # This is the change I have made.
variable.reverse() #reverses word list 
print(variable)

if variable == new_word:
    print("This is a palidrome")
else:
    print("This is not a palidrome")

希望对您有帮助。

答案 2 :(得分:1)

variable == new_word始终为真的原因是在这种情况下,赋值运算符仅创建一个新的指针,而不是一个新的列表。

换句话说,variable = new_word不会复制列表-它使variable指向内存中的同一列表。因此,当您反转variable时,实际上是在反转原始列表。如果您在运行new_word之后打印variable.reverse() ,就会看到此信息。

This article是对指针的有用介绍,而this one是对赋值,浅拷贝与深拷贝的很好解释。由于您的列表只是一个字符串列表,因此浅拷贝即可解决问题。[1]深度复制是多余的,但是也可以。

浅拷贝:

variable = list(new_word)

对于Python 3.3和更高版本,列表具有内置的copy方法:

variable = new_word.copy()

另一种选择是使用切片,但不提供开始或结束索引:

variable = new_word[:]

最后,copy模块提供了用于创建浅表副本的功能:

variable = copy.copy(new_word)

深拷贝:

import copy
variable = copy.deepcopy(new_word)

[1]尽管mrtnlrsn表示您进行了浅表复制,但事实并非如此,如链接文章所述。

答案 3 :(得分:0)

您需要更换

variable = new_word

使用

variable = new_word[:]

这将为您的变量制作一个适当的副本,您可以独立对其进行操作。