当前位置: 首页 > 知识库问答 >
问题:

我可以在python中编写忽略逗号、空格、感叹号等特殊字符的代码吗?

尹英华
2023-03-14

我想创建一个返回“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。但我想创建一个代码,将其视为回文

共有3个答案

游勇军
2023-03-14

如果您只想排除标点符号和空格,可以使用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]
强金鑫
2023-03-14
my_str = my_str.casefold()
my_str = ''.join(e for e in my_str if e.isalpha())

这应该使用.isalpha()仅使用字母字符重新创建my_str。然后对其进行测试。如果您想保留原始字符串的记录,只存储重新创建的版本是临时字符串。

符俊材
2023-03-14

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

letters = [c.casefold() for c in my_str if c.isalpha()]

将只挑选出字母和小写字母,之后您可以测试这些字母形成的回文:

return letters == letters[::-1]

这是因为<code>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
 类似资料:
  • 问题内容: 我有一个像这样的字符串: 上面的字符串应分为: 问题答案: 我认为最简单的解决方案是处理输入字符串char-by-char: 例: 作为免费赠品,此解决方案还根据需要计算嵌套括号: 它还检查括号是否平衡(每个开放的括号都有相应的结束符)。

  • 问题内容: 如这个问题中所述,不允许在json中使用任何尾随逗号。例如这个 很好,但是这个 是无效的语法。 出于另一个StackOverflow问题中提到的原因,在Python代码中使用尾随逗号是合法的(也许是鼓励的?)。我同时使用Python和JSON,因此希望能够在两种类型的文件之间保持一致。有没有办法忽略尾随逗号? 问题答案: 您可以使用jsoncomment包装python的json解析器

  • 本文向大家介绍MySQL用户密码中的特殊字符叹号(!)的妙用,包括了MySQL用户密码中的特殊字符叹号(!)的妙用的使用技巧和注意事项,需要的朋友参考一下 使用叹号(!)禁止用户终端进入的一个方法。 仔细看一下,原来他把!后面的字符串做为命令执行了。又试了一个Navicat的管理端,也一样存在密码不正常的问题。 在测一下程序方面是不是可以用,写一个PHP测一下。 还看程序中能正常识别。 PHP还是

  • 问题内容: 我有一些输入如下所示: 逗号分隔的值可以是任何顺序。我想用逗号分割字符串;但是,在双引号内包含某些内容的情况下,我需要它既忽略逗号又去除引号(如果可能)。因此,基本上,输出将是以下字符串列表: 我已经看过其他一些答案,并且我认为正则表达式是最好的,但是我想出这些答案很糟糕。 问题答案: 拉瑟是对的。这是一个逗号分隔的值文件,因此您应该使用module。一个简单的例子:

  • 输入字符串用逗号分隔。但它可能包含双引号内的逗号,需要忽略。下面是示例字符串 下面是我用来拆分逗号的代码,但如果逗号是双引号中字符串的一部分,它就会失败。 所以任何解决这个问题的想法。

  • 我有一根下面这样的弦- value1,value2,value3,value4,“value5,1234”,value6,value7,“value8”,value9,“value10,123.23”