Записать в список математическое выражение python
Есть легальный способ записать в list мат.выражение?
из этого:
a = 1 + 2 + 3
сделать это:
a = [1, +, 2, +, 3]
Это нужно, что бы можно было запросить у пользователя выражение целиком для калькулятора. Потому что, как реализовать, что бы калькулятор принимал сразу все выражение, я не нашел. (eval не предлагать)
Ответы (4 шт):
Используй rsplit
a = input("Выражение \n")
if " " in a:
b = a.rsplit(' ')
print(b)
else:
a = " ".join(a)
b = a.rsplit(' ')
print(b)
Если я правильно понял. Можно записывать с любым числом пробелов или вообще без них:
expr = "1 + 2 + 3"
lst = [x for x in list(expr) if x.strip()]
print(lst)
Вывод:
['1', '+', '2', '+', '3']
Ещё один "функциональный" вариант (без спискового сокращения, одни функции):
lst = list(filter(len, map(str.strip, expr)))
Результат будет тот же.
Хотя это сработает только для одиночных чисел...
Можно воспользоваться регулярными выражениями, чтобы вычленить параметры выражения и операторы для них:
import re
var = '1 - 2 + 3 - 4'
expr = re.findall('([+-]?)\s*([\d]+)', var)
print(expr) # [('', '1'), ('-', '2'), ('+', '3'), ('-', '4')]
Потом можно пройтись по списку кортежей, где на первом месте у нас оператор, а на втором значение для него, и какой-нибудь функцией собрать результат.