Модуль на 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
Aktualne zlecenia dla freelancerów w kategorii Aplikacje desktopowe
Potrzebuję pilnie uzyskać zapytania POST / GET / PUT z aplikacji mobilnej TikTokW zasadzie. Należy wydobyć zapytania POST / GET / PUT z aplikacji mobilnej TikTok Nawet nie trzeba do końca niczego odwracać, ponieważ podpisy są w internecie itd. Ale byłoby też super Cała autoryzacja (Wysyłanie danych/potwierdzenie przez e-mail i wprowadzenie kodu, jeśli to… Programowanie stron internetowych, Aplikacje desktopowe ∙ 6 godzin 21 minut temu ∙ 8 ofert |
Opracowanie niestandardowego oprogramowania (aplikacja na Androida + CMS) dla kiosków samoobsługowych SUNMI K2 (fast food)
82 PLN
Szukamy doświadczonego zespołu lub programisty Android na poziomie średnim/zaawansowanym (możliwe, że z umiejętnościami Full-stack) do stworzenia własnego oprogramowania dla kiosków samoobsługowych sieci fast food. Obecnie nasze terminale działają na bazie gotowego chmurowego… Content Management Systems, Aplikacje desktopowe ∙ 1 dzień temu ∙ 17 ofert |
Należy przeprowadzić migrację obecnego programu roboczego z foxpro na C#Cześć wszystkim! Mamy program na foxpro (ma kilka modułów, program do ewidencji), mamy źródła programu, w razie pilnej potrzeby można skonsultować się z osobami zajmującymi się wsparciem bieżącego programu. Co należy zrobić: 1. Analiza, co i jak działa, sporządzenie listy… C#, Aplikacje desktopowe ∙ 6 dni 8 godzin temu ∙ 18 ofert |
Mistrzowska program «KONSTRUCTOR»
15 238 PLN
Szukamy bardzo doświadczonego programisty C++ do modernizacji istniejącego oprogramowania (programu głównego). Program odpowiada za tworzenie pochodnego oprogramowania reprezentującego sesje audiowizualnej korekcji psychologicznej. Obecna wersja jest napisana w czystym WinAPI… C i C++, Aplikacje desktopowe ∙ 8 dni 21 godzin temu ∙ 19 ofert |
Konfiguracja ODOO Enterprise dla budownictwaНеобхідно побудувати картки та налаштувати зручний імпорт, інтеграцію з ЕДО і загалом Workflow ODOO Компанія займається системною інтеграцією: маємо поставки обладнання В2В або з прямою маржинальністю, або з рібейтами в подальшому. Крім того, ведемо будівельні роботи на об'єктах… Automatyzacja zarządzania przedsiębiorstwem, Aplikacje desktopowe ∙ 9 dni 6 godzin temu ∙ 7 ofert |