Аннотации типов

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Аннотации типов в Python — это способ явно указать, какие типы данных ожидает функция на входе и что она возвращает. Они не влияют на выполнение программы (интерпретатор их игнорирует), но делают код понятнее для других разработчиков и позволяют использовать инструменты статического анализа вроде mypy. В этом тренажере ты научишься правильно записывать аннотации для параметров функций и возвращаемых значений, работать с базовыми и составными типами из модуля typing, а также понимать, что означают те или иные аннотации в чужом коде. Задания построены от простого к сложному: сначала базовый синтаксис, потом коллекции и специальные типы вроде Optional и Union.

Список тем

Базовый синтаксис аннотации параметра

id: 40045_task1

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

Заполните пропуски
def greet(name: input1S):
    print(f"Привет, {name}!")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Аннотация возвращаемого значения

id: 40045_task2

Функция вычисляет площадь прямоугольника. Заполните пропуски: укажите типы параметров и тип возвращаемого значения.

Заполните пропуски
def calculate_area(width: input1S, height: input2S) input3S float:
    return width * height
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Аннотации и реальное поведение

id: 40045_task3

Посмотрите на код с аннотациями типов. Что произойдёт при его выполнении?

Выберите правильный вариант ответа
def double(x: int) -> int:
    return x * 2

result = double("abc")
print(result)
Сообщения
Проверить
Показать подсказку

Сопоставьте типы и их назначение

id: 40045_task4

Соотнесите типы из модуля typing с их описанием. Перетащите элементы справа к соответствующим описаниям слева.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Список элементов одного типа
Словарь с типизированными ключами и значениями
Значение может быть указанного типа или None
Значение может быть одним из нескольких типов
Optional[str]
List[int]
Union[int, str]
Dict[str, int]
Сообщения
Проверить
Показать подсказку

Исправьте синтаксис аннотации

id: 40045_task5

В этом коде допущены ошибки в синтаксисе аннотаций типов. Найдите и исправьте строки с ошибками.

Найдите ошибку и исправьте
def process_data(items: list, count = int) => str:
    return str(items[:count])
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите функцию с аннотациями из модуля typing

id: 40045_task6

Функция принимает список целых чисел и возвращает словарь, где ключ — число, а значение — его квадрат. Используйте токены из банка для правильной аннотации.

Нужно правильно расставить в пропуски предложенные варианты
from typing import input1S, input2S

def squares(numbers: input3S) -> input4S:
    return {n: n ** 2 for n in numbers}
List
Dict
List[int]
Dict[int, int]
Tuple
int
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Классификация аннотаций типов

id: 40045_task7

Распределите аннотации по категориям: встроенные типы Python, типы из модуля typing и специальные значения.

Перетяните элементы в соответствующие блоки
Встроенные типы Python
Типы из модуля typing
Специальные значения
str
List[int]
None
dict
Optional[str]
int
Union[int, float]
bool
Сообщения
Проверить
Показать подсказку

Доступ к аннотациям через __annotations__

id: 40045_task8

В Python аннотации функции хранятся в специальном атрибуте. Что выведет этот код? Введите значение для ключа 'return'.

Что должно получиться?
def add(a: int, b: int) -> int:
    return a + b

annotations = add.__annotations__
print(annotations['return'].__name__)
Сообщения
Проверить
Показать подсказку

Optional — значение или None

id: 40045_task9

Функция ищет пользователя по ID и возвращает его имя, если найден, или None. Заполните аннотации, используя Optional.

Заполните пропуски
from typing import Optional

def find_user(user_id: input1S) -> input2S:
    users = {1: "Alice", 2: "Bob"}
    return users.get(user_id)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите функцию с Callable

id: 40045_task10

Соберите функцию, которая принимает другую функцию (callback) и число. Callback должен принимать int и возвращать int. Порядок: импорт, определение функции, тело функции.

Перетяните в правильном порядке строки из одного блока в другой
from typing import Callable
    return callback(value)
def apply(callback: Callable[[int], int], value: int) -> int:
from typing import List
def apply(callback: function, value: int) -> int:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Union для нескольких типов

id: 40045_task11

Функция может принимать число в разных форматах. Проанализируйте код и определите, что он выведет.

Выберите правильный вариант ответа
from typing import Union

def normalize(value: Union[int, str]) -> int:
    if isinstance(value, str):
        return int(value)
    return value

result = normalize("42") + normalize(8)
print(result)
Сообщения
Проверить
Показать подсказку

Исправьте аннотации для кортежа

id: 40045_task12

Функция возвращает координаты точки как кортеж из двух float. В аннотациях допущены ошибки — исправьте их.

Найдите ошибку и исправьте
from typing import Tuple
 
def get_point(x: float, y: float) -> tuple(float, float):
    return (x, y)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Порядок определения типизированной функции

id: 40045_task13

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

Расставьте строки в правильном порядке
def process_names(names: List[str]) -> List[str]:
from typing import List
    """Преобразует имена в верхний регистр."""
    return [name.upper() for name in names]
Сообщения
Проверить
Показать подсказку

Современный синтаксис Python 3.10+

id: 40045_task14

Начиная с Python 3.10 можно использовать упрощённый синтаксис для Union. Заполните пропуски, используя новый синтаксис с оператором |.

Заполните пропуски
# Python 3.10+ синтаксис (без импорта typing!)

def parse_input(value: input1S) -> int:
    """Парсит строку или число в целое число."""
    if isinstance(value, str):
        return int(value)
    return value

def find_item(items: list, key: str) -> input2S:
    """Возвращает элемент или None, если не найден."""
    return items.get(key)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Соберите класс с аннотированными атрибутами

id: 40045_task15

Соберите класс User с аннотациями типов для атрибутов. Используйте dataclass для автоматической генерации __init__. Порядок: импорты, декоратор, определение класса, атрибуты.

Перетяните в правильном порядке строки из одного блока в другой
from dataclasses import dataclass
@dataclass
from typing import Optional
    name: str
    email: Optional[str] = None
class User:
from typing import Union
    name = str
@dataclasses
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру