Вычислить алгебраическую сумму цифр в тексте
Всем привет. Помогите с задачей. Дан текст: d1-d1+d3-d4..., где d - цифра > 1. Вычислить записанную в тексте алгебраическую сумму. Например, дана следующая строка a. Далее пытаюсь привести строку в список чисел (за исключением "+" и "-"), но дальше не могу понять, как решать.
a = "1+3-5+6-8+3-5+2-1+4"
a = list(a)
for i in range(len(a)):
if a[i] != "+" and a[i] != "-":
a[i] = int(a[i]) ```
Ответы (3 шт):
Проходимся по каждому символу и проверяем:
если это + или -, то сохраняем знак, чтобы использовать его при следующей цифре
если это цифра, то прибавляем ее к сумме, учитывая предыдущий знак
a = list("1+3-5+6-8+3-5+2-1+4")
s = 0
o = '+'
for i in a:
if i in '+-': o = i
else: s += int(i) * (1 if o == '+' else -1)
print(s)
Можно сразу засунуть строку в eval
a = "1+3-5+6-8+3-5+2-1+4"
print(eval(a))
P.S. eval не лучшее решение с точки зрения безопасности так как в строку можно подставить любую команду (удалить файл например) но в варианте учебного задания будем весьма оптимальным и думаю самым коротким решением задачи.
Можно срезать угол, если разбить строку на кусочки. Первый кусочек из одного символа, остальные по два: 1+3-5+6-8+3-5+2-1+4 → 1, +3, -5, +6, -8, +3, -5, +2, -1, +4. Если все кусочки преобразовать в целые и сложить, получим нужный результат:
a = '1+3-5+6-8+3-5+2-1+4'
print(int(a[0]) + sum(int(a[i:i + 2]) for i in range(1, len(a), 2)))