project_python.after.2.5/lesson.2.py

106 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

''' ****** Задание 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("Во введённых данных ошибка")