我正在尝试挑战,我成功了,但有一次没有达到我想要的效果
这就是挑战:Given a string, return whether or not it forms a palindrome ignoring case and non-alphabetical characters. Note: a palindrome is a sequence of characters that reads the same forwards and backwards. Ex: Given the following strings... "level", return true "algorithm", return false "A man, a plan, a canal: Panama.", return true
这是我的代码:
import re
def isPalindrome(str):
reversedString = re.sub(r'[^a-z]', '', str)
reversedString = str[::-1]
if reversedString == str:
print(True)
else:
print(False)
因此,当我键入例如“level”时,它确实返回true,当我键入algorithm时,它确实返回false,但问题是问题中的第三个示例仍然打印出false,而因为它是一个实际的回文,它应该返回false。如果我们去掉所有非字母字符,例如点、逗号和列,这就是回文。 所以我很自然地浏览了一下互联网,看看我们如何做到这一点,发现使用正则表达式来实现这一点是最有效的方法,所以我将它实现到我的函数中。 问题是,因为总是有一个,它实际上就像regex方法根本不存在一样运行,它基本上不会删除非字母字符,而它应该。。 所以,在这里我开始知道我可能做错了什么,如果我有可能得到别人的帮助,因为我已经被困在这一天了
谢谢大家阅读这篇文章
您当前的方法有两个问题,在替换非字母数字字符后将主
reversedString
小写,然后在比较reversedString == str
之前将str
从reversedString
而不是从它自己的reversedString == str
中改为str
,我稍微更改了代码块,但同样的逻辑也适用于您自己的版本工作演示:https://rextester.com/GBLTM37163
首先,您的正则表达式将删除大写字母。即使修改正则表达式以删除非大写和非小写字母,也会在下一行代码中删除结果(
reversedString
)您确实需要首先将输入字符串转换为全部小写或全部大写(实际上是小写,因为您正在删除非小写字母),因为您的输入是一种混合体,您的回文不会前后读取相同的内容,除非您这样做
您可以使用
re.sub()
删除所有非字母字符:输出:
相关问题 更多 >
编程相关推荐