继续不';在这个简单的Python函数中似乎不起作用
函数应该以字符串作为输入并返回(如果字符串的所有成员都是数字)和该字符串的整数版本。本例中提供的字符串是一个3位数字。函数的for循环似乎只返回第一个数字,因此continue可能无法按预期工作继续不';在这个简单的Python函数中似乎不起作用,python,continue,Python,Continue,函数应该以字符串作为输入并返回(如果字符串的所有成员都是数字)和该字符串的整数版本。本例中提供的字符串是一个3位数字。函数的for循环似乎只返回第一个数字,因此continue可能无法按预期工作 e = '484' def resolving(e): for i, o in enumerate(e): if o in "0123456789": s = [] s.append(o)
e = '484'
def resolving(e):
for i, o in enumerate(e):
if o in "0123456789":
s = []
s.append(o)
i += 1
continue
elif o not in "0123456789":
print(type(e))
return e
k = str(s)
y = k.replace("'","").replace("[","").replace("]","").replace(",","").replace(" ","")
p = int(y)
print(type(p))
return p
print(resolving(e))
这里有
return
,所以第一次输入非数字字符时,您将返回该字符并退出。如前所述,continue不会做任何事情,因为下面的elif
不会被发送到if语句第一个分支的任何字符击中。因为您在循环中创建了列表。把它放在圈外就行了。也可以使用str.join
代替使列表的字符串表示的str(s)
,因为它会将列表的所有元素连接到一个字符串中。另外,不需要continue语句。因为如果if为True,则不会运行elif
for i, o in enumerate(e):
s = []
if o in "0123456789":
s.append(o)
else:
print(type(e))
return e
k = ''.join(s)
p = int(y)
return p
冒着完全忽略您要做的事情的风险,整个功能可能只是:
def resolve(e):
"""If e is convertible to an int, return its int value;
otherwise print its type and return the original value."""
try:
return int(e)
except ValueError:
print(type(e))
return e
如果仅将字符串的整数视为其整数版本,则可以使用
isnumeric()
检查:
def resolve(e)
return int(''.join([i for i in e if i.isnumeric()]))
每次向
s
追加内容时,首先将其设置为空列表。它永远不会包含多个元素。将初始化移到循环之外。而continue
是毫无意义的,它完全按照代码所做的去做,因为在循环的当前迭代过程中没有进一步的事情发生。实际上创建列表s
是没有必要的,因为在将其转换回字符串后,您将再次得到e
。另外,我不明白为什么要使用enumerate而不是直接遍历字符串。添加一些简单的调试打印语句--您很快就会发现是您的代码不起作用,不是continue
语句。这就是为什么你不只是看第一个数字与最后一个数字相同的测试用例…谢谢各位,这也是为什么我必须在函数中把列表的“s”转换成字符串的原因,因为我需要将输出输入到一个return语句中。我还尝试使用错误处理语句(try、except和finally),但没有达到预期效果。希望结合你们的例子,我能弄明白。嗯,第一句话和问题无关,第二句话没有意义。。。