我正在尝试删除字符串中花括号之间的所有内容,并尝试以递归方式执行此操作。
当递归结束时,我在这里返回x
,但函数doit
在某处返回None
。虽然在def中打印x
会打印出正确的字符串。
我做错了什么?
strs = "i am a string but i've some {text in brackets} braces, and here are some more {i am the second one} braces"
def doit(x,ind=0):
if x.find('{',ind)!=-1 and x.find('}',ind)!=-1:
start=x.find('{',ind)
end=x.find('}',ind)
y=x[start:end+1]
x=x[:start]+x[end+1:]
#print(x)
doit(x,end+1)
else:
return x
print(doit(strs))
输出:
None
答案 0 :(得分:3)
如果if
块成功,您永远不会返回任何内容。 return
语句位于else
块中,只有在其他所有块都没有的情况下才会执行。您希望返回从递归中获得的值。
if x.find('{', ind) != -1 and x.find('}', ind) != -1:
...
return doit(x, end+1)
else:
return x
答案 1 :(得分:1)
...
#print(x)
doit(x,end+1)
...
应该是
...
#print(x)
return doit(x,end+1)
...
您缺少if块中的return
语句。如果函数以递归方式调用,则不会返回该调用的返回值。
答案 2 :(得分:1)
请注意,使用正则表达式更容易:
import re
strs = "i am a string but i've some {text in brackets} braces, and here are some more {i am the second one} braces"
strs = re.sub(r'{.*?}', '', strs)