如何使用for循环忽略字符串中的每个非字母字符并添加到新字符串中?Python 3
我试图忽略字符串中的每个非字母字符,并将字母字符串添加到新字符串中,这样无论大小写,都可以检查它是否为回文 到目前为止我有如何使用for循环忽略字符串中的每个非字母字符并添加到新字符串中?Python 3,python,python-3.x,Python,Python 3.x,我试图忽略字符串中的每个非字母字符,并将字母字符串添加到新字符串中,这样无论大小写,都可以检查它是否为回文 到目前为止我有 new_str = '' for ch in s: ch = ch.lower if s.isalpha(): s = s + new_str return s == is_palindrome 我正在调用is_palindrome prom作为前一个函数,它检查一个小写单词是否是回文。 如果您有任何帮助,我们将不胜感激。以下是从字符串中
new_str = ''
for ch in s:
ch = ch.lower
if s.isalpha():
s = s + new_str
return s == is_palindrome
我正在调用is_palindrome prom作为前一个函数,它检查一个小写单词是否是回文。
如果您有任何帮助,我们将不胜感激。以下是从字符串中删除所有非字母的一种方法:
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
以下是从字符串中删除所有非字母的一种方法:
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
您的代码存在多个问题。让我们一个接一个地看一下:
ch=ch.lower
为了调用函数或方法,需要在函数名后使用括号()
,告诉Python实际调用该函数/方法。按照这里的操作方式,只需将函数的引用指定给ch
。因此,ch
之后将不再是字符。您要做的是使用ch=ch.lower()
如果s.isalpha():
这个检查通常是可以的,但是s
可能不是你的意思s
是完整字符串,而ch
是迭代中的当前字符。你的意思可能是if ch.isalpha()
s=s+new\u str
同样,s
是您正在迭代的字符的完整字符串。您可能不想在这里向s
添加内容。您可能希望在不同的变量中收集一些结果
说到结果,new_str
被初始化为空字符串'
,并且从未被修改过,因此您将向字符串s
追加一个空字符串(这不会做任何事情)
您可能想做的是修改new\u str
,如果前面的条件为真,则添加字符:new\u str=new\u str+ch
returns==is_回文
和前面一样,为了调用函数,需要使用括号。否则,您将把字符串s
与此处的is\u回文
函数进行比较(这不太可能是真的)
此外,s
是输入字符串(您在整个循环中意外修改了它?)。您可能想在这里查看new\u 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)
您的代码存在多个问题。让我们一个接一个地看一下:
ch=ch.lower
为了调用函数或方法,需要在函数名后使用括号()
,告诉Python实际调用该函数/方法。按照这里的操作方式,只需将函数的引用指定给ch
。因此,ch
之后将不再是字符。您要做的是使用ch=ch.lower()
如果s.isalpha():
这个检查通常是可以的,但是s
可能不是你的意思s
是完整字符串,而ch
是迭代中的当前字符。你的意思可能是if ch.isalpha()
s=s+new\u str
同样,s
是您正在迭代的字符的完整字符串。您可能不想在这里向s
添加内容。您可能希望在不同的变量中收集一些结果
说到结果,new_str
被初始化为空字符串'
,并且从未被修改过,因此您将向字符串s
追加一个空字符串(这不会做任何事情)
您可能想做的是修改new\u str
,如果前面的条件为真,则添加字符:new\u str=new\u str+ch
returns==is_回文
和前面一样,为了调用函数,需要使用括号。否则,您将把字符串s
与此处的is\u回文
函数进行比较(这不太可能是真的)
此外,s
是输入字符串(您在整个循环中意外修改了它?)。您可能想在这里查看new\u 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)
string.ascii_字母
--'.join(如果char in string.ascii_字母中有char,则char in s)。lower()
这将为字符串提供小写版本,其中只包含ascii字母。实际上,您根本没有调用is_palindrome()
,最后一行检查s
(字符串)等于is_palindrome
(函数)您的问题是什么?问题已被编辑,对不起string.ascii_字母
--''.join(如果string.ascii_字母中的字符为s中的字符)。lower()
这将为您提供一个只有ascii字母字符的字符串的小写版本。您根本没有调用is\u palindrome()
,事实上,最后一行检查s
(字符串)是否等于is\u palindrome
(函数)您的问题是什么?问题已编辑,对不起,为什么不使用内置的reversed
functi