Skip to content

LeonidAGF/pythonLab-1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Лабораторная работа №1

Введение

Тема: разработка консольных калькуляторов на 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

About

MAI Python Lab №1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages