Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在for循环中使用if…else返回字符串_Python_Python 3.x_For Loop - Fatal编程技术网

Python 在for循环中使用if…else返回字符串

Python 在for循环中使用if…else返回字符串,python,python-3.x,for-loop,Python,Python 3.x,For Loop,因此,这里我试图转换字符串“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+=''

因此,这里我试图转换字符串“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))
谁能告诉我哪一部分出错了?

试试这个:

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

'abcsadf'
试试这个:

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

'abcsadf'
可与正则表达式一起使用:

import re

mystring = ' ABcsad f!,'
print (re.sub('[^A-Za-z0-9]+', '', mystring)).lower()
输出:

可与正则表达式一起使用:

import re

mystring = ' ABcsad f!,'
print (re.sub('[^A-Za-z0-9]+', '', mystring)).lower()
输出:


您在第一次迭代后返回了
b
。无论第一个字符是什么,您都返回了
b
,它不允许循环通过字符串。因此,您需要保持
返回b
不在循环中。而且也不需要
返回b+=s[i]
。只要
返回b+s[i]
就可以了。事实上,您不能在return语句中赋值。但是,代码可以按如下方式缩短:

s='ABcsad f!,'
def标准:
b=“”
i=0
对于范围(0,len(s))内的i:
如果s[i].isalpha():
b+=s[i]
返回b.下()
印刷品(标准)

您在第一次迭代后返回了
b
。无论第一个字符是什么,您都返回了
b
,它不允许循环通过字符串。因此,您需要保持
返回b
不在循环中。而且也不需要
返回b+=s[i]
。只要
返回b+s[i]
就可以了。事实上,您不能在return语句中赋值。但是,代码可以按如下方式缩短:

s='ABcsad f!,'
def标准:
b=“”
i=0
对于范围(0,len(s))内的i:
如果s[i].isalpha():
b+=s[i]
返回b.下()
印刷品(标准)

问题在于,您的代码有错误,因为您试图在无效位置返回
b

你的代码

return b+=''
在python中,在Java这样的语言中,它并不像预期的那样工作。您必须显式返回
b

虽然这不是最好的方法,但尝试使用与您编写的代码相同的代码,但是使用正确的方式(不是pythonian方式;-))


在python中,有更多的方法,如使用regex、replace操作来更有效地执行此操作。希望您收到错误。

问题是,您的代码有错误,因为您试图在无效位置返回
b

你的代码

return b+=''
在python中,在Java这样的语言中,它并不像预期的那样工作。您必须显式返回
b

虽然这不是最好的方法,但尝试使用与您编写的代码相同的代码,但是使用正确的方式(不是pythonian方式;-))


在python中,有更多的方法,如使用regex、replace操作来更有效地执行此操作。希望你弄错了。

这里是你错的地方

  • 您将返回放在for循环中。Return退出整个
    norm
    函数,而不允许for循环完成。它需要搬到外面去

  • len+1
    会导致超出范围的错误。它应该是
    len(s)

  • 当您要删除空格时,应检查
    s[i].isspace()
    是否为true

  • 如果希望所有内容都小写,则需要将
    s[i]
    设置为
    s[i].lower()

  • 您可以使用
    b+=…
    ,但不能在它自己的返回语句中使用它。无论如何,这是不相关的,因为您不应该在那里使用return


  • 这就是你错的地方

  • 您将返回放在for循环中。Return退出整个
    norm
    函数,而不允许for循环完成。它需要搬到外面去

  • len+1
    会导致超出范围的错误。它应该是
    len(s)

  • 当您要删除空格时,应检查
    s[i].isspace()
    是否为true

  • 如果希望所有内容都小写,则需要将
    s[i]
    设置为
    s[i].lower()

  • 您可以使用
    b+=…
    ,但不能在它自己的返回语句中使用它。无论如何,这是不相关的,因为您不应该在那里使用return


  • b+=“”是否在python中工作?是否每次都返回?返回一个表达式?@gst1502是的,但与其他一些语言不同,它不是一个有值的表达式,因此您不能返回它。您返回的不是太早了吗,您应该返回
    b
    no?b+=“”在python中也可以工作吗?每次都返回吗?返回一个表达式?@gst1502是的,但与其他一些语言不同,它不是一个有值的表达式,因此您不能返回它。您是否返回得太早了,您应该返回
    b
    no?
    “”。join(i for i in s if i.isalpha())。lower()
    效率更高(函数调用更少)。
    “”。join(如果i.isalpha()).lower()效率更高(函数调用更少)。如果你想要一个不使用pass的代码行,为什么还要做
    b+='
    ?如果你想要一个不使用pass的代码行,为什么还要做
    b+='