如何检查回文,忽略特殊字符和大小写?

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)