我可以在python中创建一个忽略逗号,空格,感叹号等特殊字符的代码吗?

Com*_*elp 1 python ignore special-characters palindrome

我想创建一个返回"true"的代码(如果我输入回文,无论是否有案例或者是否有特殊字符),否则为"false".到目前为止我的代码适用于没有特殊字符的短语,如逗号,撇号,空格等.

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")
Run Code Online (Sandbox Code Playgroud)

当我做:

 print (is_palindrome("Rats live on no evil star"))
Run Code Online (Sandbox Code Playgroud)

它返回True,因为它是回文

当我做:

 print (is_palindrome("Hello World!"))
Run Code Online (Sandbox Code Playgroud)

它返回False,因为它不是回文

当我做:

 print (is_palindrome("Madam, I'm Adam"))
Run Code Online (Sandbox Code Playgroud)

它返回False.但我想创建一个认为这是回文的代码

Mar*_*ers 8

您需要在测试之前进行过滤:

letters = [c.casefold() for c in my_str if c.isalpha()]
Run Code Online (Sandbox Code Playgroud)

只挑出字母和小写字母,之后你可以测试这些字母形成一个回文:

return letters == letters[::-1]
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为只str.isalpha()返回True字母.

结合你的功能:

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

演示:

>>> 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
Run Code Online (Sandbox Code Playgroud)