Python 在for循环中使用if…else返回字符串
因此,这里我试图转换字符串“ABcsad f!”编码>到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+=''
字符串“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操作来更有效地执行此操作。希望你弄错了。这里是你错的地方
norm
函数,而不允许for循环完成。它需要搬到外面去len+1
会导致超出范围的错误。它应该是len(s)
s[i].isspace()
是否为trues[i]
设置为s[i].lower()
b+=…
,但不能在它自己的返回语句中使用它。无论如何,这是不相关的,因为您不应该在那里使用return这就是你错的地方
norm
函数,而不允许for循环完成。它需要搬到外面去len+1
会导致超出范围的错误。它应该是len(s)
s[i].isspace()
是否为trues[i]
设置为s[i].lower()
b+=…
,但不能在它自己的返回语句中使用它。无论如何,这是不相关的,因为您不应该在那里使用returnb+=“”是否在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+='
。