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