Can I make a code in python that ignores special characters such as commas, spaces, exclamation points, etc?

狂风中的少年 提交于 2019-12-02 05:29:59

You need to filter before testing then:

letters = [c.casefold() for c in my_str if c.isalpha()]

would pick out only the letters and lowercase them, after which you can test of those letters form a palindrome:

return letters == letters[::-1]

This works because str.isalpha() returns True only for letters.

Combined into your function:

def is_palindrome(my_str):
    letters = [c.casefold() for c in my_str if c.isalpha()]
    return letters == letters[::-1]

Demo:

>>> def is_palindrome(my_str):
...     letters = [c.casefold() for c in my_str if c.isalpha()]
...     return letters == letters[::-1]
... 
>>> is_palindrome("Rats live on no evil star")
True
>>> is_palindrome("Hello World!")
False
>>> is_palindrome("Madam, I'm Adam")
True
my_str = my_str.casefold()
my_str = ''.join(e for e in my_str if e.isalpha())

This should recreate my_str with only alphabetical characters, using .isalpha(). Then do the test on that. If you want to keep a record of original string, just stored the recreated version is a temporary string.

If you just want to exclude punctuation and spaces you can use str.translate:

from string import punctuation

d = {k: None for k in punctuation}
d[" "] = None

def is_palindrome(my_str):
    trans = str.maketrans(d)
    my_str = my_str.translate(trans).casefold()
    return my_str == my_str[::-1]

You may get just alphanumeric character in your string;

re.sub(r'[^a-zA-Z0-9]+', '', your_string).lower()

By the way this one works, if you ignores non-ASCII chars.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!