Модуль на Python
Необходимо реализовать модуль для языка программирования Python для работы с массивами.
Предусмотрите следующие возможности модуля:
создание динамических массивов для чисел разных типов(целые (long), числа с плавающей точкой (double));
создание пустого массива;
создание массива, заполненного заранее заданными данными;
реализуйте следующие функции для работы с массивом:
добавление элемента в конец массива (append);
вставка элемента в нужную позицию (insert);
удаление первого вхождения элемента в массив (remove);
удаление первого вхождения элемента в массив с возвратом (pop);
инвертирование массива (__reversed__ для поддержки функции reversed);
определение длины массива (поддержка функции len);
определение количества памяти, занимаемой массивом (sys.getsizeof, __sizeof__);
сравнение со стандартным массивом из модуля array или списком (__eq__);
возможность итерирования по массиву;
алгоритм бинарного поиска, возвращающий индекс найденного элемента или None если ничего не найдено
Не забудьте предусмотреть функцию изменения размера, которая будет работать "под капотом".
Для большей справки можно обратиться к документации модуля array стандартной библиотеки Python.
Требования к реализации
Модуль dynamic_array необходимо реализовать как Си расширение для Python. Это можно выполнить с помощью Cython – специальной надстройки для Python, позволяющей вызывать функции из Си напрямую, а также обладающей приближенным к Python синтаксисом. Документацию по Cython см. в полезных материалах. Также можно сразу реализовать этот модуль на языке Си и подключить его к Python с помощью Cython.
Обратите внимание, что при реализации на Cython или Си обертка на Python вокруг массива не нужна. Здесь dynamic_array содержит обертку только для тестов.
Метод инициализации класса Array должен принимать два аргумента:
код типа в виде строки, 'd' для чисел с плавающей точкой и 'i' для целых чисел;
набор инициализирующих данных, которые сразу будут занесены в массив.
Интерфейс методов и функций должен быть аналогичен методам модуля array стандартной библиотеки Python.
Модуль binary_search, содержащий реализацию бинарного поиска разрешается реализовать на Python. Этот модуль должен поддерживать работу с объектами из dynamic_array.
search(array: Iterable, item: Any=False) -> Optional[int]:
В файлах dynamic_array.py и binary_search.py размещены упрощенные шаблоны классов и функций. В Файлах test_dynamic_array.py и test_binary_search.py размещены тесты для проверки решения. Тесты можно запустить с помощью модуля unittest или pylint.
В файле my_array.pyx приведен пример реализации расширения для Python на Cython. Для компиляции этого модуля необходимо создать файл setup.py пример которого можно найти в текущей директории. Затем достаточно выполнить команду:
python setup.py build_ext --inplace
По завершении выполнения компиляции и при отсутствии ошибок появятся файлы:
my_array.c
my_array.cp39-win_amd64.pyd
а также директория build
В файле my_array.cp39-win_amd64.pyd будет содержаться скомпилированный модуль, его можно использовать как обычный модуль Python. Для удобства его можно переименовать в my_array.pyd.
Для прохождения тестов вам понадобиться pytest и плагин pytest-timeout. Установить их можно командами:
python -m pip install pytest
python -m pip install pytest-timeout
Также нужен файл conftest.py расположите его рядом с тестами. Подробнее об этом файле можно узнать в документации.
Запустить тесты можно командой:
pytest test_dynamic_array.py -s
Входные и выходные данные
Пример входных данных для бинарного поиска:
Исходный список: [-3, 0, 2, 5, 5], 0
Результат: 1
Исходный список: [-3, 0, 2, 5, 5], 5
Результат: 3
Исходный список: [-3, 0, 2, 5, 5], 10
Результат: None
Методика оценивания
Оценка выставляется в соответствии со следующими требованиями:
Общие требования:
код работы проходит проверку утилитой pylint с конфигурационным файлом .pylintrc.
код работы успешно проходит тесты, если таковые имеются.
наличие документации к модулям, функциям, классам и методам.
наличие аннотации типов.
На оценку 3 балла:
реализовать методы append, insert, remove, __eq__.
На оценку 4 балла:
дополнительно реализовать методы pop, reverse.
На оценку 5 балла:
реализовать все методы, указанные в описании к работе.
Файлы по ссылке:
https://github.com/redb0/aads/tree/main/practice/practice_1.1
Актуальные фриланс-проекты в категории Python
Специалист по Excel / автоматизации процессов (Excel + желательно программирование)Ищем специалиста с ПРОДВИНУТЫМИ знаниями Excel для оптимизации существующего файла и автоматизации процессов. Будет большим преимуществом, если вы также имеете навыки программирования / VBA / Power Query / Power Automate или опыт создания сложной логики в Excel. Задачи проекта… Python, Базы данных и SQL ∙ 2 часа 44 минуты назад ∙ 21 ставка |
Автоматизация процессоів через API и PhytonНиже описал текущий процесс и то, к какому результату хотелось бы прийти. Также прикладіваю файлы реалтного процесса чтобы лучше понять как он выглядит в ревльности Текущий процесс Сейчас весь процесс выполняется вручную: загрузка/выгрузка файлов, перенос данных между… AI и машинное обучение, Python ∙ 3 часа 45 минут назад ∙ 29 ставок |
Необходимо создать бота в ТГ для оплаты подписки.
2000 UAH
Необходимо создать бота в телеграме, где пользователь сможет оформить подписку на доступ к веб-камерам, которые находятся во дворе. Организовать в боте оплату двух видов подписок (на месяц и на один день). Бот должен автоматически проверять оплату и после выдавать ссылку-доступа. Python, Разработка ботов ∙ 16 часов 31 минута назад ∙ 71 ставка |
Парсинг и классификация большого массива изображенийНеобходимо реализовать проект по сбору и структурированию большого массива архитектурных изображений из открытых веб-источников.Задача включает: автоматизированный сбор изображений; загрузка файлов в максимально доступном качестве; классификацию изображений по категориям:… Python, Парсинг данных ∙ 23 часа 31 минута назад ∙ 30 ставок |
Бизнес-логикa платформы: подтверждение занятий, контроль посещаемости-и история уроков (DjangoДоработка бизнес-логики образовательной платформы: подтверждение занятий, контроль посещаемости и история уроков (Django + React) Необходимо реализовать полноценную систему подтверждения уроков, контроля посещаемости и хранения истории подтверждений. Важно Перед началом… Python ∙ 3 дня 4 часа назад ∙ 29 ставок |