如何使用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