Я просто хочу написать программу на Python, которая может принимать арифметические выражения в формате JSON, анализировать и оценивать ответ.
Каждый оператор, такой как PLUS, принимает как минимум 2 аргумента, MINS и TIMES принимают ровно 2 аргумента,но проверки не имеют отношения
Я могу прочитать объект JSON, но сложность в том, что я не понимаю, как я могу использовать рекурсию для анализа вложенного объекта.
Любое руководство/ help / ideas было бы полезно
Я думал, что рекурсия была бы отличной вещью для использования здесь, но я не понимаю, какими должны быть базовые случаи и как обрабатывать различные типы операций (плюс, минус, раз)
{
"root": { "description": "Result should be 8",
"plus": [{
"times": [{
"int": 2
}, {
"int": 3
}]
}, {
"minus": [{
"int": 4
}, {
"int": 2
}]
}]
}
Объект два, который доставляет мне больше проблем
{
"root": { "description":" it evaluates to 12.",
"plus": [{
"plus": [{
"plus": [{
"plus": [{
"plus": [{
"int": 2
},
{
"int": 2
}
]
},
{
"int": 2
}
]
},
{
"int": 2
}
]
},
{
"int": 2
}
]
},
{
"int": 2
}
]
}
}
Я пробовал использовать приведенный ниже код, но он не работает должным образом с вложенными выражениями:
def operation():
val = 0
with open("expression1.json") as complex_data:
data = complex_data.read()
z = json.loads(data)
data = z['root']
for op in data:
if op == 'description':
pass
elif op == 'plus':
return sum(element[k] for element in data[op] for k in element)
elif op == 'minus' or op == 'times':
if len(data[op]) != 2:
raise ValueError('2 elements expected if operation is minus >or times')
nums = [element[k] for element in data[op] for k in element]
if op == 'minus':
return abs(nums[0] - nums[1])
else:
return nums[0]*nums[1]
else:
raise ValueError('Invalid operation')
Извините, я впервые использую переполнение стека, и я не понимаю, как форматировать код