Сортировка по среднему заначению
Суть задачи состоит в том, что на вход мы получаем Фамилии учеников с их оценками по трем предметам.
Программа должна вывести Фамилии учеников с их оценками, в порядке убывания их среднего балла, и если балл одинаковый, то вывести фамилии по алфавиту.
Ввод:
4 (кол-во учеников)
Ivanov 5 10 3
Pupkin 7 8 12
Petrov 10 10 7
Sidorov 3 4 2
Вывод:
Petrov 10 10 7 9.00
Pupkin 7 8 12 9.00
Ivanov 5 10 3 6.00
Sidorov 3 4 2 3.00
Мой вариант кода:`
class Student:
def __init__(self, stud):
self.__stud = stud
def data_sorter(self):
list_data = list(self.__stud.items())
list_data.sort(key=lambda elem: elem[1])
list_data = list_data[::-1]
return list_data
def key_sorter(self):
list_keys = list(self.__stud.keys())
list_keys.sort()
return list_keys
def getSortedData(self):
for key in Student.key_sorter(self):
yield key
for i in range(-1, len(self.__stud[key]) - 1):
if i == -1:
for elem in self.__stud[key][i]:
yield elem
else:
yield self.__stud[key][i]
yield '\n'
N = int(input())
all_students = dict()
for _ in range(N):
student, *marks = input().split()
k = 0
for elem in marks:
k += int(elem)
all_students[student] = '%.2f' % (k / 3), marks
cls_student = Student(all_students)
print(' '.join([str(i) for i in cls_student.getSortedData()]))`
На выход получаю следующее:
Ivanov 5 10 3 6.00
Petrov 10 10 7 9.00
Pupkin 7 8 12 9.00
Sidorov 3 4 2 3.00
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Как-то у вас все сложно...
data = [
["Ivanov", 5, 10, 3],
["Pupkin", 7, 8, 12],
["Petrov", 10, 10, 7],
["Sidorov", 3, 4, 2],
]
res = sorted(data, key=lambda x: (-sum(x[1:]), x[0]))
результат:
In [46]: res
Out[46]:
[['Petrov', 10, 10, 7],
['Pupkin', 7, 8, 12],
['Ivanov', 5, 10, 3],
['Sidorov', 3, 4, 2]]