Как заменить '-' на оператор -, а '+' на оператор + (на python)

Предположим, есть строка "0 - 1 + 2 - 3 + 4 - 5 + 6". Нужно выполнить/вычислить это выражение без использования функции eval().

Перебрать строку, конвертировать числа в int, сделать из неё список и т. д. я могу, а вот заменить строки оператором не получается.


Ответы (3 шт):

Автор решения: ferz

Если в выражении есть только знаки + и -, то выражение можно представить как последовательность из чисел 0, -1, 2, -3, 4, -5, 6. Тогда останется их только сложить.

→ Ссылка
Автор решения: sumak

Решил пока вот так:

arithmetic_expression = "1-3"
add_space = arithmetic_expression.replace('+', ' + ').replace('-', ' - ')
print(add_space)
a_e = add_space.split()
print(a_e)

for v in range(len(a_e)):
    if a_e[v].isnumeric():
        a_e[v] = int(a_e[v])

print(a_e)

lst_nums = []
for i in range(len(a_e)):
    if a_e[i] == '-':
        a_e[i + 1] = -a_e[i + 1]
    if isinstance(a_e[i], int):
        lst_nums.append(a_e[i])

s = 0
for n in range(len(lst_nums)):
    s += lst_nums[n]


print(a_e)
print(lst_nums)
print(s)
→ Ссылка
Автор решения: sumak

Еще пробовал вот так:(Знаний и практики в ООП у меня пока не достаточно)

class ArithmeticExpression:
    def __init__(self, value):
        self.value = value

    def get_value(self):
        return self.value

    def __add__(self, other):
        return ArithmeticExpression(self.value + other)

    def __sub__(self, other):
        return ArithmeticExpression(self.value - other)

    def __iter__(self):
        return iter(self.value)

    def __len__(self):
        return len(self.value)

    def __getitem__(self, item):
        return self.value[item]

    def __setitem__(self, key, value):
        self.value[key] = value

    def __setattr__(self, key, value):
        super().__setattr__(key, value)

    def method_minus(self):
        return lambda other: self - other


ae = ArithmeticExpression([0, '-', 1, '+', 2, '-', 3, '+', 4, '-', 5, '+', 6])
h = ArithmeticExpression(0)
for n in range(len(ae)):
    if ae[n] == '-':
        ae[n] = h.method_minus()

print(ae.get_value())
→ Ссылка