Как сделать сортировку студентов по среднему баллу?

Как написать функцию сортировки студентов по среднему баллу?

import random


class Student:

    def __init__(self, name, group, academic_performance):
        self.name = name
        self.group = group
        self.academic_performance = academic_performance

    def print_info(self):
        print("ФИ: {}\nГруппа: {}\nОценки: {}".format(
            self.name, self.group, self.academic_performance))
        print("-" * 30)


names = ['Гриша ', 'Петя', 'Федя', 'Олег', 'Максим', 'Артур', 'Миша', 'Вася']
surnames = ['Петров', 'Смирнов', 'Яковлев', 'Захаров', 'Фролов', 'Поляков', 'Крылов', 'Наумов']



def arithmetic_mean(students):
    for student in students:
        print(student.name)
        print(student.academic_performance)


def sorted_list(students):
   pass



def main():
    students = []
    for _ in range(10):
        students.append(Student(random.choice(names) + ' ' + random.choice(surnames), 
        random.randint(1, 8), [random.randint(2, 5) for _ in range(5)]))

    arithmetic_mean(students)
    sorted_list(students)


main()

Ответы (1 шт):

Автор решения: yspesny

Нужно воспользоваться функцией sorted(), которая принимает в себя итерируемый объект. Так же функция поддерживает дополнительные параметры. В данном случае нужен параметр key, на вход он ожидает функцию, с помощью которой должно быть выполнено сравнение.

import random

class Student:
    def __init__(self, name, group, academic_performance, gpa):
        self.name = name
        self.group = group
        self.academic_performance = academic_performance
        self.gpa = gpa

    def print_info(self):
        print("ФИ: {}\nГруппа: {}\nОценки: {}\nСредний бал: {}".format(
            self.name, self.group, self.academic_performance, self.gpa))
        print("-" * 30)

names = ['Гриша ', 'Петя', 'Федя', 'Олег', 'Максим', 'Артур', 'Миша', 'Вася']
surnames = [
    'Петров', 'Смирнов', 'Яковлев', 'Захаров', 'Фролов', 'Поляков', 'Крылов',
    'Наумов'
]

def arithmetic_mean(students):
    for student in students:
        student.print_info()


def gpa_key(student):
    return student.gpa

def sorted_list(students):
    return sorted(students, key = gpa_key)

def main():
    students = []
    for _ in range(10):
        students.append( Student (random.choice(names) + ' ' + random.choice(surnames), random.randint(1, 8),[random.randint(2, 5) for _ in range(5)], None))
    for student in students:
        student.gpa = sum(student.academic_performance) / len(student.academic_performance)

    students = sorted_list(students)
    arithmetic_mean(students)
    
main()
→ Ссылка