📝 Практические задания

⚡ Задания в двух словах

  • Задание 1 — аннотации для списка строк и словаря длин.
  • Задание 2 — замена чисел в словаре на строки по другому словарю.
  • Задание 3 — отчёт с необязательным списком достижений.
  • Задание 4 — функция высшего порядка с аннотациями.

🏋️ Раздел тренировки

В этом разделе вы выполните практические задания, начиная с простых аннотаций и заканчивая функциями высшего порядка.

Цель тренировки: научиться самостоятельно писать документацию и аннотации типов, а также понимать, как передаются изменяемые объекты.

📂 Подготовка проекта

  1. Создайте папку для практики, например python-fundamentals-practice/lesson-44/.
  2. Создайте файл tasks.py и скопируйте в него условия заданий.
  3. Решайте каждое задание в отдельной функции с docstring и аннотациями типов.
  4. Запускайте файл через python tasks.py.

Задание 1. Длины слов

Условие: напишите функцию, которая принимает список строк и возвращает словарь, где ключи — строки, а значения — длина этих строк. Добавьте документацию и аннотации типов для всех параметров и возвращаемого значения.

Данные: words = ["apple", "banana", "cherry"]

Что должно получиться: {'apple': 5, 'banana': 6, 'cherry': 6}

Подсказка: используйте dict comprehension и функцию len().

Задание 2. Из чисел в слова

Условие: напишите функцию, которая заменяет числовые значения в словаре на их строковое представление из заранее подготовленного словаря сопоставлений. Добавьте документацию и аннотации типов.

Данные:

number_to_word = {1: "один", 2: "два", 3: "три"}
data = {"x": 1, "y": 2, "z": 3}

Что должно получиться: {'x': 'один', 'y': 'два', 'z': 'три'}

Подсказка: обходите ключи исходного словаря и подменяйте значение, если оно есть в словаре сопоставлений.

Задание 3. Генерация отчёта

Условие: напишите функцию, которая принимает имя пользователя и необязательный список его достижений. Если список пуст или не передан, возвращается сообщение "Имя: Нет достижений". Если список не пуст, возвращается строка с перечислением достижений через запятую. Добавьте документацию и аннотации типов.

Данные:

name = "Alice"
achievements = ["Won chess tournament", "Completed marathon", "Published a book"]

Что должно получиться: Alice: Won chess tournament, Completed marathon, Published a book

Подсказка: используйте Optional[list[str]] или list[str] | None для необязательного параметра.

Задание 4. Обработка элементов функцией (★ продвинутое)

Условие: напишите функцию, которая принимает другую функцию и список произвольных элементов. Примените переданную функцию ко всем элементам списка и верните новый список. Добавьте документацию и аннотации типов.

Данные: numbers = [1, 2, 3, 4, 5]

Что должно получиться: [2, 4, 6, 8, 10] при использовании функции lambda x: x * 2.

Подсказка: используйте Callable[[Any], Any] из модуля typing.

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

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

Вопрос 1

Почему f-string часто удобнее конкатенации?

Вопрос 2

Какой метод убирает пробелы по краям строки?

Вопрос 3

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

Вопрос 4

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

Вопрос 5

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

Вопрос 6

Что делает аннотация типа в Python?

Вопрос 7

Как лучше обрабатывать ожидаемую ошибку преобразования?