Этот проект представляет собой калькулятор для вычисления математических выражений, записанных в обратной польской нотации (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операнд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 | 2³ |
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 # Константы, использованные в программе
Проверяет, является ли число целым.
Проверяет, является ли элемент бинарной операцией.
Проверяет, является ли элемент унарной операцией.
Проверяет, можно ли преобразовать строку в число.
Проверяет корректность расстановки скобок в выражении.
Удаляет все скобки из выражения, если они корректны.
Вычисляет выражение в обратной польской нотации.
Основная функция для чтения и вычисления выражений из консоли.
Для запуска тестов:
pytest calculator_tests.py -v$ python src/main.py
2 3 +
5 3 -
4 3 *$ echo "3 4 4 * 1 5 - 2 ** / +" | python src/main.py
4.0$ 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 для тестирования программы