我试图忽略字符串中的每个非字母字符,并将字母字符串添加到新字符串中,以便可以检查它是否是一个回文,无论大小写。
到目前为止我已经
了new_str = ''
for ch in s:
ch = ch.lower
if s.isalpha():
s = s + new_str
return s == is_palindrome
我正在调用is_palindrome prom一个上一个函数来检查一个小写字是否是回文。 任何帮助将不胜感激
答案 0 :(得分:3)
您的代码存在多个问题。让我们逐一介绍它们:
ch = ch.lower
为了调用函数或方法,您需要在函数名后面使用括号()
来告诉Python实际调用该函数/方法。您在此处的操作方式,只需将功能 的引用分配给ch
即可。所以ch
之后不会是一个角色。您要做的是使用ch = ch.lower()
。
if s.isalpha():
这项检查通常没问题,但s
可能不是你的意思。 s
是完整字符串,而ch
是迭代中的当前字符。你的意思可能是if ch.isalpha()
。
s = s + new_str
同样,s
是您正在迭代的字符的完整字符串。你可能并不想在这里向s
追加一些东西。您可能希望在不同的变量中收集一些结果。
说到结果,new_str
被初始化为空字符串''
并且永远不会被修改,因此您将空字符串附加到字符串s
(它不会做任何事情)
您可能要做的是修改new_str
,如果前面的条件为真,则附加字符:new_str = new_str + ch
return s == is_palindrome
与之前相同,为了调用函数,您需要使用括号。否则你会在这里将字符串s
与is_palindrome
函数进行比较(这不太可能是真的)。
此外,s
是输入字符串(您在整个循环中意外修改了它?)。你可能想在这里查看new_str
。
最后,is_palindrome
可能会将一个字符串作为输入,并返回该字符串是否为回文结构。因此,您不希望将其结果与字符串进行比较。
修复后,完整代码可能如下所示:
new_str = ''
for ch in s:
ch = ch.lower()
if ch.isalpha():
new_str = new_str + ch
return is_palindrome(new_str)
答案 1 :(得分:0)
以下是从字符串中删除所有非alpha的一种方法:
s = 'A man, a plan, a canal: Panama!'
scrunched_s = ''.join(ch.lower() for ch in s if ch.isalpha())
reversed_s = ''.join(ch.lower() for ch in s[::-1] if ch.isalpha())
print s
print scrunched_s
print reversed_s
print scrunched_s == reversed_s
这是另一个:
scrunched_s = map(str.lower, filter(str.isalpha, s))
reversed_s = map(str.lower, filter(str.isalpha, reversed(s)))
print scrunched_s == reversed_s