📝 Задания

⚡ Кратко: задания

Counter подходит для популярных слов.

defaultdict(list) удобно группирует задачи и слова.

Поиск задач по категории можно сделать фильтрацией items().

OrderedDict позволяет менять порядок задач без создания новой очереди.

defaultdict(int) подходит для подсчёта посещений страниц.

global нужен только в задаче со счётчиком вызовов, но в проектах лучше избегать такой зависимости.

LRU-очередь можно моделировать через OrderedDict и move_to_end().

Каждое решение лучше оформлять функцией с понятными параметрами.

Топ-3 ошибки: не нормализовать регистр слов; создавать новую очередь вместо изменения исходной; забыть удалить старые элементы при превышении LRU-лимита.

Задание 1. Популярные слова

Функция принимает любое количество строк и возвращает 5 самых популярных слов с количеством.

text1 = "This is a sample text with some repeated words."
text2 = "Another sample text with different words."
text3 = "Text processing is fun when words repeat."

Ожидаемый результат: words: 3, text: 3, with: 2, sample: 2, is: 2

Задание 2. Группировка задач по категории

Сгруппируйте задачи по их категориям.

tasks = {"task1": "работа", "task2": "учёба", "task3": "развлечения", "task4": "работа", "task5": "учёба"}

Ожидаемый результат: {'работа': ['task1', 'task4'], ...}

Задание 3. Поиск задач

Верните список задач для указанной категории.

category = "учёба"

Ожидаемый результат: ['task2', 'task5']

Задание 4. Очередь задач с приоритетом

Измените исходный OrderedDict так, чтобы высокий приоритет был в начале.

tasks = OrderedDict({"task1": "низкий", "task2": "средний", "task3": "высокий", "task4": "низкий", "task5": "высокий"})

Ожидаемый результат: task3, task5, task2, task1, task4

Задание 5. Подсчёт посещений страниц

Подсчитайте посещения каждой страницы через defaultdict.

pages = ["home", "about", "home", "products", "home", "contact", "products"]

Ожидаемый результат: {'home': 3, 'about': 1, 'products': 2, 'contact': 1}

Задание 6. Группировка слов по длине

Сгруппируйте слова по их длине.

words = ["apple", "banana", "kiwi", "grape", "orange", "peach"]

Ожидаемый результат: 5: ['apple', 'grape', 'peach']

Задание 7. Глобальный счётчик

Создайте increment_counter, который использует global counter для подсчёта вызовов.

increment_counter()
increment_counter()
print(counter)

Ожидаемый результат: Вызовов функции: 2

Задание 8. Очередь с LRU-кэшированием

Добавляйте новые задачи, перемещайте повторные в конец и удаляйте старые при превышении лимита.

tasks = ["task1", "task2", "task3", "task4", "task5", "task6"]
new_tasks = ["task4", "task1", "task7", "task2"]

Ожидаемый результат: ['task4', 'task1', 'task7', 'task2']

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Что важнее всего в практическом задании?

Вопрос 2

Как безопаснее двигаться в практикуме?

Вопрос 3

Что делать, если решение не совпадает с ожидаемым результатом?

Вопрос 4

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 5

Зачем использовать f-strings в современном Python?

Вопрос 6

Когда полезен ранний возврат из функции?