Практикум 9 закрепляет set, dict, frozenset и вложенные структуры.
Для чисел, кратных 3 или 5, подходит set comprehension с условием.
Общие ключи двух словарей удобно искать через пересечение set(dict1) & set(dict2).
Список строк превращается в словарь длин через dict comprehension.
Подмножество словаря означает совпадение пар ключ-значение, а не только ключей.
Пустые значения можно удалить comprehension с проверкой truthiness.
frozenset нужен как ключ, когда набор элементов не должен зависеть от порядка.
В задачах с вводом отделяйте чистую логику от input(), чтобы проще тестировать.
Топ-3 ошибки: проверять подмножество словаря только по ключам; терять рецепты с одинаковым набором ингредиентов; использовать set как ключ вместо frozenset.
Большие решения в одном цикле
Практикум часто показывает прямой код в одном файле.
Современная практика
Для сложных задач выделяйте функции: build_recipe_index(), find_available_recipes(), group_students().
Проверка пустоты через if value
Это коротко удаляет None, '', [] и другие falsy-значения.
Современная практика
Если 0 или False являются допустимыми данными, проверяйте явно: value is not None and value != '' and value != [].
frozenset как техническая деталь
В учебной задаче frozenset нужен для ключа.
Современная практика
В реальном коде это хороший способ показать, что порядок элементов не важен и набор не должен изменяться.
Проверить по документации: Современные замечания о стиле, производительности и поведении структур данных сверяйте с документацией Python версии, которую используете.