我想创建一个将返回“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")
当我这样做时:
print (is_palindrome("Rats live on no evil star"))
它返回 True 因为它是一个回文数
当我这样做时:
print (is_palindrome("Hello World!"))
它返回 False 因为它不是回文
当我这样做时:
print (is_palindrome("Madam, I'm Adam"))
它返回 False。但我想创建一个将其视为回文的代码
请您参考如下方法:
你需要在测试之前进行过滤:
letters = [c.casefold() for c in my_str if c.isalpha()]
将只挑选出字母并将它们小写,之后您可以测试这些字母是否形成回文:
return letters == letters[::-1]
这是有效的,因为 str.isalpha()仅对字母返回 True。
合并到你的函数中:
def is_palindrome(my_str):
letters = [c.casefold() for c in my_str if c.isalpha()]
return letters == letters[::-1]
演示:
>>> 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
