@The_Beginer

Как рассчитать оценки для каждой группы и вывести средний балл по каждой группе в словаре?

Доброго времени суток
Нужно рассчитать оценки всех студентов каждой группы и вывести средний балл по каждой группе.

ЧТО ЕСТЬ В НАЛИЧИИ?

Есть функции подсчёта троек,четвёрок,пятёрок и среднего балла(Раньше это было всё в одной функции,но потом сказали,что некрасиво,разбивай на более мелкие).Они рабочие.

def counthrees(self):
          counttri=0
          for student in studinfos:
                 if student.markgeometry==3:
                      counttri+=1
                 if student.markalgebra==3:
                      counttri+=1
                 if student.markinformatika==3:
                      counttri+=1
          #print("Количество 3-ек = ", counttri)
          return counttri
 
     def countfours(self):
          countfour1=0
          for student in studinfos:
                 if student.markgeometry==4:
                      countfour1+=1
                 if student.markalgebra==4:
                      countfour1+=1
                 if student.markinformatika==4:
                      countfour1+=1
                 if student.markgeometry==5:
                      counttri+=1
          #print("Количество 4-рок = ", countfour1)
          return coountfour1
 
     def countfives(self):
          countfive1=0
          for student in studinfos:
                 if student.markgeometry==5:
                      countfive1+=1
                 if student.markalgebra==5:
                      countfive1+=1
                 if student.markinformatika==5:
                      countfive1+=1
          #print("Количество 5-рок = ", countfive1)
          return countfive1
 
     def midbal(self):
         return (counthrees()+countfours()+countfives())/3


Сама функция вывода вывода словаря с группами,студентами,оценками (но без подсчёта среднего балла успеваемости).Прикреплён результат работы программы.
def srtgr(self):
          """Номер группы в порядке убывания по успеваемости"""
          gl=dict()    #Словарь для распределения по группам          
          for s in studinfos:
               sd=gl.pop(s.numbgroup,dict())
               sd[s.surn]=[s.markgeometry,s.markalgebra,s.markinformatika]
               gl[s.numbgroup]=sd
          for k,v, in gl.items():                  
                    s=f'Group: {k}: \n'
                    for stdn,grds in v.items():                  
                         s+=f'  {stdn}\t{grds[0]},{grds[1]},{grds[2]} \n'
                    print(s)


601553b1077ec851631525.jpeg

ЧТО ТРЕБУЕТСЯ?

Как сделать так,чтобы внизу после списка студентов каждой группы выводился средний бал?
Или просто подсчитать в каждой группе средний балл и занести в уже другой словарь?

Со сортировкой значений в словаре я-то разобрался.

Я пытался сделать 2-ой словарь и занести туда группы,а потом уже высчитывать отдельным блоком оценки - не получилось.
Потом почитал,что в Python можно добавить словарь в словаре.
В итоге я попытался добавить существующий словарь в новый,но не понял как дальше действовать.
Потому что оценки высчитывать надо в любом случае

Никаких вспомогательных классов использовать нельзя,работа только с одним классом.
  • Вопрос задан
  • 1460 просмотров
Решения вопроса 1
@Wispik
Прямо в цикле можешь и средний бал считать:
for k,v, in gl.items():                  
    s=f'Group: {k}: \n'
    avg_score = 0
    for stdn,grds in v.items():                  
         s+=f'  {stdn}\t{grds[0]},{grds[1]},{grds[2]} \n'
         avg_score += grds[0] + grds[1]+ grds[2]
    s += f'avg_score: {round(avg_score / (len(v) * 3), 2)} \n'
    print(s)

но по хорошему я бы отдельную функцию сделал, которая принимает номер группы и считает средний бал
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы