🏠 Домашнее задание

⚡ Кратко: домашнее задание

Выполните все задания практикума 11 самостоятельно.

Особое внимание уделите аннотациям типов и проверке крайних случаев.

Пошагово разберите задания 1.1 и 5.

Текст задания из LMS / источника

Практикум 11 содержит 8 блоков заданий на повторение пройденного материала:

  1. Фильтрация чётных чисел через предикат и через filter + lambda.
  2. Фильтрация строк по длине и по произвольному критерию.
  3. Агрегирование списка: произведение элементов.
  4. Сортировка списка слов по длине.
  5. Очередь задач с ограничением по времени.
  6. Анализ оценок студентов.
  7. Сортировка слов по сумме кодов символов.
  8. Цепочка шифрования строки.

Для каждой функции добавьте аннотации типов принимаемых и возвращаемых значений.

Пошаговое решение

Шаг 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

  1. Создайте файл practice11.py и перенесите решения.
  2. Запустите python practice11.py в терминале.
  3. Сравните вывод с примерами из заданий.
  4. Проверьте крайние случаи:
    • пустой список чисел для фильтрации;
    • пустой словарь задач;
    • лимит времени, меньший любой задачи;
    • список слов, где ни одно не подходит под критерий.