我正在努力解决这个递归问题。我想创建一个计算器,用于 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)
请问你能帮忙吗?
最佳答案
您基本上是在编写二叉树遍历,特别是 binary expression tree 。使用元组是表示树的一种方法(尽管有更好的方法,例如 implementing a binary tree )。
现在,关于您的代码。您的表达式可以有两种不同的形式:数字或元组。第一个只是一个简单无聊的数字。该元组将用于表示更复杂的表达式。因为它是二叉树,所以元组始终具有三个元素。
下面的代码应该可以工作。
#ops is defined as you defined it
def calculate(expr):
if isinstance(expr, int): # this is the terminating condition for your recursion
return expr
if isinstance(expr, tuple):
return ops[expr[1]](calculate(expr[0]), calculate(expr[2]))
代码将输出最终的整数结果。当然,您也可以使用其他数字类型(例如float
)。对于在 python 中开始递归,这很好。
P.S.:代码未经测试,请告知它是否不起作用。
关于python - python 中递归基本运算的计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53907860/