Тема: разработка консольных калькуляторов на Python
Вариант: M2 — Шунтирующий двор со скобками
.
├── lab<# лабораторной работы> # Кодовая база вашей лабораторной работы
│ ├── src/ # Исходный код
│ ├── main.py # Главный исполняемый файл
│ ├── processing_rpn.py # Реализация функции для преобразования инфиксного выражения в массив токенов , вызова функий по преобразованию инфиксного выражения в обратную польскую нотацию и её вычисления.
│ ├── count_rpn.py # Реализация функции для вычисления обратной польской нотации
│ ├── rpn_parse.py # Реализация функции для преобразования инфиксного выражения в обратную польскую нотацию
│ ├── constants.py # константы
│ ├── tests/ # Unit тесты
│ ├── test_complex_expressions.py # Unit тесты на сложные выражения
│ ├── test_complex_expressions_all_operations_brackets.py # Unit тесты на сложные варажения с всевозможными операциями и скобками
│ ├── test_erroneous_expressions.py # Unit тесты на ошибочные выражения
│ ├── test_non_integer_numbers_brackets.py # Unit тесты на нецелые числа
│ ├── test_simple_expressions.py # Unit тесты на простые выражения
│ ├── test_simple_expressions_integers_brackets.py # Unit тесты на простые выражения со скобками
│ ├── test_unary_non_integer_brackets.py # Unit тесты на выражения с унарными операциями, скобкаи, нецелыми числами
│ ├── test_function_count_rpn.py # Unit тесты на функцию count_rpn
│ ├── test_function_rpn_parse.py # Unit тесты на функцию rpn_parse
│ ├── uv.lock # зависимости вашего проекта
│ ├── .gitignore # git ignore файл
│ ├──.pre-commit-config.yaml # Средства автоматизации проверки кодстайла
│ ├── README.md # Описание проекта
- Переменные, функции и модули именуются по snake_case
-
Константы вынесены в файл constants.py и именовановаться с помощию символов в верхнем регистре
-
Имена сущностей должны быть осмысленные и содержательные
-
Все отступы консистентны: 1 TAB = 4 spaces
-
Весь функционал описан в функциях.
-
К каждой функции описаны docstring и аннотации к аргументам и выходным параметрам функций.
В папке tests лежат unit тесты для проверки функциональности программы или ее частей. Название тестов содержит определение проверямой части. Проверяются не только успешные кейсы, но и краевые условия и кейсы в которых была допущена ошибка (неудачные кейсы).
В репозиторий добавлен файл requirements.txt.
Нужно было преобразовать инфиксное выражение, поданное на вход программы, в обратную польскую нотацию и вычислить её.
Была реализованна функция "processing_rpn", которая удаляет из выражения лишние элементы, преобразует инфиксное выражение в массив токенов, который передаёт в функцию "rpn_parse", с помощью которой массив токенов инфиксного выражения преобразуется в обратную польскую нотацию при помощи стека. Полученый RPN вычисляется функцией "count_rpn", которая последовательно выполняет операции над числами из стека до тех пор, пока не останется итоговое значение
+плюс-минус*умножение/деление//деление нацело%остаток от деления$унарный плюс~унарный минус^возвести в степень
Выражение поступающее на вход:
6 + 9
Результат полученный на выходе:
15
Выражение поступающее на вход:
4.5 / 3
Результат полученный на выходе:
1.5
Выражение поступающее на вход:
( ( 4.5 / 3 ) * 2 + 1 )
Результат полученный на выходе:
4
-
Операция деление нацело недоступна для нецелых чисел
-
Операция остаток от деления недоступна для нецелых чисел
-
Программа считает возведение больших чисел в большую степень ошибкой, но вычисляет выражения с большими числами и остальными операторами с точностью, с которой считает python