Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2021 15:46:20

Typical_beginer
Зарегистрирован: 2020-12-29
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с подсчётом оценок через оператор if и elif

Добрый день
Продолжаю постигать 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)

Прикрепляю скриншот,и как вы видите там явно больше 3,4,5 при вводе и меньше после выполнения блока.
В одном случае у меня посчитало(И то неправильно, в другом показывает 0)Сразу напишу было и if вместо elif(но это ошибка), в условиях было вместо or -> and и убирал скобки из оператора ветвления.

Также ставил точки остановки и смотрел по-шаговое выполнение. Он всё видит, но не считает.
Сам оператор инкримента стоит правильно,потому что я в другой функции считаю студентов и он выводит правильное количество.

Отредактировано Typical_beginer (Янв. 12, 2021 15:47:24)

Прикреплённый файлы:
attachment scan111.jpg (30,3 KБ)

Офлайн

#2 Янв. 12, 2021 16:17:49

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проблема с подсчётом оценок через оператор if и elif

Две причины:
Первая - конструкции 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)

Офлайн

#3 Янв. 12, 2021 16:30:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Проблема с подсчётом оценок через оператор if и elif

Может так подойдет?

 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})



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version