如何使用for循环忽略字符串中的每个非字母字符并添加到新字符串? Python 3

时间:2016-11-01 18:52:09

标签: 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一个上一个函数来检查一个小写字是否是回文。 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

您的代码存在多个问题。让我们逐一介绍它们:

  1. ch = ch.lower

    为了调用函数或方法,您需要在函数名后面使用括号()来告诉Python实际调用该函数/方法。您在此处的操作方式,只需将功能 引用分配给ch即可。所以ch之后不会是一个角色。您要做的是使用ch = ch.lower()

  2. if s.isalpha():

    这项检查通常没问题,但s可能不是你的意思。 s是完整字符串,而ch是迭代中的当前字符。你的意思可能是if ch.isalpha()

  3. s = s + new_str

    同样,s是您正在迭代的字符的完整字符串。你可能并不想在这里向s追加一些东西。您可能希望在不同的变量中收集一些结果。

    说到结果,new_str被初始化为空字符串''并且永远不会被修改,因此您将空字符串附加到字符串s(它不会做任何事情)

    可能要做的是修改new_str,如果前面的条件为真,则附加字符new_str = new_str + ch

  4. return s == is_palindrome

    与之前相同,为了调用函数,您需要使用括号。否则你会在这里将字符串sis_palindrome函数进行比较(这不太可能是真的)。​​

    此外,s是输入字符串(您在整个循环中意外修改了它?)。你可能想在这里查看new_str

    最后,is_palindrome可能会将一个字符串作为输入,并返回该字符串是否为回文结构。因此,您不希望将其结果与字符串进行比较。

  5. 修复后,完整代码可能如下所示:

    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