Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Калькулятор выражений в обратной польской нотации (RPN)

Описание

Этот проект представляет собой калькулятор для вычисления математических выражений, записанных в обратной польской нотации (RPN). Программа поддерживает базовые арифметические операции, унарные операции, работу со скобками и обработку ошибок.

Особенности

  • Обратная польская нотация (RPN) - выражения записываются в постфиксной форме
  • Поддержка скобок - проверка корректности и автоматическое удаление
  • Бинарные операции: +, -, *, /, //, %, **
  • Унарные операции: ~ (унарный минус), $ (унарный плюс)
  • Обработка ошибок: деление на ноль, некорректные выражения, синтаксические ошибки

Установка и запуск

Требования

  • Python 3.10 или выше
  • Установленные пакеты: pytest

Запуск программы

python src/main.py

# Затем вводите выражения по одному в строке
2 3 +
5 3 -
4 3 *
# Пакетная обработка из файла
python src/main.py < input.txt

# Или через pipe
echo "2 3 +" | python src/main.py

Синтаксис выражений

Базовый формат RPN

операнд1 операнд2 операция

Примеры выражений

Выражение Результат Пояснение
2 3 + 5.0 2 + 3
5 3 - 2.0 5 - 3
4 3 * 12.0 4 × 3
6 2 / 3.0 6 ÷ 2
2 3 ** 8.0
7 2 // 3.0 7 ÷ 2 (целочисленно)
7 3 % 1.0 7 mod 3
5 ~ -5.0 Унарный минус
5 $ 5.0 Унарный плюс

Сложные выражения

3 4 4 * 1 5 - 2 ** / +

Эквивалентно: 3 + (4 × 4) ÷ (1 - 5)²

Выражения со скобками

(2 3 +)
((2 3 +) 4 *)

Поддерживаемые операции

Бинарные операции

  • + - сложение
  • - - вычитание
  • * - умножение
  • / - деление
  • // - целочисленное деление
  • % - остаток от деления
  • ** - возведение в степень

Унарные операции

  • ~ - унарный минус (изменение знака)
  • $ - унарный плюс (сохранение знака)

Требования к операциям

Целочисленные операции (// и %):

  • Оба операнда должны быть целыми числами
  • Деление на ноль запрещено

Деление (/):

  • Деление на ноль запрещено

Обработка ошибок

Программа обрабатывает следующие типы ошибок:

  • ERROR: Division by zero - деление на ноль
  • ERROR: Integer division by zero - целочисленное деление на ноль
  • ERROR: Modulo by zero - взятие остатка от деления на ноль
  • ERROR: expression is incorrect - некорректное выражение
  • ERROR: Invalid expression - синтаксическая ошибка
  • ERROR: Operands for // must be integers - нецелые операнды для //
  • ERROR: Operands for % must be integers - нецелые операнды для %

Примеры корректных скобок:

(2 3 +)
((2 3 +) 4 *)

Примеры некорректных скобок:

(2 3 +    # не закрыта скобка
(2 3 +))    # не открыта скобка

Структура проекта

main.py          # Основной файл программы
calculator_tests.py     # Тесты (если есть)
README.md           # Документация
constants.py      # Константы, использованные в программе  

Основные функции

is_int(el)

Проверяет, является ли число целым.

check_op(el)

Проверяет, является ли элемент бинарной операцией.

unary_op(el)

Проверяет, является ли элемент унарной операцией.

check_num(el)

Проверяет, можно ли преобразовать строку в число.

check_brackets(expr)

Проверяет корректность расстановки скобок в выражении.

remove_brackets(expr)

Удаляет все скобки из выражения, если они корректны.

calc(expr)

Вычисляет выражение в обратной польской нотации.

run()

Основная функция для чтения и вычисления выражений из консоли.

Тестирование

Для запуска тестов:

pytest calculator_tests.py -v

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

Пример 1: Базовые операции

$ python src/main.py
2 3 +
5 3 -
4 3 *

Пример 2: Сложное выражение

$ echo "3 4 4 * 1 5 - 2 ** / +" | python src/main.py
4.0

Пример 3: Обработка ошибок

$ python src/main.py
5 0 /
ERROR: Division by zero
7 2.5 //
ERROR: Operands for // must be integers

Ограничения

  • Поддерживаются только числа с плавающей точкой
  • Максимальная точность определяется типом float в Python
  • Выражения должны быть разделены пробелами
  • Скобки должны быть правильно оформлены с пробелами

Допущения

  • При целочисленном делении и взятии остатка от числа, числа должны быть целыми, но могут быть с плавающей точкой (например, 5.0 1.0 //)
  • Пробел между скобкой и числом или операцией необязателен

Разработка

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

  • Модуль sys для работы со стандартным вводом
  • Обработка исключений с помощью try и except для управления ошибками
  • Стековая машина для вычисления RPN выражений
  • Модуль pytest для тестирования программы

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages