Skip to content

SnakeStars/convex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

date author title main_version
9 ноября 2023 года
Е.А. Роганов
Проект «Выпуклая оболочка»
2

Постановка задачи

Необходимо написать программу, находящую выпуклую оболочку последовательно поступающих точек плоскости и вычисляющую её периметр и площадь. Решение должно быть индуктивным, что означает определение выпуклой оболочки и вычисление её характеристик сразу после поступления очередной точки с использованием методов теории индуктивных функций.

Краткий комментарий к решению

  • Ключевое понятие проекта: освещённость ребра из точки
  • Вспомогательные классы:
    • R2Point — точка на плоскости
    • Deq — контейнер дек (double ended queue)
  • Основные классы:
    • Figure — «абстрактная» фигура
    • Void — нульугольник
    • Point — одноугольник
    • Segment — двуугольник
    • Polygon — многоугольник
  • Файлы проекта:
    • README.md — данный файл
    • r2point.py — реализация класса R2Point
    • deq.py — реализация класса Deq
    • convex.py — реализация основных классов
    • run_convex.py — файл запуска
    • tk_drawer.py — интерфейс к графической библиотеке
    • run_tk_convex.py — файл запуска с использованием графики
    • tests/test_r2point.py — тесты к классу R2Point
    • tests/test_convex.py — тесты к основным классам

Файлы run_tk_convex.py и run_tk_convex.py являются исполняемыми (они имеют бит x), в первой строке каждого из них используется шебанг и команда env с опцией (ключом) -S. Это обеспечивает передачу интерпретатору языка Python опции (ключа) -B, отменяющего генерацию pyc-файлов в директории __pycache__.

Соблюдение соглашений о стиле программного кода

Для языка Python существуют соглашения о стиле кода. Они являются лишь рекомендациями (интерпретатор игнорирует их нарушение), но основную их часть при написании программ целесообразно соблюдать. Существует простой способ проверить соблюдение считающегося правильным стиля записи кода с помощью утилиты (программы) pycodestyle. Утилита yapf позволяет даже изменить код в соответствии с этими соглашениями.

Команда

pycodestyle r2point.py

позволяет, например, проверить соблюдение стиля для файла r2point.py. С помощью очень мощной и часто используемой утилиты find проверить корректность стиля всех файлов проекта можно так:

find . -name '*.py' -exec pycodestyle {} \;

Эта команда находит все файлы с расширением py и запускает программу pycodestyle последовательно для каждого из них.

Запуск тестов

Уже известная нам команда (см. материал, посвящённый тестированию программ)

python -B -m pytest -p no:cacheprovider tests

запускает pytest, выполняя все начинающиеся с test методы классов, имена которых начинаются с Test, содержащиеся во всех файлах test_*.py директории tests.

Вот как примерно может выглядеть результат запуска этой команды:

[roganov@aorus convex]$ python -B -m pytest -p no:cacheprovider tests
============================= test session starts ==============================
platform linux -- Python 3.12.0, pytest-7.4.3, pluggy-1.3.0
rootdir: /home/roganov/convex
plugins: mock-3.12.0
collected 47 items                                                             

tests/test_convex.py ..............................                      [ 63%]
tests/test_r2point.py .................                                  [100%]

============================== 47 passed in 0.07s ==============================

Проверка покрытия тестами кода программы

Для языка Python почти стандартом проверки покрытия является библиотека coverage. Вот как можно её использовать:

[roganov@aorus convex]$ export PYTHONDONTWRITEBYTECODE=yes
[roganov@aorus convex]$ coverage run -m pytest -p no:cacheprovider tests && coverage report -m ; rm -f .coverage
============================= test session starts ==============================
platform linux -- Python 3.12.0, pytest-7.4.3, pluggy-1.3.0
rootdir: /home/roganov/convex
plugins: mock-3.12.0
collected 47 items                                                             

tests/test_convex.py ..............................                      [ 63%]
tests/test_r2point.py .................                                  [100%]

============================== 47 passed in 0.17s ==============================
Name                    Stmts   Miss  Cover   Missing
-----------------------------------------------------
convex.py                  75      8    89%   116-123
deq.py                     25      7    72%   41-47
r2point.py                 31      5    84%   49-53
tests/test_convex.py       81      0   100%
tests/test_r2point.py      55      0   100%
-----------------------------------------------------
TOTAL                     267     20    93%

Полученный результат говорит нам о том, что не все строки тестируемых `py'-файлов проекта проверяются во время тестов. Насколько это плохо и можем ли мы «исправить» ситуацию?

Установка переменной окружения (environment) PYTHONDONTWRITEBYTECODE запрещает интерпретатору языка Python создавать pyc-файлы. При запуске тестов мы добивались этого передавая интерпретатору ключ -B, но coverage не позволяет так поступить.

Вышеприведённая команда выполняет последовательно три действия: - coverage запускает тесты; - в случае их успешного завершения печатается отчёт coverage; - и удаляется файл .coverage

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

./run_convex.py

Запуск программы с графическим интерфейсом

./run_tk_convex.py

About

university homework

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages