我正在尝试打印所有括号,但我只是打印一个输出而不是所有隐含的括号。
如何显示所有可能的隐含括号? From here我明白了。
我无法找到打印所有隐含括号的方法。
def add_up(exp):
operators = ["+", "/", "*", "-"]
if len(exp) == 1:
return exp
result = ""
for i in range(0, len(exp)):
if exp[i] in operators:
left = add_up(exp[0:i])
right = add_up(exp[i+1:len(exp)])
result = "(" + left + exp[i] + right + ")"
return result
print(add_up("3*4+5"))
答案 0 :(得分:1)
您的代码返回单个结果,而解决方案包含几个可能的结果。当你递归时,左右分支当然也会产生不止一个结果。
您可以通过将函数转换为生成器然后循环结果来解决此问题:
operators = ["+", "/", "*", "-"]
def add_up(exp):
if len(exp) == 1:
yield exp
for i in range(0, len(exp)):
if exp[i] in operators:
for left in add_up(exp[:i]):
for right in add_up(exp[i + 1:]):
yield "(" + left + exp[i] + right + ")"
for e in add_up("1+2*3+4"):
print e, ':', eval(e)
或者(更详细地说),您可以制作结果列表:
def add_up(exp):
if len(exp) == 1:
return [exp]
result = []
for i in range(0, len(exp)):
if exp[i] in operators:
for left in add_up(exp[:i]):
for right in add_up(exp[i + 1:]):
result += ["(" + left + exp[i] + right + ")"]
return result