📋 Формулировка задания
Исходное задание из LMS:
-
Объединение данных в строку. Напишите функцию, которая принимает список любых данных (строки, числа, списки, словари) и возвращает их строковое представление, объединённое через " | ". Добавьте документацию и аннотации типов для всех параметров и возвращаемого значения.
data = [42, "hello", [1, 2, 3], {"a": 1, "b": 2}] # Пример вывода: # 42 | hello | [1, 2, 3] | {'a': 1, 'b': 2} -
Сумма вложенных чисел. Напишите функцию, которая принимает список словарей, где каждый словарь содержит имя пользователя и список баллов. Функция должна вернуть сумму всех чисел. Добавьте документацию и аннотации типов для всех параметров и возвращаемого значения.
data = [ {"name": "Alice", "scores": [10, 20, 30]}, {"name": "Bob", "scores": [5, 15, 25]}, {"name": "Charlie", "scores": [7, 17, 27]} ] # Пример вывода: # Итоговый балл: 156
🔧 Шаг 0. Подготовка окружения
Перед началом работы настройте рабочее окружение. Эти шаги одинаковы для большинства уроков курса.
Создайте рабочую папку
В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку для практических работ, например python-fundamentals-practice.
# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
Создайте папку для урока 44
mkdir lesson-44
cd lesson-44
Создайте виртуальное окружение (venv)
# Windows (PowerShell / CMD)
python -m venv venv
venv\Scripts\activate
# Mac / Linux
python3 -m venv venv
source venv/bin/activate
После активации в начале строки терминала появится (venv).
🛠️ Шаги выполнения задания
Задание 1. Объединение данных в строку
Создайте файл task1_join_data.py и реализуйте функцию join_data:
# task1_join_data.py
from typing import Any, List
def join_data(data: List[Any]) -> str:
"""
Объединяет элементы списка в строку через разделитель " | ".
:param data: Список элементов любых типов.
:return: Строковое представление элементов, объединённых через " | ".
"""
return " | ".join(str(item) for item in data)
if __name__ == "__main__":
data = [42, "hello", [1, 2, 3], {"a": 1, "b": 2}]
print(join_data(data))
Проверка в VS Code:
- Убедитесь, что venv активирован.
- Запустите:
python task1_join_data.py - Ожидаемый вывод:
42 | hello | [1, 2, 3] | {'a': 1, 'b': 2}
Задание 2. Сумма вложенных чисел
Создайте файл task2_sum_scores.py и реализуйте функцию sum_nested_scores:
# task2_sum_scores.py
from typing import List
def sum_nested_scores(data: List[dict[str, object]]) -> int:
"""
Считает сумму всех чисел из списка словарей с баллами.
:param data: Список словарей, где каждый словарь содержит
ключ "name" со строкой и ключ "scores" со списком чисел.
:return: Сумма всех чисел.
"""
total = 0
for record in data:
for score in record["scores"]:
total += score
return total
if __name__ == "__main__":
data = [
{"name": "Alice", "scores": [10, 20, 30]},
{"name": "Bob", "scores": [5, 15, 25]},
{"name": "Charlie", "scores": [7, 17, 27]}
]
print(f"Итоговый балл: {sum_nested_scores(data)}")
Проверка в VS Code:
- Убедитесь, что venv активирован.
- Запустите:
python task2_sum_scores.py - Ожидаемый вывод:
Итоговый балл: 156
✅ Полное решение
Ниже приведены оба решения в одном файле. Совет: попробуйте выполнить задания самостоятельно, прежде чем копировать готовый код.
# homework_44.py
from typing import Any, List
def join_data(data: List[Any]) -> str:
"""
Объединяет элементы списка в строку через разделитель " | ".
:param data: Список элементов любых типов.
:return: Строковое представление элементов, объединённых через " | ".
"""
return " | ".join(str(item) for item in data)
def sum_nested_scores(data: List[dict[str, object]]) -> int:
"""
Считает сумму всех чисел из списка словарей с баллами.
:param data: Список словарей с ключами "name" и "scores".
:return: Сумма всех чисел.
"""
total = 0
for record in data:
for score in record["scores"]:
total += score
return total
if __name__ == "__main__":
data1 = [42, "hello", [1, 2, 3], {"a": 1, "b": 2}]
print(join_data(data1))
data2 = [
{"name": "Alice", "scores": [10, 20, 30]},
{"name": "Bob", "scores": [5, 15, 25]},
{"name": "Charlie", "scores": [7, 17, 27]}
]
print(f"Итоговый балл: {sum_nested_scores(data2)}")
🧪 Как проверить решение
- Активируйте venv:
venv\Scripts\activate(Windows) илиsource venv/bin/activate(Mac/Linux). - Запустите файл:
python task1_join_data.pyиpython task2_sum_scores.py. - Проверьте, что вывод совпадает с примером из задания.
- Убедитесь, что в коде нет синтаксических ошибок:
python -m py_compile task1_join_data.py task2_sum_scores.py.
🐛 Отладка в VS Code
Если что-то не работает:
- Поставьте точку останова (breakpoint) кликом слева от номера строки.
- Нажмите F5 или выберите «Run → Start Debugging».
- Используйте панель Debug для просмотра переменных и стека вызовов.
- Проверьте Terminal на наличие traceback — Python укажет строку с ошибкой.
💾 Сохранение работы
# Добавьте файлы урока в Git
git add lesson-44/
git commit -m "lesson-44: домашнее задание по документации и аннотациям типов"
git push
💡 Советы и типичные ошибки
- Для списка любых типов используйте
List[Any]илиlist[Any]. - Не забывайте писать
return, если функция аннотирована как возвращающая значение. - Аннотации не проверяются во время выполнения — передавайте аргументы правильных типов.
- Для суммирования вложенных списков удобны вложенные циклы или функция
sum()с генератором.