如何检查回文,忽略特殊字符和大小写?
How to check for palindrome, ignoring special characters and case?
我有一个回文:'Mr. Owl ate my metal worm
'
下面是我的代码,输出为 False
。
def is_palindrome(value):
lower = value.lower()
return value == value[::-1]
print(is_palindrome(input('Enter the value: ')))
如何改进我的代码,使其忽略大小写、空格和特殊字符,以识别上述回文并将输出作为 True
?
我发现您的代码中存在一些问题。
- 首先,您将
value.lower()
分配给 lower
但您没有使用 lower
。
- 其次,您必须处理特殊字符和空格以仅考虑回文的普通字符。
我编辑了你的代码,使其returns正确,如下:
def is_palindrome(value):
value = ''.join(value.split())
value = value.replace('.', '')
value = value.lower()
return value == value[::-1] # mrowlatemymetalworm
print(is_palindrome(input('Enter the value: ')))
你只是让这个函数不区分大小写,但你似乎也想忽略空格和标点符号。
您可以使用 string
模块执行此操作,如下所示:
#!/usr/bin/env python3
x = "Mr. Owl ate my metal worm"
y = "Some other string that isn't a palindrome"
def is_palindrome(value):
value = "".join([x for x in value.lower() if x.isalnum()])
return value == value[::-1]
print(is_palindrome(x))
print(is_palindrome(y))
结果:
True
False
isalnum()
只包含字母和数字。因此,在检查回文时,句号、空格和任何其他标点符号都会被删除。 (感谢 jodag)
我有一个回文:'Mr. Owl ate my metal worm
'
下面是我的代码,输出为 False
。
def is_palindrome(value):
lower = value.lower()
return value == value[::-1]
print(is_palindrome(input('Enter the value: ')))
如何改进我的代码,使其忽略大小写、空格和特殊字符,以识别上述回文并将输出作为 True
?
我发现您的代码中存在一些问题。
- 首先,您将
value.lower()
分配给lower
但您没有使用lower
。 - 其次,您必须处理特殊字符和空格以仅考虑回文的普通字符。
我编辑了你的代码,使其returns正确,如下:
def is_palindrome(value):
value = ''.join(value.split())
value = value.replace('.', '')
value = value.lower()
return value == value[::-1] # mrowlatemymetalworm
print(is_palindrome(input('Enter the value: ')))
你只是让这个函数不区分大小写,但你似乎也想忽略空格和标点符号。
您可以使用 string
模块执行此操作,如下所示:
#!/usr/bin/env python3
x = "Mr. Owl ate my metal worm"
y = "Some other string that isn't a palindrome"
def is_palindrome(value):
value = "".join([x for x in value.lower() if x.isalnum()])
return value == value[::-1]
print(is_palindrome(x))
print(is_palindrome(y))
结果:
True
False
isalnum()
只包含字母和数字。因此,在检查回文时,句号、空格和任何其他标点符号都会被删除。 (感谢 jodag)