Top.Mail.Ru
Ответы

Помогите вступительный вопрос решить на питоне срочно

В далёкой галактике, на планете Разделяндия, жители одержимы математическими выражениями. Однако их выражения для нас кажутся слишком простыми, и всегда стоит вопрос: «А минусы будут?».

Вам дана строка 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

По дате
По рейтингу
Аватар пользователя
Мастер
2мес
123456789101112131415161718192021222324252627282930313233343536373839
 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())) 
Аватар пользователя
2мес

знаю как. писать лень.