Помогите вступительный вопрос решить на питоне срочно
В далёкой галактике, на планете Разделяндия, жители одержимы математическими выражениями. Однако их выражения для нас кажутся слишком простыми, и всегда стоит вопрос: «А минусы будут?».
Вам дана строка S SS, представляющая собой математическое выражение, содержащее целые числа, операции сложения «+» и вычитания «-», а также скобки «(» и «)» для определения порядка операций. Сами числа, операторы и скобки могут быть разделены пробелами.
Ваша задача — ответить жителям Разделяндии, вычислив итоговое значение их выражения.
Гарантируется, что:
Строка содержит только допустимые символы: цифры, пробелы, операторы «+» и «-», а также круглые скобки «(» и «)».
Строка корректно сбалансирована по скобкам (каждая открывающая скобка имеет соответствующую закрывающую).
Пустых скобок нет (вида «()»).
Все числа во входной строке – целые числа, и их значения входят в 32-битный целочисленный диапазон.
Результат вычисления выражения входит в 64-битный целочисленный диапазон.
Формат ввода
Единственная строка S SS (1 ≤ ∣ S ∣ ≤ 1 0 6 1 \leq |S| \leq 10^61≤∣S∣≤10
6
) содержит в себе математическое выражение, которое необходимо вычислить.
Формат вывода
Одно целое число – результат вычисления выражения.
Пример 1
Ввод Вывод
-123 + 23
-100
Пример 2
Ввод Вывод
-((5 -2) - (3) +2) + 1
-1
Пример 3
Ввод Вывод
(1 + -2) + (3-4 - (5-6 - 7)) +8
14
Пример 4
Ввод Вывод
--42
42
def evaluate_expression(s):
s = s.replace(" ", "")
stack = []
current_num = 0
result = 0
sign = 1
i = 0
while i < len(s):
char = s[i]
if char.isdigit():
current_num = 0
while i < len(s) and s[i].isdigit():
current_num = current_num * 10 + int(s[i])
i += 1
result += sign * current_num
continue
elif char == '+':
sign = 1
elif char == '-':
sign = -1
elif char == '(':
stack.append((result, sign))
result = 0
sign = 1
elif char == ')':
prev_result, prev_sign = stack.pop()
result = prev_result + prev_sign * result
i += 1
return result
print(evaluate_expression(input()))
знаю как. писать лень.