python – 删除另一个列表中的列表成员

我正在编写一个程序来检查用户输入给出的单词或句子是否是回文.这是迄今为止的计划:

def reverse(text):
    a = text[::-1]
    if a == text:
        print "Yes, it's a palindrome."
    else:
        print "No, it's not a palindrome."

string = str(raw_input("Enter word here:")).lower()

reverse(string)

但是,此代码不适用于句子.所以我试着这样做:

import string

def reverse(text):
    a = text[::-1]
    if a == text:
        print "Yes, it's a palindrome."
    else:
        print "No, it's not a palindrome."

notstring = str(raw_input("Enter word here:")).lower()

liststring = list(notstring)

forbiddencharacters = string.punctuation + string.whitespace

listcharacters = list(forbiddencharacters)

newlist = liststring - listcharacters

finalstring = "".join(newlist)

reverse(finalstring)

我的目标是将标点符号和空格放入列表中,然后将这些字符减去用户的输入,这样即使字符串有标点符号和/或空格,程序也可以判断它是否是回文.但是,我不知道如何将列表中的元素减去另一个列表中的元素.我这样做,通过创建另一个等于用户输入减去字符的列表不起作用(我在我的Xubuntu终端模拟器中尝试过).除此之外,当我运行程序时出现此错误:

Traceback (most recent call last):
  File "reverse.py", line 12, in <module>
    forbiddencharacters = string.punctuation + string.whitespace
AttributeError: 'str' object has no attribute 'punctuation'

好的,所以我更改了变量名称,我没有上面的错误.现在我仍然不知道如何减去列表的元素.

由于我是初学程序员,这对你来说似乎很愚蠢.如果是这样的话,我很抱歉.如果有人能解决我遇到的两个问题中的一个或两个,我将非常感激.在此先感谢您的帮助.对不起,英文不好,帖子很长:)

最佳答案 你应该添加一些过滤,因为palindromes有各种语法技巧(空格,逗号等).

palindrome = "Rail at a liar"

def is_palindrome(text):
    text = text.lower()                               #Avoid case issues
    text = ''.join(ch for ch in text if ch.isalnum()) #Strips down everything but alphanumeric characters
    return text == text[::-1]

if is_palindrome(palindrome):
    print "Yes, it's a palindrome."
else:
    print "No, it's not a palindrome."
点赞