Тестовые задания по Python

Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио

стэк>
Компания>
Сложность>

MarketIntelligence • Средняя сложность

Средний уровень сложности - 2 звезды

Тестовое задание по Python от компании MarketIntelligence

Тестовое задание для стажера в Market Intelligence. Задача: Нужно сделать HTTP сервис для одноразовых секретов наподобие [https://onetimesecret.com/](https://onetimesecret.com/?locale=ru). Он должен позволить создать секрет, задать кодовую фразу для его открытия и cгенерировать код, по которому можно прочитать секрет только один раз. UI не нужен, это должен быть JSON Api сервис. Для написание сервиса можно использовать [FastAPI](https://github.com/tiangolo/fastapi) или любой другой фреймворк. - Метод `/generate` должен принимать секрет и кодовую фразу и отдавать `secret_key` по которому этот секрет можно получить. - Метод `/secrets/{secret_key}` принимает на вход кодовую фразу и отдает секрет. Требования: - Язык программирования: Python 3.7. - Использование [Docker](https://www.docker.com), сервис должен запускаться с помощью [`docker-compose up`](https://docs.docker.com/compose/reference/up/). - Требований к используемым технологиям нет. - Код должен соответствовать PEP, необходимо использование type hints, к публичным методам должна быть написана документация на английском языке. Усложнения: - Написаны тесты (постарайтесь достичь покрытия в 70% и больше). Вы можете использовать [pytest](https://docs.pytest.org/en/latest/) или любую другую библиотеку для тестирования. - Сервис асинхронно обрабатывает запросы. - Данные сервиса хранятся во внешнем хранилище, запуск которого также описан в `docker-compose`. Мы рекомендуем использовать [MongoDB](https://www.mongodb.com), но Вы можете использовать любую подходящую базу. - Секреты и кодовые фразы не хранятся в базе в открытом виде. - Добавлена возможность задавать время жизни для секретов. Можно попробовать реализовать это с помощью [TTL индексов](https://docs.mongodb.com/manual/core/index-ttl/).

PyShop • Высокая сложность

Высокий уровень сложности - 3 звезды

Тестовое задание по Python от компании PyShop

Тестовое задание для разработчика на python У сети ресторанов доставки "ФорФар" есть множество точек, на которых готовятся заказы для клиентов. Каждый клиент хочет вместе с заказом получить чек, содержащий детальную информацию о заказе. Сотрудники кухни также хотят чек, чтобы в процессе готовки и упаковки заказа не забыть положить всё что нужно. Наша задача помочь и тем и другим, написав сервис для генерации чеков. Схема работы сервиса ![][arch] 1. Сервис получает информацию о новом заказа, создаёт в БД чеки для всех принтеров точки указанной в заказе и ставит асинхронные задачи на генерацию PDF-файлов для этих чеков. Если у точки нет ни одного принтера - возвращает ошибку. Если чеки для данного заказа уже были созданы - возвращает ошибку. 2. Асинхронный воркер с помощью wkhtmltopdf генерируют PDF-файл из HTML-шаблон. Имя файла должно иметь следущий вид <ID заказа>\_<тип чека>.pdf (123456_client.pdf). Файлы должны хранится в папке media/pdf в корне проекта. 3. Приложение опрашивает сервис на наличие новых чеков. Опрос происходит по следующему пути: сначала запрашивается список чеков которые уже сгенерированы для конкретного принтера, после скачивается PDF-файл для каждого чека и отправляется на печать. Технические требования 1. Сервис должен быть написан на python и Django 2. База данных - PostgreSQL v9.6 3. Для асинхронных задач использовать django_rq 4. Все инфраструктурные вещи необходимые для сервиса ([PostgreSQL], [Redis], [wkhtmltopdf]) запускать в docker с помощью docker-compose, **_сам проект не нужно оборачивать в docker_** 5. Помимо API, должна быть админка для обеих моделей, с возможностью фильтровать чеки по принтеру, типу и статусу Примечания 1. Вёрстка HTML-шаблонов для чеков лежит в репозитории в папке templates 2. Для простоты работы с wkhtmltopdf стоит использовать docker-контейнер [wkhtmltopdf] 3. Во время написания сервиса не стоит изобретать велосипеды, лучше взять что-то существующие Модели 1. Принтер (Printer). Каждый принтер печатает только свой тип чеков. Поле api_key принимает уникальные значения, по нему однозначно определяется принтер. Для этой модели должны быть fixtures (принтеры для обоих типов чеков для нескольких точек). | Поле | Тип | Значение | Описание | | ---------- | ------------ | --------------- | --------------------------------- | | name | CharField | | название принтера | | api_key | CharField | | ключ доступа к API | | check_type | CharField | kitchen\|client | тип чека которые печатает принтер | | point_id | IntegerField | | точка к которой привязан принтер | 2. Чек (Check). Информация о заказе для каждого чека хранится в JSON, нет необходимости делать отдельные модели. | Поле | Тип | Значение | Описание | | ---------- | ---------- | ---------------------- | ---------------------------- | | printer_id | ForeignKey | | принтер | | type | CharField | kitchen\|client | тип чека | | order | JSONField | | информация о заказе | | status | CharField | new\|rendered\|printed | статус чека | | pdf_file | FileField | | ссылка на созданный PDF-файл | API Описание доступных методов находится в файле [api.yml](api.yml) (swagger-спецификация). Можно отрендерить через [онлайн редактор][swagger] или через соответствующий плагин для PyCharm или VSCode [wkhtmltopdf]: https://hub.docker.com/r/openlabs/docker-wkhtmltopdf-aas/ [postgresql]: https://hub.docker.com/_/postgres/ [redis]: https://hub.docker.com/_/redis/ [swagger]: https://editor.swagger.io/ [arch]: images/arch.png

Python • Средняя сложность

Средний уровень сложности - 2 звезды

Тестовое задание по Python от компании Python

Задание 1. Разработать функцию определения счета в игре Задача В примере кода ниже генерируется список фиксаций состояния счета игры в течение матча. Разработайте функцию get_score(game_stamps, offset), которая вернет счет на момент offset в списке game_stamps. Нужно суметь понять суть написанного кода, заметить нюансы, разработать функцию вписывающуюся стилем в существующий код, желательно адекватной алгоритмической сложности. ```Python from pprint import pprint import random import math TIMESTAMPS_COUNT = 50000 PROBABILITY_SCORE_CHANGED = 0.0001 PROBABILITY_HOME_SCORE = 0.45 OFFSET_MAX_STEP = 3 INITIAL_STAMP = { "offset": 0, "score": { "home": 0, "away": 0 } } def generate_stamp(previous_value): score_changed = random.random() > 1 - PROBABILITY_SCORE_CHANGED home_score_change = 1 if score_changed and random.random() > 1 - \ PROBABILITY_HOME_SCORE else 0 away_score_change = 1 if score_changed and not home_score_change else 0 offset_change = math.floor(random.random() * OFFSET_MAX_STEP) + 1 return { "offset": previous_value["offset"] + offset_change, "score": { "home": previous_value["score"]["home"] + home_score_change, "away": previous_value["score"]["away"] + away_score_change } } def generate_game(): stamps = [INITIAL_STAMP, ] current_stamp = INITIAL_STAMP for _ in range(TIMESTAMPS_COUNT): current_stamp = generate_stamp(current_stamp) stamps.append(current_stamp) return stamps game_stamps = generate_game() pprint(game_stamps) def get_score(game_stamps, offset): ''' Takes list of game's stamps and time offset for which returns the scores for the home and away teams. Please pay attention to that for some offsets the game_stamps list may not contain scores. ''' # return home, away ``` Результат 1. Ссылка на [gist](https://gist.github.com/) с исходным кодом функции. Задание 2. Разработать тесты для функции определения счета в игре Задача Для разработанной в предыдущем задании функции get_score(game_stamps, offset) разработайте unit-тесты на фреймворке [unittest](https://docs.python.org/3/library/unittest.html). Тесты должны учитывать все возможные случаи использования функции, концентрироваться на проверке одного случая, не повторяться, название тестов должно отражать суть выполняемой проверки. Результат 1. Ссылка на [gist](https://gist.github.com/) с исходным кодом тестов. Задание 3. Разработать парсер смартфонов Задача Разработать парсер, который будет собирать информацию о версиях операционных систем в топ-100 смартфонах с самым высоким рейтингом пользователей в каталоге [ozon.ru](http://ozon.ru/). На сайте [ozon.ru](http://ozon.ru/) в категории “Электроника -> Телефоны и смарт-часы” с сортировкой “Высокий рейтинг” нужно собрать информацию о первых 100 смартфонах попавших в выборку. Перейти на страницу с каждым из них и забрать информацию о версии операционной системы из характеристик. По собранным данным построить распределение моделей по версиям операционных систем в порядке убывания, например: ```txt Android 8 — 12 Android 10 — 9 iOS 14 — 8 … ``` Для парсинга следует использовать язык программирования Python, фреймворк Scrapy, для скачивания динамических частей сайта следует использовать Scrapy+Selenium. В выполнении задания может помочь scrapy proxy rotation middleware. Для расчета распределения следует использовать фреймворк Pandas. Результат 1. Ссылка на [gist](https://gist.github.com/) с распределение моделей устройств по версиям операционных систем в plain-text формате. 2. Ссылка на [github-репозиторий](https://github.com/) с публичным доступом с исходными кодами решения.

Python • Высокая сложность

Высокий уровень сложности - 3 звезды

Тестовое задание по Python от компании Python

Тестовое задание в Контент В Контенте мы занимаемся агрегацией отелей поставщиков (supplier), объединяя одинаковые отели от разных поставщиков в единую сущность (мета-отель). В этом задании мы предлагаем реализовать базовый сервис (API) для работы с отелями. Для дополнительного контекста и перспективы, представьте что это ключевой сервис в вашем тревел стартапе. Функциональность Список API, которые должны быть покрыты в этом задании: - Создать отель поставщика - Объединить 1 и более отелей поставщиков в один мета-отель - Получить список мета-отелей и входящих в них отелей - Перепривязать отель к другому мета-отелю - Получить историю привязки отеля (к каким мета-отелям в какой момент времени он был привязан) Требования и ограничения - Авторизация/аутентификация не нужна - Отель может быть привязан только к одному мета-отелю в один момент времени - В мета-отеле должен быть минимум один отель - Отель можно отвязать от мета-отеля и привязать к другому Пример данных Мета-отель: ``` id: mercure_pattaya id: windways ``` Отель: ``` id: 1 name: Mercure Pattaya supplier_id: AAA id: 2 name: Mercure Pattaya supplier_id: BBB id: 3 name: Windways Hotel supplier_id: AAA ``` Оценка Цель этого тестового задания - увидеть ваш лучший/самый идиоматичный код на Python/Django. Мы ожидаем увидеть: - Документацию API - README с описанием как запустить проект, запустить тесты и т.д - Чистую архитектуру, с корректной связанностью кода (decoupling), complexity isolation - Аккуратный, понятный, поддерживаемый код, с наличием комментариев к коду (если нужны) - Код на публичной платформе (github/gitlab/bitbucket) - Отсутствие "мертвого" кода (т.е пустые модули, неиспользуемые функции и параметры и т.д) - Тесты (доказательство работоспособности кода) - Реализация на Django + любой REST или RPC фреймворк, с которым вам комфортно - PostgreSQL в качестве БД (помните про блокировки, транзакции, race conditions) - Сервис корректно работает, если запущен в нескольких экземплярах (инстансах) - Проект должен запускаться через docker-compose Вопросы и сроки Cтрогих сроков нет, но мы хотели бы получить от вас примерную оценку времени. Не стесняйтесь задавать вопросы по заданию, если таковые возникнут.

Получите доступ более чем к 500 тестовым заданиям
Сервис можно использовать бесплатно,
без ограничений. Чтобы получить полный доступ,
вам необходимо зарегистрироваться.
1
...
567
...
15
где найти тестовые задания для практики
пример тестового задания junior
тестовые задания для junior python
практические задачи по python
решение тестового задания python