首页 > 解决方案 > 计算器到python中的递归基本操作

问题描述

我正在努力解决这个递归问题。我想用递归为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)

请问你能帮忙吗?

标签: pythonrecursiontuples

解决方案


您的评估逻辑已关闭-鉴于这些简单的表达式,我们实际上只关心两种情况,元组或非元组。如果它是一个元组,我们将嵌入的二元运算符应用于calculator()两个参数的递归调用。如果它不是元组,则按原样返回:

OPERATIONS = { \
    "+": (lambda x, y: x + y), \
    "-": (lambda x, y: x - y), \
    "*": (lambda x, y: x * y), \
}

def calculator(expr):
    if isinstance(expr, tuple):
        return OPERATIONS[expr[1]](calculator(expr[0]), calculator(expr[2]))

    return expr

print(calculator(((1, '+', 2), '*', 3)))

输出

> python3 test.py
9
>

我相信,如果你试图用这个简单的代码做任何更复杂的事情,你很快就会遇到问题。


推荐阅读