С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
58 / 16 / 26
Регистрация: 07.02.2015
Сообщений: 346

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

18.01.2021, 15:47. Показов 1632. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день
Продолжаю постигать Python и возникла простая,на первый взгляд проблема.

Есть оценки по 3-ём дисциплинам(markgeometry,markalgebra,mar kinformatika)Мне надо посчитать количество 3,4,5 со всех объектов класса.

Проблемный участок кода ниже,всю программу не выкладываю,так как остальные блоки пока работают правильно.
Сразу напишу,что я тут предствавляю.
Цикл прохода по коллекции,входим в цикл. И начинаем с помощью условного оператора считать оценки.
То есть если по markgeometry стоит 3 или по markalgebra стоит 3 или по markinformatika стоит 3, то мы обновляем счётчик.
Аналогично и к другим оценкам. То есть условие в цикле проверяет каждый атрибут класса и если там есть указанная в условии оценка,то всё это добавляется в счётчик.

Python
1
2
3
4
5
6
7
8
9
10
11
12
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)

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

Также ставил точки остановки и смотрел по-шаговое выполнение. Он всё видит, но не считает.
Сам оператор инкримента стоит правильно,потому что я в другой функции считаю студентов и он выводит правильное количество.
Миниатюры
Проблема с подсчётом оценок через оператор if и elif  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.01.2021, 15:47
Ответы с готовыми решениями:

Не работает оператор if/elif
Задание: написать программу для решения нелинейного уравнения методом бисекции. Код: a = -100.0 b = 100.0 E = 0.001 check =...

Python 3.2 оператор if else elif
Ввожу пример из книги саммерфилда : x=int(input()) if x<100: print("medium") else: print("large") подчеркивает else как...

Создание переменных через условные операторы if, elif, else
Здравствуйте. Не могу понять причину, по которой внутри if можно создавать переменную и присваивать ей значение. А внутри elif и...

3
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
18.01.2021, 16:01
Цитата Сообщение от redseven Посмотреть сообщение
Сам оператор инкримента стоит правильно,потому что я в другой функции считаю студентов и он выводит правильное количество.
а? чего?

зачем вообще какие то условия, просто получи суммы всех оценок, типа
countfive = sum(1 for student in students if 5 in (student.markgeometry, student.markalgebra, student.markinformatika))

и т.п.

Твой вариант не работает ибо это должны быть отдельные условия а не один общий блок иф-елиф
0
58 / 16 / 26
Регистрация: 07.02.2015
Сообщений: 346
19.01.2021, 14:27  [ТС]
Welemir1,

То есть в моём случае должен быть на каждую оценку(каждый предмет) отдельный if и без elif?
Я вас правильно понял?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
19.01.2021, 16:04
Лучший ответ Сообщение было отмечено redseven как решение

Решение

redseven, ну вот например набросок

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> class Student:
...     def __init__(self,geom:int, alg:int, inform:int):
...         self.markgeometry=geom
...         self.markinformatika=inform
...         self.markalgebra=alg
...
>>> first = Student(3,4,5)
>>> second = Student(4,4,5)
>>> third = Student(2,3,4)
>>> results=dict(zip(range(2,6),(0,0,0,0)))
{2: 0, 3: 0, 4: 0, 5: 0}
>>> for student in (first, second, third):
...     for mark in (student.markgeometry, student.markalgebra, student.markinformatika):
...         results[mark]+=1
...
>>> results
{2: 1, 3: 2, 4: 4, 5: 2}
но это вот все суета сует и томление духа. У тебя неверно хранение организовано, надо просто словарь где ключ -название предмета, а значение -список оценок. А то представь если к твоим развесистым веткам условий надо еще пару тройку предметов добавить?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2021, 16:04
Помогаю со студенческими работами здесь

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->?
#include <iostream> using namespace std; class random { public: void Set(int b){a=b;} int Get(){return a;} private: ...

Проблема с подсчётом символов
Пыталась решить задачу на подсчёт символов в слове/предложении, но программа не хочет работать, выдаёт ошибку в строке 3204 (которой в коде...

Проблема с подсчетом строк в файле
День добрый, может кто подсказать, как решить? Нужно, посчитать слова в строках и в скобках выдать результат по каждой строке. Но я туплю...

Проблема с подсчётом итога по колонке
Здраствуйте! Я высчитываю итог по колонке: Итог("Сумма")#Ч17.2., Когда в колоке все числа положительные, всё работает ок. Но если есть...

Проблема с подсчетом высоты блока
Здравствуйте, Проблема с подсчетом высоты блока ext-inner, этот блок по идее должен считать 100% от высоты блока родителя, но что то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru