【发布时间】:2018-12-23 23:12:16
【问题描述】:
我正在努力解决这个递归问题。我想用递归为python中的基本操作创建一个计算器。
ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y), "*": (lambda x,y: x*y)}
def calculator(expr):
for i in expr:
if type(i) != tuple:
return (ops[expr[1]] (expr[0],expr[2]))
else:
return calculator((i))
对于calculator(((1, '+', 2), '*', 3)),我期待9,但我得到(1, '+', 2, 1, '+', 2, 1, '+', 2)
你能帮忙吗?
【问题讨论】:
-
i永远不会等于tuple。而是使用type(i) != tuple -
你也不需要循环。你可以检查
type(expr[0]) != tuple -
但是如果
expr[0]不是tuple而expr[2]是,这仍然行不通,因为在这种情况下你永远不会评估expr[2]。