-1

我正在尝试删除字符串中大括号之间的所有内容,并尝试递归地执行此操作。x当递归结束时我会返回这里,但不知何故函数doit会返回None这里。尽管x在 def 中打印会打印正确的字符串。我究竟做错了什么?

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

4

3 回答 3

3

如果if块成功,你永远不会返回任何东西。该return语句位于else块中,并且仅在其他所有内容都不是时才执行。您想返回从递归中获得的值。

if x.find('{', ind) != -1 and x.find('}', ind) != -1:
    ...
    return doit(x, end+1)
else:
    return x
于 2012-06-19T09:08:30.463 回答
1
...
#print(x)
doit(x,end+1)
...

应该

...
#print(x)
return doit(x,end+1)
...

您缺少returnif 块中的语句。如果函数以递归方式调用自身,则它不会返回该调用的返回值。

于 2012-06-19T09:09:34.290 回答
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)
于 2012-06-19T09:15:24.850 回答