Как рассчитать оценки для каждой группы и вывести средний балл по каждой группе?
ЧТО НУЖНО ПОЛУЧИТЬ?
Как видно на прикреплённом рисунке. Есть группа и список студентов с оценками.Нужно ,чтобы под группой было их общее количество среднего баллов. То есть внизу списка под каждой группой Средний балл = 12,4(например)
ЧТО У МЕНЯ ЕСТЬ НА ДАННЫЙ МОМЕНТ?
Есть функция состоящая из двух частей:
def srtgr(self):
"""Номер группы в порядке убывания по успеваемости"""
countfour1=0
countfive1=0
counttri=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:
countfive1+=1
if student.markalgebra==5:
countfive1+=1
if student.markinformatika==5:
countfive1+=1
if student.markgeometry==3:
counttri+=1
if student.markalgebra==3:
counttri+=1
if student.markinformatika==3:
counttri+=1
sredball=((countfive1+countfour1+counttri)/3)
print("Средний бал = ", sredball)
Рабочий код подсчитывания оценок всех студентов(НЕ ПО ГРУППАМ)
Прошу не критиковать обильное количество if просто этот, мягко говоря, странный вариант, рабочий и считает количество оценок.
Дальше идёт вывод студентов по группе(то что видно на рисунке)
gl=dict()
sredballs=[]
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)
В ЧЁМ ПРОБЛЕМА?
Если я сделаю так:
То есть в цикл и в словарь начну добавлять формулу расчёта среднего балла,то будет ошибка что в словаре должно быть 2,а не 3 значения,не говоря уже о внутренних ошибках.
Как можно добавить формулу расчёт среднего балла и уже потом вывести её через словарь.
Т.е (Группа,средний балл) =>(Group,sredball).
Например (ВМО11,12.5)
Я решил создать отдельный словарь где будет группа и количество средних баллов.
Но я не могу понять,куда мне добавить в цикл добавления словаря, подсчёт оценок и формулу среднего балла. Примерный нерабочий набросок кода:
for s1 in studinfos:
sd1=srdbl.pop(s1.numbgroup,dict())
sd1[s1.numbgroup]=[s1.sredball]
srdbl[s1.numbgroup]=sd1
for namegroups,itms, in srdbl.items():
s1=f'Group: {namegroups}: \n'
for group,sredbals in itms.items():
s1+=f' {group}\t{sredbals[0]} \n'
print(s1)
Ответы (1 шт):
Я тут начеркал кое что, вот главный файл
from funck import fucnks
massGroup = [
dict(Иванов=[3, 4, 5], Петров=[5, 5, 5], Дубовская=[4, 4, 5]),
dict(Пеньков=[4, 5, 3], Деревко=[2, 5, 4], Осинова=[4, 3, 5]),
dict(Кузнецов=[4, 3, 2], Молотков=[3, 5, 3], Берёзин=[5, 5, 5], Клёнова=[3, 4, 5])
]
def averageCalculation(group):
keys = fucnks.getKeys(group) # получаем ключи из словаря
massForAssessment = [] # массив куда сохраняются оценки всех учеников
while True:
lenMass = len(keys) # получение длинны массива, для перебора
for i in range(lenMass):
name = str(keys[i]) # получаем ключ
getName = group[name] # достаём значение по ключу
lenMassForAssessment = len(getName)
for i in range(lenMassForAssessment):
massForAssessment.append(int(getName[i])) # добавляем в массив оценку
break
summa = fucnks.addingElementsInAnArray(massForAssessment) # получаем сумму оценок
mid = str(summa / len(massForAssessment)) # получаем среднее значение
print(mid[0:4]) # выводим
def main():
for i in range(len(massGroup)):
print(massGroup[i])
averageCalculation(massGroup[i])
main()
тут файл функций
class fucnks:
def addingElementsInAnArray(array):
lengArray = len(array)
summa = 0
for i in range(lengArray):
summa += array[i]
return summa
def getKeys(group):
return [i for i in group]
вот вывод:
{'Иванов': [3, 4, 5], 'Петров': [5, 5, 5], 'Дубовская': [4, 4, 5]}
> 4.44
{'Пеньков': [4, 5, 3], 'Деревко': [2, 5, 4], 'Осинова': [4, 3, 5]}
> 3.88
{'Кузнецов': [4, 3, 2], 'Молотков': [3, 5, 3], 'Берёзин': [5, 5, 5], 'Клёнова': [3, 4, 5]}
> 3.91
Задание я не совсем чётко понял, если есть замечание пишите в комментарии я перепишу код
