Решаем задачи Python. Джеймс Девис

Чтение книги онлайн.

Читать онлайн книгу Решаем задачи Python - Джеймс Девис страница 5

Жанр:
Серия:
Издательство:
Решаем задачи Python - Джеймс Девис

Скачать книгу

calculate(expression):

      stack = []

      operators = {'+': lambda x, y: x + y,

      '-': lambda x, y: x – y,

      '*': lambda x, y: x * y,

      '/': lambda x, y: x / y}

      for token in expression:

      if token.isdigit():

      stack.append(int(token))

      elif token in operators:

      operand2 = stack.pop()

      operand1 = stack.pop()

      result = operators[token](operand1, operand2)

      stack.append(result)

      return stack[0]

      # Пример использования:

      expression = "53+"

      result = calculate(expression)

      print("Результат вычислений:", result)

      ```

      Объяснения к коду:

      1. Функция `calculate` принимает строку обратной польской записи и возвращает результат вычислений.

      2. Создается пустой стек `stack` для хранения операндов.

      3. Словарь `operators` содержит операторы и соответствующие им функции для выполнения операций.

      4. В цикле `for` происходит итерация по каждому символу в строке.

      5. Если символ является числом, он добавляется в стек как операнд.

      6. Если символ является оператором, из стека извлекаются два операнда, выполняется операция и результат помещается обратно в стек.

      7. После завершения итерации, в стеке остается только один элемент – результат вычислений, который возвращается функцией.

7. Задача вычисления выражения в обратной польской записи

      Пусть у нас есть следующее выражение: "5 3 + 8 * 4 /".

      Чтобы вычислить это выражение в обратной польской записи, мы будем использовать алгоритм, описанный ранее:

      1. Создаем пустой стек.

      2. Итерируемся по каждому символу в выражении.

      3. Если символ – число, помещаем его в стек.

      4. Если символ – оператор, извлекаем из стека нужное количество операндов, выполняем операцию и помещаем результат обратно в стек.

      5. После завершения итерации, в стеке должен остаться только один элемент – результат вычислений.

      Применяя этот алгоритм к нашему выражению, мы получим:

      1. Помещаем 5 в стек.

      2. Помещаем 3 в стек.

      3. Встречаем оператор "+", извлекаем из стека 3 и 5, выполняем операцию сложения и помещаем результат (8) обратно в стек.

      4. Помещаем 8 в стек.

      5. Помещаем 4 в стек.

      6. Встречаем оператор "*", извлекаем из стека 4 и 8, выполняем операцию умножения и помещаем результат (32) обратно в стек.

      7. Помещаем 32 в стек.

      8. Встречаем оператор "/", извлекаем из стека 32 и 4, выполняем операцию деления и помещаем результат (8) обратно в стек.

      После завершения итераций, в стеке остается только один элемент – результат вычислений, который равен 8.

      Давайте напишем код для вычисления выражения в обратной польской записи:

      ```python

      def evaluate_reverse_polish_notation(expression):

      stack = []

      operators = {'+': lambda x, y: x + y,

      '-': lambda x, y: x – y,

      '*': lambda x, y: x * y,

      '/': lambda x, y: x / y}

      for token in expression.split():

      if

Скачать книгу