Сделал 2 задание
This commit is contained in:
parent
b20446f866
commit
60711c6c9f
106
lesson.2.py
Normal file
106
lesson.2.py
Normal file
|
|
@ -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("Во введённых данных ошибка")
|
||||||
Loading…
Reference in a new issue