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

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

time.time() помогает измерять длительность, sleep() делает задержку.

collections содержит специализированные структуры данных.

OrderedDict сохраняет порядок и умеет move_to_end().

popitem(last=False) удаляет первый элемент OrderedDict, что удобно для очереди.

Кэш хранит результаты повторных операций, LRU удаляет давно не используемые записи.

@lru_cache кэширует вызовы функции по аргументам.

defaultdict создаёт значение по умолчанию при обращении к отсутствующему ключу.

Counter считает элементы и умеет most_common(), elements(), update(), subtract().

Топ-3 ошибки: использовать sleep() в измерении быстрых операций; забывать, что defaultdict добавляет ключ при чтении; ожидать от Counter вычитания отрицательные значения при операторе -.

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

Повторения букв

Реализуйте функцию, которая принимает текст и возвращает словарь с подсчётом количества каждой буквы, игнорируя регистр.

text = "Programming is fun!"

Пример вывода: {'p': 1, 'r': 2, ...}

Группировка студентов по классам

Создайте структуру для группировки студентов по классам и добавьте студентов в соответствующие группы.

students = [("class1", "Alice"), ("class2", "Bob"), ("class1", "Charlie"), ("class3", "Daisy")]

Пример вывода: {'class1': ['Alice', 'Charlie'], 'class2': ['Bob'], 'class3': ['Daisy']}

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

Повторения букв

from collections import Counter

def count_letters(text):
    letters = [char.lower() for char in text if char.isalpha()]
    return dict(Counter(letters))

print(count_letters("Programming is fun!"))

isalpha() убирает пробелы и пунктуацию, lower() объединяет разные регистры.

Группировка по классам

from collections import defaultdict

def group_by_class(students):
    result = defaultdict(list)
    for class_name, student in students:
        result[class_name].append(student)
    return dict(result)

students = [("class1", "Alice"), ("class2", "Bob"), ("class1", "Charlie"), ("class3", "Daisy")]
print(group_by_class(students))

defaultdict(list) создаёт список для нового класса автоматически.

Проверка в VS Code

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