/
Carton
/
python-course-tasks
Обзор
Документация
Войти
/
Carton
/
python-course-tasks
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
task_08_02_09/main.py
142 строки
5 KB
Yuri Petrov
+ перенос заданий в отдельный репозиторий
02 июл 2020, 02:05
02 июл 2020, 02:05
5312992
Код
Авторство
О чём код?
# Программирование на языке высокого уровня (Python). # https://www.yuripetrov.ru/edu/python # Задание task_08_02_09. # # Выполнил: Фамилия И.О. # Группа: !!! # E-mail: !!! # Удалите комментарий и допишите код (модули) class NoSuchFieldError(Exception): def __init__(self, message): super().__init__(message) class IllegalArgumentError(ValueError): pass def load_players(filename): """Загрузить данные о хоккеистах из json-файла 'filename'. Параметры: - filename (str): имя файла. Результат: - list of dict. Для каждого хоккеиста в результат необходимо добавить ключи: - "год_рождения", содержащий год из поля "дата_рождения"; - "ИМТ", содержащий значение индекса массы тела (I = масса_в_кг / рост_в_м ** 2); - "ИМТ_категория", содержащий значение на основании ключа "ИМТ": "Выраженный дефицит массы тела" - 16 и менее; "Недостаточная масса тела" - 16—18,5; "Норма" - 18,5—24,99; "Избыточная масса тела" - 25—30; "Ожирение первой степени" - 30—35; "Ожирение второй степени" - 35—40; "Ожирение третьей степени" - 40 и более. Пример одного игрока с добавленными ключами: { "год":2016, "страна":"RUS", "номер":22, "фамилия":"Зайцев", "имя":"Никита", "амплуа":"Защитник", "рука":"Правая", "дата_рождения":"1991-10-29", "клуб":"ЦСКА", "возраст":24.5065023956194, "рост":189, "вес":89, "год_рождения": 1991, "ИМТ": 24.915315920606925, "ИМТ_категория": "Норма" } Функция не обрабатывает исключения.""" # 1. Загрузить файл # Удалите комментарий и допишите код # 2. Добавить ключи # Удалите комментарий и допишите код return players def group_by(players, field): """Вернуть данные, сгруппированные по полю 'field' (по значению). Параметры: - players (list of dict): структура данных формата 'load_players()'; - field (string): поле для группировки ("имя", "амплуа", "рука", "год_рождения", "клуб", "клуб_страна", "ИМТ_категория"). Результат: - dict. Формат (на примере поля "амплуа"): {"Защитник": 2, "Нападающий": 3, "Вратарь": 1} Исключения: - если поле 'field' отсутствует в структуре игрока, возбуждается исключения NoSuchFieldError с сообщением "Нет данных для игрока по полю '...'". """ res = {} # Удалите комментарий и допишите код return res def save_group_data(filename, group_data, headers): """Сохранить данные 'group_data' в csv-файл 'filename' с заголовками 'headers'. Параметры: - filename (str): имя файла; - group_data (dict): структура данных формата 'group_by()'; - headers (list): заголовки в csv-файле (2 значения). 'group_data' должен быть записан в файл по убыванию значений, но по возрастанию ключей при их равенстве: Имя,Количество Иван,5 Борис,3 Михаил,3 Кирилл,2 ... Исключения: - IllegalArgumentError: 'headers' не список или не содержит ровно 2 элемента. """ # Удалите комментарий и допишите код # Добавьте обработку исключений # filename = input("Введите имя файла: ") filename = "russia_wc_2016.json" # save_filename = input("Введите имя файла: ") save_filename = "output.csv" players = load_players(filename) # print(players) group_data = group_by(players, field="имя") # group_data = group_by(players, field="амплуа") # group_data = group_by(players, field="рука") # group_data = group_by(players, field="год_рождения") # group_data = group_by(players, field="клуб") # group_data = group_by(players, field="ИМТ_категория") save_group_data(save_filename, group_data, headers=["Имя", "Количество"])