python - python 中递归基本运算的计算器

标签 python recursion tuples

我正在努力解决这个递归问题。我想创建一个计算器,用于 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/

相关文章:

arrays - 如何从两个元素列表中获取一个元组

python - Pandas:根据条件获取多列

python - 获取每个训练实例的损失值 - Keras

python - 需要进行前一行的计算并根据条件添加到其中

recursion - 在Golang中为递归函数实现生成器( yield )的惯用方式

java 获取所有可能的变体(正和负)

python - 使用 python 库发送 xmpp 消息

java - 使用三种预先给定的方法反向打印字符串?

swift - Swift 中泛型变量的解决方法

python-3.x - 在元组内连接数组的元组