Search code examples
pythonspecial-characterspalindrome

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


I want to create a code that will return "true" (if I type in a palindrome regardless of case or if there are special characters in it), and "false" otherwise. The code I have so far works for phrases with no special characters such as commas, apostrophes, spaces, etc.

def is_palindrome(my_str):
    my_str= my_str.casefold()
    rev_str= reversed(my_str)

if list(my_str) == list(rev_str):
   print("True")
else:
   print("False")

when I do:

 print (is_palindrome("Rats live on no evil star"))

it returns True because it is a palindrome

when I do:

 print (is_palindrome("Hello World!"))

it returns False because it is not a palindrome

when I do:

 print (is_palindrome("Madam, I'm Adam"))

it returns False. but I want to create a code that considers this a palindrome


Solution

  • 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