在 for 循环中使用 if...else 返回一个字符串

所以在这里我试图将字符串转换' ABcsad f!,'为

字符串'abcsadf',所以基本上我试图将空格和非 alpha 替换为 '' 但我的代码根本不起作用......


s = ' ABcsad f!,'


def norm(s):

    b=''

    i=0

    for i in range(0,len(s)+1):

        if (s[i].isalpha() is False) or (s[i].isspace() is False) :

            return b+=''

        else:

            return b+=s[i]

        i = i+1   


print(norm(s))

谁能告诉我哪里出错了?


一只萌萌小番薯
浏览 139回答 3
3回答

侃侃尔雅

试试这个 :s = ' ABcsad f!,'def norm(s):    return ''.join(i for i in s.lower() if i.isalpha())print(norm(s))输出:'abcsadf'

喵喔喔

这是你出错的地方您将 return 放在 for 循环中。Return 退出整个norm函数,而不是让 for 循环完成。它需要搬到外面。len(s) + 1导致超出范围的错误。它应该只是len(s)当您要删除空格时,s[i].isspace()应检查是否为真。如果你想要所有的小写,你需要s[i]做s[i].lower()您可以使用b += ...但不能在其自己的返回语句中使用它。无论如何,这无关紧要,因为您不应该在那里使用 return 。def norm(s):    b=''    for i in range(0,len(s)):        if (s[i].isalpha() is False) or (s[i].isspace() is True):            b += ""        else:            b += s[i].lower()        i = i+1    return bs = ' ABcsad f!,'print(norm(s))

慕无忌1623718

可能与正则表达式:import remystring = ' ABcsad f!,'print (re.sub('[^A-Za-z0-9]+', '', mystring)).lower()输出:abcsadf
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python