🏋️ Раздел тренировки
Выполните задания в отдельных файлах. Для каждой функции добавьте docstring и аннотации типов.
Задание 1. Инверсия словаря
Условие: создайте новый словарь, где значения исходного словаря становятся ключами, а ключи — значениями.
Данные: original_dict = {"a": 1, "b": 2, "c": 3}
Ожидаемый результат: {1: 'a', 2: 'b', 3: 'c'}
Задание 2. Из чисел в слова
Условие: замените числовые значения в словаре на их строковое представление по словарю сопоставлений.
Данные:
number_to_word = {1: "один", 2: "два", 3: "три"}
data = {"x": 1, "y": 2, "z": 3}
Ожидаемый результат: {'x': 'один', 'y': 'два', 'z': 'три'}
Задание 3. Факториал с проверкой
Условие: реализуйте factorial(n) с guard clause для отрицательных чисел и корректным базовым случаем.
Ожидаемый результат: factorial(5) == 120, factorial(0) == 1, factorial(-1) вызывает ValueError.
Задание 4. Бинарный поиск
Условие: напишите рекурсивную функцию binary_search(arr, target, left, right), которая возвращает индекс target или None.
Данные: array = [1, 3, 5, 7, 9, 11, 13]
Ожидаемый результат: поиск 5 → 2, 13 → 6, 8 → None.
Задание 5. Сумма цифр числа
Условие: напишите рекурсивную функцию sum_digits(n), которая возвращает сумму всех цифр числа.
Данные: num = 43197
Ожидаемый результат: 24
Задание 6. Сумма вложенных чисел
Условие: напишите рекурсивную функцию sum_nested(numbers), которая суммирует все числа во вложенных списках.
Данные: nested_numbers = [1, [2, 3], [4, [5, 6]], 7]
Ожидаемый результат: 28
Задание 7. Собственный аналог deepcopy
Условие: реализуйте функцию deep_copy(data), которая рекурсивно копирует списки, кортежи, множества и словари. Проверьте, что изменение копии не затрагивает оригинал.
Данные:
original_data = [
[1, 2, 3],
(4, [5, 6], {7, 8}),
{"a": 9, "b": [10, 11]},
"Hello",
[12, (13, 14)],
15.5,
5
]
Проверка: после original_data[1][1][0] = 0 вложенный элемент в копии должен остаться неизменным.
Задание 8. Объединение данных в строку (★ дополнительно)
Условие: напишите функцию join_data(data), которая принимает список любых данных и возвращает их строковое представление, объединённое через " | ". Добавьте docstring и аннотации типов.
Данные: data = [42, "hello", [1, 2, 3], {"a": 1, "b": 2}]
Ожидаемый результат: 42 | hello | [1, 2, 3] | {'a': 1, 'b': 2}