Вычислить алгебраическую сумму цифр в тексте

Всем привет. Помогите с задачей. Дан текст: 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 шт):

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

Проходимся по каждому символу и проверяем:

  • если это + или -, то сохраняем знак, чтобы использовать его при следующей цифре

  • если это цифра, то прибавляем ее к сумме, учитывая предыдущий знак


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)
→ Ссылка
Автор решения: Kers

Можно сразу засунуть строку в eval

a = "1+3-5+6-8+3-5+2-1+4" 
print(eval(a))

P.S. eval не лучшее решение с точки зрения безопасности так как в строку можно подставить любую команду (удалить файл например) но в варианте учебного задания будем весьма оптимальным и думаю самым коротким решением задачи.

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

Можно срезать угол, если разбить строку на кусочки. Первый кусочек из одного символа, остальные по два: 1+3-5+6-8+3-5+2-1+41, +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)))
→ Ссылка