Скрипт читает все файлы, переданные через флаг --files. (Исходные файлы задания были utf-8, поэтому в скрипте везде utf-8) Затем читает их построчно (после проверки на существование). Нулевая строка пропускается, т.к. "считаем что содержимое файлов всегда валидно" Формируется словарь по студентам с кортежем всех трат на кофе (Примерно так: {'Фамилия Имя': [x1, x2, ... xN]}) Затем по каждому студенты считается медиана и, вместе с 'Фамилия Имя' записыватся в 2х-мерный кортеж. Затем выводится итоговая таблица через tabulate и записывается в файл отчета, принятый через флаг -r.
При формировании словаря с тратами, значения трат преобразуются во float. Это сделано на случай вычисления медианы от четного кол-ва не круглых значений (Например: 99, 75, 32, 1 - здесь медиана вычисляеттся как (75+32)/2 = 53.5). Ну и на масштабирование (Вдруг надо будет посчитать траты на пирожки у бабы Мани, или на кофе в Беларуси.)
Пример запуска:
python3 coffee_analyzer.py -f math.csv physics.csv programming.csv -r median-coffee.csv ╒═══════════════════╤═════════════════╕ │ student │ median_coffee │ ╞═══════════════════╪═════════════════╡ │ Иван Кузнецов │ 700 │ ├───────────────────┼─────────────────┤ │ Дмитрий Морозов │ 610 │ ├───────────────────┼─────────────────┤ │ Михаил Павлов │ 590 │ ├───────────────────┼─────────────────┤ │ Никита Соловьев │ 560 │ ├───────────────────┼─────────────────┤ │ Алексей Смирнов │ 530 │ ├───────────────────┼─────────────────┤ │ Сергей Козлов │ 480 │ ├───────────────────┼─────────────────┤ │ Павел Новиков │ 450 │ ├───────────────────┼─────────────────┤ │ Артем Григорьев │ 420 │ ├───────────────────┼─────────────────┤ │ Елена Волкова │ 340 │ ├───────────────────┼─────────────────┤ │ Дарья Петрова │ 310 │ ├───────────────────┼─────────────────┤ │ Татьяна Васильева │ 270 │ ├───────────────────┼─────────────────┤ │ Анна Белова │ 210 │ ├───────────────────┼─────────────────┤ │ Ольга Новикова │ 200 │ ├───────────────────┼─────────────────┤ │ Виктория Федорова │ 150 │ ├───────────────────┼─────────────────┤ │ Мария Соколова │ 140 │ ╘═══════════════════╧═════════════════╛