Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Нужна помощь, задача по python

Blackabyss Ученик (107), открыт 7 часов назад
Помогите с задачей пжл, (я полный чайник), чет так и так пробую, все пишет, что ошибка (TypeError: unsupported operand type(s) for +: 'int' and 'list')
Затык именно в вычислении среднего балла:
mid_grades=sum(grades)/len(grades)

На вход даны следующие данные:
1.Список: grades = [[5, 3, 3, 5, 4], [2, 2, 2, 3], [4, 5, 5, 2], [4, 4, 3], [5, 5, 5, 4, 5]]
2.Множество: students = {'Johnny', 'Bilbo', 'Steve', 'Khendrik', 'Aaron'}
Список grades содержит списки оценок для каждого ученика в алфавитном порядке.
Например: 'Aaron' - [5, 3, 3, 5, 4]
Множество students содержит неупорядоченную последовательность имён всех учеников в классе.
Напишите программу, которая составляет словарь, используя grades и students, где ключом будет имя ученика, а значением - его средний балл.
3 ответа
Mark Ivanov Профи (992) 6 часов назад
Скорее всего len возвращается как str, попробуй отдельную переменую int создать и выводить их значения до операции деления...
Mark IvanovПрофи (992) 6 часов назад
Да и и использовать список в списке как по мне наркомания... Я бы использовал один... Ну или создал несколько отдельных друг от друга, а не использовал список в списке, т.к у меня от таких конструкций мозги ломаются пополам
Mark IvanovПрофи (992) 6 часов назад
Не я ошибся, возвращается len как int, скорее всего из-за "списка в списке ", попробуй один список использовать
Михаил Мигачев Ученик (116) 6 часов назад
# Данные
grades = [[5, 3, 3, 5, 4], [2, 2, 2, 3], [4, 5, 5, 2], [4, 4, 3], [5, 5, 5, 4, 5]]
students = {'Johnny', 'Bilbo', 'Steve', 'Khendrik', 'Aaron'}

# Приводим список студентов к упорядоченному списку
students_list = sorted(students)

# Создаем словарь для хранения средних баллов
average_grades = {}

# Расчет среднего балла для каждого студента
for student, grade_list in zip(students_list, grades):
average_grades[student] = sum(grade_list) / len(grade_list)

# Вывод результата
print(average_grades)
BlackabyssУченик (107) 6 часов назад
Большое спасибо!!
Юрий Семыкин Искусственный Интеллект (205545) 6 часов назад
У вас mid_grades=sum(grades)/len(grades) - это список списков, то есть суммируются списки, а не элементы списков.
И неверная идея со множеством фамилий, из множества они будут извлекаться в неизвестном порядке, то есть оценки отвяжутся от фамилий, список оценок не будет соответствовать фамилии.
 grades = [[5, 3, 3, 5, 4], [2, 2, 2, 3], [4, 5, 5, 2], [4, 4, 3], [5, 5, 5, 4, 5]]  
for i in grades:
mid_grades=sum(i)/len(i)
print(mid_grades)
BlackabyssУченик (107) 6 часов назад
Спасибо!! Еще плохо шарю(((
Похожие вопросы