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

后端 未结 4 1496
余生分开走
余生分开走 2021-01-23 11:39

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 ha

相关标签:
4条回答
  • 2021-01-23 12:16

    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
    
    0 讨论(0)
  • 2021-01-23 12:16

    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]
    
    0 讨论(0)
  • 2021-01-23 12:23

    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.

    0 讨论(0)
  • 2021-01-23 12:34
    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.

    0 讨论(0)
提交回复
热议问题