Перечислите фамилии и имена студентов в порядке убывания их среднего балла. Вводные данные: Сначала введите количество

  • 66
Перечислите фамилии и имена студентов в порядке убывания их среднего балла. Вводные данные: Сначала введите количество студентов n, затем n строк, каждая из которых содержит фамилию, имя и три числа (оценки по трем предметам: математика, физика, информатика). Данные в строке разделены одним пробелом. Оценки варьируются от 1 до 5. Выходные данные: Необходимо вывести пары фамилия-имя по одной на строке, разделяя фамилию и имя одним пробелом. Не нужно выводить оценки. Если у нескольких студентов есть одинаковые средние баллы, то они должны быть выведены в том порядке, в котором они указаны во входных данных. Пример ввода
Hrustal_7598
28
Хорошо, давайте решим эту задачу пошагово. Сначала вводим количество студентов n:

\[n = \text{{int}}(\text{{input}}())\]

Затем создаем список для хранения информации о студентах:

\[\text{{students}} = []\]

Теперь нужно ввести информацию о каждом из студентов. Цикл будет выполняться n раз:

\[
\text{{for }} i \text{{ in range}}(n):
\]

Внутри цикла считываем строку с фамилией, именем и оценками студента. Разделяем строку на части и преобразуем оценки в числа:

\[
\text{{data}} = \text{{input}}().\text{{split}}()
\]

Оценки нужно преобразовать в числовой тип данных:

\[
\text{{grades}} = \text{{list(map}}(\text{{int}}, \text{{data}}[2:]))
\]

Теперь считаем средний балл студента:

\[
\text{{average}} = \frac{{\text{{sum}}(\text{{grades}})}}{{3}}
\]

Добавляем информацию о студенте в список студентов:

\[
\text{{students}}.append((\text{{data}}[0], \text{{data}}[1], \text{{average}}))
\]

Теперь, когда мы собрали информацию о каждом студенте, нужно отсортировать список студентов по убыванию среднего балла. Для этого используем метод sort() и передаем ключом сортировки функцию, которая будет возвращать средний балл каждого студента:

\[
\text{{students}}.\text{{sort}}(\text{{key}} = \text{{lambda}} \text{{ x}}: \text{{x}}[2], \text{{reverse}} = \text{{True}})
\]

Теперь остается только вывести имена студентов:

\[
\text{{for }} \text{{student}} \text{{ in }} \text{{students}}:
\]

\[
\quad \text{{print}}(\text{{student}}[0], \text{{student}}[1])
\]

Давайте объединим все эти шаги в одну программу:

\begin{verbatim}
n = int(input())
students = []

for i in range(n):
data = input().split()
grades = list(map(int, data[2:]))
average = sum(grades) / 3
students.append((data[0], data[1], average))

students.sort(key = lambda x: x[2], reverse = True)

for student in students:
print(student[0], student[1])
\end{verbatim}

Эта программа введет количество студентов, а затем для каждого студента введет фамилию, имя и оценки. После этого программа отсортирует студентов по убыванию среднего балла и выведет имена студентов в нужном порядке.