Сделал 3 задание
This commit is contained in:
parent
60711c6c9f
commit
06a607df4a
180
lesson.3.py
Normal file
180
lesson.3.py
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
''' ****** Задание 3 из 3 *********
|
||||
* Что нужно сделать
|
||||
Вывести общие показатели учеников программы: максимальное, среднее и минимальное значение рейтинга в процентах от максимально возможного.
|
||||
Округлить результаты до целого значения с помощью функции round().
|
||||
Вывести лучших учеников: топ-3 лидера по рейтингу, их фамилии в порядке убывания рейтинга и заработанный процент от максимального количества баллов. Если у студентов равный рейтинг (в абсолютном значении), то они идут в порядке их ввода — кто первый указан, тот выше по рейтингу и находится. Фамилии учеников уникальны.
|
||||
На основе данных сделать предварительный вывод, насколько усваивается курс:
|
||||
Если среднее значение рейтинга <= 50 — курс усваивается плохо.
|
||||
Если среднее значение рейтинга > 50 — курс усваивается хорошо.
|
||||
Также нужно проверить правильность введённых данных и расчётов. Если есть ошибки, выводим строку «Во введённых данных ошибка»
|
||||
|
||||
|
||||
Формат ввода
|
||||
Одна строчка, в которой через пробел подаются следующие данные:
|
||||
|
||||
|
||||
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) — коэффициент для контрольной работы
|
||||
|
||||
Далее идут фамилии учеников (N) и несколько строчек (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.
|
||||
Построчно фамилию и имя трёх лидеров рейтинга
|
||||
Предварительный вывод «как усваивается курс» (хорошо или плохо).
|
||||
|
||||
Max Average Min (максимальный, средний и минимальный рейтинг учеников программы)
|
||||
Фамилия_1 Rating_1% (top-1)
|
||||
Фамилия_2 Rating_2% (top-2)
|
||||
Фамилия_3 Rating_3% (top-3)
|
||||
Курс усваивается хорошо/плохо
|
||||
|
||||
Также сделайте проверку на верность вводных данных. Если условие не выполняется, то необходимо вывести строку «В введённых данных ошибка»
|
||||
|
||||
N >= 3 (количество учеников больше или равно 3)
|
||||
|
||||
M > 0 (количество проведённых занятий 1 и больше)
|
||||
|
||||
cw, sw, hm, tw > 0 (все активности учитываются в рейтинге)
|
||||
|
||||
Рассчитанный максимальный рейтинг ученика на программе не должен превышать Q.
|
||||
|
||||
|
||||
Если столкнётесь с нерешаемыми сложностями — обратитесь к подсказкам финальной задачи главы.
|
||||
|
||||
|
||||
|
||||
Комментарий к примеру 3. Почему Орлов выше Щербакова по рейтингу
|
||||
Пример 1
|
||||
Ввод
|
||||
|
||||
5 4 200 1 2 3 4
|
||||
Лебедев
|
||||
0,3,1,1
|
||||
3,3,0,0
|
||||
3,0,2,2
|
||||
3,1,3,2
|
||||
Жуков
|
||||
0,1,0,3
|
||||
1,0,0,1
|
||||
0,1,1,0
|
||||
2,1,2,3
|
||||
Белозёров
|
||||
3,2,0,0
|
||||
2,0,2,3
|
||||
3,2,0,0
|
||||
1,3,2,0
|
||||
Попов
|
||||
0,0,3,1
|
||||
2,0,0,0
|
||||
1,0,0,3
|
||||
0,2,0,0
|
||||
Медведев
|
||||
1,0,1,1
|
||||
3,2,1,0
|
||||
3,2,3,2
|
||||
2,1,3,0
|
||||
Вывод
|
||||
|
||||
30 24 16
|
||||
Лебедев 30%
|
||||
Медведев 28%
|
||||
Белозёров 24%
|
||||
Курс усваивается плохо
|
||||
'''
|
||||
|
||||
|
||||
if __name__ == "__main__"
|
||||
import sys
|
||||
|
||||
|
||||
def print_error():
|
||||
print("Во введённых данных ошибка")
|
||||
sys.exit()
|
||||
|
||||
|
||||
def main():
|
||||
data = sys.stdin.read().splitlines()
|
||||
if not data:
|
||||
print_error()
|
||||
try:
|
||||
head = data[0].strip().split()
|
||||
if len(head) != 7:
|
||||
print_error()
|
||||
N, M, Q, cw, sw, hw, tw = map(int, head)
|
||||
if N < 3 or M <= 0 or cw <= 0 or sw <= 0 or hw <= 0 or tw <= 0 or Q <= 0:
|
||||
print_error()
|
||||
lines = data[1:]
|
||||
expected_lines = N * (1 + M)
|
||||
if len(lines) < expected_lines:
|
||||
print_error()
|
||||
idx = 0
|
||||
students = []
|
||||
for order in range(N):
|
||||
if idx >= len(lines):
|
||||
print_error()
|
||||
surname = lines[idx].strip()
|
||||
if not surname:
|
||||
print_error()
|
||||
idx += 1
|
||||
total = 0
|
||||
for _ in range(M):
|
||||
if idx >= len(lines):
|
||||
print_error()
|
||||
row = lines[idx].replace(',', ' ').split()
|
||||
idx += 1
|
||||
if len(row) != 4:
|
||||
print_error()
|
||||
try:
|
||||
a, b, c, d = map(int, row)
|
||||
except Exception:
|
||||
print_error()
|
||||
total += a * cw + b * sw + c * hw + d * tw
|
||||
if total > Q:
|
||||
print_error()
|
||||
percent = (total / Q) * 100
|
||||
students.append((surname, percent, order))
|
||||
percentages = [s[1] for s in students]
|
||||
max_p = round(max(percentages))
|
||||
min_p = round(min(percentages))
|
||||
avg_p = round(sum(percentages) / len(percentages))
|
||||
students_sorted = sorted(students, key=lambda x: (-x[1], x[2]))
|
||||
print(f"{max_p} {avg_p} {min_p}")
|
||||
for i in range(3):
|
||||
print(f"{students_sorted[i][0]} {round(students_sorted[i][1])}%")
|
||||
if avg_p > 50:
|
||||
print("Курс усваивается хорошо")
|
||||
else:
|
||||
print("Курс усваивается плохо")
|
||||
except Exception:
|
||||
print_error()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in a new issue