Я пытаюсь вычислить (используя операторы) самый внутренний список, затем второй самый внутренний список и т. Д., Пока не останется больше списков. Я также пытаюсь сделать это так, чтобы он мог вычислять список независимо от того, сколько в нем вложенных списков.
import operator
lst = [['x1', '*', ['x2', '*', 'x3']], '-', 'x3']
dictionary = {'x1': 4, 'x2': 5, 'x3': 7}
operator_dictionary = {"+": operator.add, "-": operator.sub, "*":
operator.mul, "/": operator.truediv}
def BINARYEXPR(program, dictionary):
for i in range(len(program)):
if isinstance(program[i],list):
return BINARYEXPR(program[i],dictionary)
operator = operator_dictionary[program[1]]
operand1 = dictionary[program[0]]
print("operand1: ", operand1)
operand2 = dictionary[program[2]]
print("operand2: ", operand2)
return operator(operand1,operand2)
print (BINARYEXPR(lst,dictionary))
Итак, я хотел сначала вычислить x2 * x3 (5 * 7), что должно дать нам 35, затем вычислить x1 * 35 (4 * 35), которое должно дать нам 140, а затем, наконец, принять 140 - x3 (140-7), который должен вернуть 133. Но вместо этого мне удалось вычислить только самый внутренний список и нажать оператор возврата (операнд1, операнд2), который завершает функцию.
Так что я застрял в рекурсии, так как не могу понять, как перейти ко второму внутреннему списку всякий раз, когда вычисляется самый внутренний список.