Как сделать сортировку студентов по среднему баллу?
Как написать функцию сортировки студентов по среднему баллу?
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()