Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2021, 15:03   #1
Jorsan
Пользователь
 
Регистрация: 14.03.2021
Сообщений: 39
Восклицание Код на вывод среднего балла по каждой группе

Здравствуйте, помогите пожалуйста , у меня есть код, который берёт текст из текстового файла выводит средний балл каждого ученика пиша его группу в другой текстовый файл.
Но мне нужно, чтобы код находил средний балл всех учеников по группе, если таковых несколько.
Test input:

Васильев;П1-20;4;4;5
Герасимов;П1-18;5;5;5
Лаухин;П1-20;3;4;5

Test output:

П1-20: 4.33
П1-18: 5.00
П1-20: 4.00

Собственно сам код:

Код:
groups = ["П1-18", "П2-18", "П1-19", "П2-19", "П3-19", "П1-20", "П2-20", "П3-20", "П1-21", "П2-21"]
lst = []
students = list()
with open('students.txt', 'r', encoding='utf-8') as f:
    for line in f:
        lst.append(line.strip().split('\n'))
        parts = line.split(';')
        group = parts[1]
        rating = list(map(int, parts[2:]))
        mean = sum(rating) / len(rating)

        info = list()
        info.append(group)
        info.extend(rating)
        info.append(mean)

        students.append(info)
f = open('sredball.txt', 'w+')
for st in students:
    print('{}: {:.2f}'.format(st[0], st[-1]))

print()
Вывод:
Код:
П1-20: 4.33
П1-18: 5.00
П1-20: 4.00
Ожидаемый вывод:
Код:
П1-18 5.0
П2-18 0.0
П1-19 0.0
П2-19 0.0
П3-19 0.0
П1-20: 4.2
П2-20 0.0
П3-20 0.0
П1-21 0.0
П2-21 0.0

Последний раз редактировалось Jorsan; 22.12.2021 в 15:11.
Jorsan вне форума Ответить с цитированием
Старый 27.12.2021, 19:51   #2
VeryStupidPerson
Пользователь
 
Аватар для VeryStupidPerson
 
Регистрация: 20.07.2020
Сообщений: 69
По умолчанию

Вот работающий код:
Код:
groups = []
marks = []

with open('students.txt, 'r') as f:
    for line in f:
        data = line.replace('\n', '').split(';')
        if not data[1] in groups:
            groups.append(data[1])
            marks.append([])
        for i in data[2::]:
            marks[groups.index(data[1])].append(int(i))

with open('rezult.txt', 'w') as f:
    for i in range(len(groups)):
       f.write(groups[i] + ' ' + str(round(sum(marks[i]) / len(marks[i]), 1)) + '\n')
Если нужно, могу прокомментировать, что в нём происходит.

П.С. В файл записываются только те группы, которые есть в входном файле, так что вывод состоит только из существующих групп.
---------------------------------------------------
Нич-чего не понимаю!
Или что-то случилось, или… одно из двух!

Последний раз редактировалось VeryStupidPerson; 27.12.2021 в 19:54.
VeryStupidPerson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод среднего балла каждого студента kukobch Паскаль, Turbo Pascal, PascalABC.NET 2 17.11.2016 19:19
Сортировка по убыванию среднего балла Alexander788 Помощь студентам 6 09.06.2014 00:50
Задача по паскалю - записи, информация об итогах зимней сессии в группе. Сортировка. вычисление среднего балла karacek Паскаль, Turbo Pascal, PascalABC.NET 0 16.05.2012 13:01
Pascal распечатать фамилии хорошистов и отличников, указать разницу их среднего балла и сред балла класса mrRastom Помощь студентам 4 30.03.2011 20:25
Хитрый подсчёт среднего балла Антон Олегович Microsoft Office Excel 6 06.08.2009 13:20