Преобразование списка в арифметическое выражение
я новичек, возникла проблема, уже весь мозг сломался.
На входе у меня есть список: ['3', '+', '0.34', '-', '3', '*', '0.051651', '/', '7', '+', '1.201E+3']
На выходне мне нужно получить запись следующего вида, чтобы она рассчиталась: x = Decimal('3') + Decimal('0.34') - Decimal ('3') * Decimal('0.051651') / Decimal('7') + Decimal('1.201E+3')
Ожидается, что если напишу Print(x) вернется результат арифметических действий
Помогите, пожалуйста, не понимаю как отформатировать список в арифметическое выражение. Спасибо заранее
Ответы (2 шт):
Попробуйте так:
a=['3', '+', '0.34', '-', '3', '*', '0.051651', '/', '7', '+', '1.201E+3']
b='print('
for i in a:
b+=i
b+=')'
exec(b)
Все значения списка a перебираются и добавляются в строку b. Ваше выражение хранится в переменной b, функция exec может выполнять функцию из строки, в данном случае из строки b.
Пришлось небольшой парсер написать, но уверен, что задача решается в три строчки на самом деле.
#строка с любыми арифметическими действиями
b = '65465.046546*65465-35184'
#с помощью регулярный выражений разбивка
d2 = re.split(r'((?:[+-]?\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)',b)
#избавляюсь от пустот
d3 = list(filter(None, d2))
summarizer = Decimal('0')
for i in d3:
print('начало цикла')
if '*' in d3:
superindex = d3.index('*')
left = d3[(superindex - 1)]
right = d3[(superindex + 1)]
result = Decimal(left) * Decimal(right)
del d3[superindex]
del d3[superindex]
d3[(superindex - 1)] = str(result)
elif '/' in d3:
superindex = d3.index('/')
left = d3[(superindex - 1)]
right = d3[(superindex + 1)]
result = Decimal(left) / Decimal(right)
del d3[superindex]
del d3[superindex]
d3[(superindex - 1)] = str(result)
for j in d3:
summarizer += Decimal(j)
print('summarizer',summarizer)
PS Извиняюсь за неубранность в коде, но главное суть.