diff --git a/lesson.2.py b/lesson.2.py new file mode 100644 index 0000000..d708406 --- /dev/null +++ b/lesson.2.py @@ -0,0 +1,106 @@ +''' ****** Задание 2 из 3 ********* +* Что нужно сделать +Ваша задача — проанализировать вовлечённость ученика и вычислить его рейтинг. А если входные данные окажутся неверными — указать это. + +Формат ввода +Одна строчка, в которой через пробел подаются следующие данные: + + +N M Q cw sw hw tw +N (num_students) — число учеников на курсе +M (num_lessons) — количество занятий в курсе +Q (max_rating) — максимальный рейтинг +cw (classwork_coefficient) — коэффициент для активности на занятии +sw (selfwork_coefficient) — коэффициент для практики +hw (homework_coefficient) — коэффициент для домашней работы +tw (testwork_coefficient) — коэффициент для контрольной работы + +Далее идёт фамилия ученика и несколько строчек (M) с оценками ученика на занятиях в формате: + + +Иванов +a₁,b₁,c₁,d₁ +a₂,b₂,c₂,d₂ +a₃,b₃,c₃,d₃ +⋮ +aₘ,bₘ,cₘ,dₘ +Где aᵢ,bᵢ,cᵢ,dᵢ — это оценки за i-ое занятие: + +aᵢ (classwork_grade) — оценка за активность на занятии +bᵢ (selfwork_grade) — оценка за практику на занятии +cᵢ (homework_grade) — оценка за домашнюю работу на занятии +dᵢ (testwork_grade) — оценка за контрольную работу на занятии + +Если не было активности, ученик отсутствовал либо не проявил себя на занятии — значение за активность будет 0. + +Формат вывода +Фамилия и процент от максимального рейтинга, округленный до целого числа с помощью функции round(). Через пробел. + + +Иванов x% +Также сделайте проверку на верность вводных данных. Если условие не выполняется, то необходимо вывести строку «Во введённых данных ошибка» + +M > 0 (количество проведённых занятий равно 1 и больше) +cw, sw, hm, tw > 0 (все активности учитываются в рейтинге) +Рассчитанный максимальный рейтинг ученика на программе не должен превышать Q. + +Во введённых данных ошибка + + +Формула для расчёта рейтинга +Про работу функции round() подробнее можете почитать в подсказках. + + +Пример 1 +Ввод + +4 5 190 1 2 4 6 +Сергеев +0,0,2,0 +3,3,2,2 +3,1,3,1 +3,0,1,2 +0,3,3,1 +Вывод + +Сергеев 54% +''' + + +if __name__ == "__main__" + import sys + + data = sys.stdin.read().splitlines() + if not data: + print("Во введённых данных ошибка") + sys.exit() + + try: + header = list(map(int, data[0].split())) + N, M, Q, cw, sw, hw, tw = header + if M <= 0 or cw <= 0 or sw <= 0 or hw <= 0 or tw <= 0: + print("Во введённых данных ошибка") + sys.exit() + + surname = data[1] + grades = [] + for line in data[2:2 + M]: + row = list(map(int, line.split(','))) + if len(row) != 4: + print("Во введённых данных ошибка") + sys.exit() + grades.append(row) + + total = 0 + for a, b, c, d in grades: + total += a * cw + b * sw + c * hw + d * tw + + if total > Q: + print("Во введённых данных ошибка") + sys.exit() + + percent = round((total / Q) * 100) + print(f"{surname} {percent}%") + + except (ValueError, IndexError): + print("Во введённых данных ошибка") \ No newline at end of file