Текст задания из LMS / источника
Практикум 11 содержит 8 блоков заданий на повторение пройденного материала:
- Фильтрация чётных чисел через предикат и через
filter+lambda. - Фильтрация строк по длине и по произвольному критерию.
- Агрегирование списка: произведение элементов.
- Сортировка списка слов по длине.
- Очередь задач с ограничением по времени.
- Анализ оценок студентов.
- Сортировка слов по сумме кодов символов.
- Цепочка шифрования строки.
Для каждой функции добавьте аннотации типов принимаемых и возвращаемых значений.
Пошаговое решение
Шаг 1. Фильтрация чётных через предикат
# homework_step1.py
from typing import Callable
def is_even(n: int) -> bool:
return n % 2 == 0
def filter_by_predicate(
predicate: Callable[[int], bool],
numbers: list[int]
) -> list[int]:
return [n for n in numbers if predicate(n)]
nums = [1, 2, 3, 4, 5, 6]
print(filter_by_predicate(is_even, nums))
Сначала создаём предикат, который возвращает True для чётных чисел. Затем передаём его в функцию фильтрации.
Шаг 2. Очередь с ограничением времени
# homework_step2.py
def schedule_within_limit(
tasks: dict[str, int],
time_limit: int
) -> dict[str, int]:
sorted_tasks = sorted(tasks.items(), key=lambda item: item[1], reverse=True)
selected: dict[str, int] = {}
total = 0
for name, duration in sorted_tasks:
if total + duration <= time_limit:
selected[name] = duration
total += duration
return selected
tasks = {"task1": 5, "task2": 3, "task3": 7, "task4": 2}
print(schedule_within_limit(tasks, 10))
Сортируем задачи по убыванию времени выполнения. Добавляем самые длинные задачи в результат, пока суммарное время не превышает лимит.
Проверка в VS Code
- Создайте файл
practice11.pyи перенесите решения. - Запустите
python practice11.pyв терминале. - Сравните вывод с примерами из заданий.
- Проверьте крайние случаи:
- пустой список чисел для фильтрации;
- пустой словарь задач;
- лимит времени, меньший любой задачи;
- список слов, где ни одно не подходит под критерий.