Задачи по Python для подготовки к собеседованиям. К каждой написаны тесты: решение готово, когда они проходят.
Форкните репозиторий, решайте у себя — тесты будут прогоняться автоматически при каждом push.
| Раздел | Задач | О чём |
|---|---|---|
strings_lists |
10 | строки и списки: методы языка, без алгоритмических приёмов |
Разделы добавляются по мере работы.
-
Нажмите Fork — появится ваша копия репозитория.
-
Склонируйте её себе:
git clone https://github.com/ВАШ-ЛОГИН/teaching-tasks.git cd teaching-tasks -
Поставьте pytest:
pip install -r requirements.txt
-
Запустите тесты — сейчас все падают, и это нормально:
pytest
Задачи лежат в tasks/<раздел>/tasks.py. Каждая функция описана в докстроке:
что принимает, что возвращает, какая ожидается сложность. Вместо тела стоит
raise NotImplementedError — замените его своим кодом.
Решайте по одной. После каждой запускайте тесты только для неё:
pytest -k count_wordsВесь раздел целиком:
pytest tests/strings_listsКогда всё зелёное, отправьте изменения к себе:
git add tasks/
git commit -m "Решение: count_words"
git pushПосле push тесты прогонятся на GitHub — вкладка Actions в вашем форке. Зелёная галочка рядом с коммитом означает, что всё сошлось.
Пока задачи не решены, там будет красный крест: тесты падают
с NotImplementedError. Это стартовое состояние, а не поломка.
Базовый уровень: работа с методами языка, без указателей, скользящего окна и префиксных сумм. Сложность указана к каждой задаче — на собеседовании вопрос о ней идёт следом за рабочим решением.
| Задача | Функция | Сложность |
|---|---|---|
| Количество слов в строке | count_words |
O(n) |
| Сумма всех чисел в строке | sum_numbers |
O(n) |
| Удалить гласные | remove_vowels |
O(n) |
| Самое длинное слово | longest_word |
O(n) |
| Каждое слово с большой буквы | capitalize_words |
O(n) |
| Второй максимум | second_max |
O(n), один проход |
| Убрать дубликаты, сохранив порядок | dedup |
O(n) |
| Частота символов | char_freq |
O(n), без Counter |
| Общие элементы двух списков | common |
O(n + m + k log k) |
| k наибольших элементов | top_k |
O(n log n) |
Первые пять — на владение методами. Последние пять требуют держать дополнительное состояние: счётчик, множество встреченного, две переменные вместо одной.
Сначала проговорите решение словами, потом пишите код, потом запускайте тесты. Упавший тест показывает пробел точнее любого объяснения: посмотрите, на каком входе он падает, и разберитесь почему.
ModuleNotFoundError: No module named 'tasks'— запускайтеpytestиз корня репозитория: путь импорта задаётся вpytest.ini.pytest: command not found— не установлен pytest, см. шаг 3.- Python старее 3.10 не поймёт запись
int | Noneв аннотациях. Проверьте версию:python3 --version.