Форум сайта python.su
Добрый день
Продолжаю постигать Python и возникла простая,на первый взгляд проблема.
Есть оценки по 3-ём дисциплинам(markgeometry,markalgebra,markinformatika)Мне надо посчитать количество 3,4,5 со всех объектов класса.
Проблемный участок кода ниже,всю программу не выкладываю,так как остальные блоки пока работают правильно.
Сразу напишу,что я тут предствавляю.
Цикл прохода по коллекции,входим в цикл. И начинаем с помощью условного оператора считать оценки.
То есть если по markgeometry стоит 3 или по markalgebra стоит 3 или по markinformatika стоит 3, то мы обновляем счётчик.
Аналогично и к другим оценкам. То есть условие в цикле проверяет каждый атрибут класса и если там есть указанная в условии оценка,то всё это добавляется в счётчик.
countfour1=0 countfive1=0 counttri=0 for student in studinfos: if (student.markgeometry==5) or (student.markalgebra==5) or (student.markinformatika==5): countfive1+=1 elif (student.markgeometry==4) or (student.markalgebra==4) or (student.markinformatika==4): countfour1+=1 elif (student.markgeometry==3) or (student.markalgebra==3) or (student.markinformatika==3): counttri+=1 print("Количество 5-рок = ", countfive1) print("Количество 4-рок = ", countfour1) print("Количество 3-ек = ", counttri)
Отредактировано Typical_beginer (Янв. 12, 2021 15:47:24)
Прикреплённый файлы:
scan111.jpg (30,3 KБ)
Офлайн
Две причины:
Первая - конструкции if-elif-else работают до первого вхождения. Если первый if сработал то все остальное не сработают. Это просто замена вложеных if-ов, чтоб не так глаза мозолили.
if: else: if: else: if: else:
elif (student.markgeometry==4) or (student.markalgebra==4) or (student.markinformatika==4): countfour1+=1
[code python][/code]
Отредактировано PEHDOM (Янв. 12, 2021 16:26:30)
Офлайн
Может так подойдет?
from collections import Counter class Tst: def __init__(self,m): self.m=m s =[Tst(i) for i in [5,5,5,3,5,2]] print(Counter(map(lambda x:x.m,s))) Counter({5: 4, 3: 1, 2: 1})
Офлайн