Как заменить '-' на оператор -, а '+' на оператор + (на 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())