Как вычислить средний балл студентов в Python
Пошаговое руководство по вычислению среднего балла студентов и фильтрации по успеваемости с использованием Python. Примеры кода и объяснения алгоритма.
Python: Как вычислить средний балл студентов и отфильтровать их по успеваемости?
Задание по программированию на Python: Поиск и фильтрация данных в словаре
Дан словарь students, где ключ — это имя студента, а значение — список его оценок (целые числа от 2 до 5):
students = {
"Анна": [4, 5, 5, 4],
"Иван": [3, 4, 3, 5, 2],
"Мария": [5, 5, 5, 4, 5],
"Петр": [2, 3, 2, 2, 3],
"Елена": [4, 4, 3, 5]
}
Напишите программу на Python, которая:
- Вычисляет и выводит средний балл для каждого студента
- Создает новый словарь, содержащий только студентов со средним баллом 4.0 и выше
- В новом словаре сохраняет средний балл каждого студента
Требуется решение с использованием словарей и списков, желательно с комментариями для понимания алгоритма.
Для решения задачи вычисления среднего балла студентов и их фильтрации по успеваемости в Python используем словари и списки с четкой структурой программы. Вот полное решение:
students = {
"Анна": [4, 5, 5, 4],
"Иван": [3, 4, 3, 5, 2],
"Мария": [5, 5, 5, 4, 5],
"Петр": [2, 3, 2, 2, 3],
"Елена": [4, 4, 3, 5]
}
# Вычисляем средний балл для каждого студента
student_averages = {}
for name, scores in students.items():
avg = sum(scores) / len(scores)
student_averages[name] = avg
# Выводим средние баллы с округлением до 2 знаков
print("Средние баллы студентов:")
for name, avg in student_averages.items():
print(f"{name}: {round(avg, 2)}")
# Фильтруем студентов со средним баллом >= 4.0
top_students = {}
for name, avg in student_averages.items():
if avg >= 4.0:
top_students[name] = round(avg, 2)
# Выводим результат фильтрации
print("\nСтуденты со средним баллом 4.0 и выше:")
for name, avg in top_students.items():
print(f"{name}: {avg}")
Результат выполнения программы:
Средние баллы студентов:
Анна: 4.5
Иван: 3.4
Мария: 4.8
Петр: 2.4
Елена: 4.0
Студенты со средним баллом 4.0 и выше:
Анна: 4.5
Мария: 4.8
Елена: 4.0
Содержание
- Алгоритм решения задачи
- Пошаговое объяснение кода
- Альтернативные методы вычисления среднего
- Фильтрация с использованием словарных включений
- Обработка граничных случаев
- Оптимизация производительности
- Источники
Алгоритм решения задачи
-
Вычисление среднего балла:
- Для каждого студента суммируем все оценки
- Делим сумму на количество оценок
- Результат сохраняем в отдельный словарь
-
Фильтрация студентов:
- Проверяем условие среднего балла ≥ 4.0
- Создаем новый словарь с отобранными студентами
- Сохраняем округленные значения средних баллов
-
Вывод результатов:
- Отображаем средние баллы всех студентов
- Выводим отфильтрованных студентов с их оценками
Пошаговое объяснение кода
1. Инициализация данных
students = {
"Анна": [4, 5, 5, 4],
"Иван": [3, 4, 3, 5, 2],
"Мария": [5, 5, 5, 4, 5],
"Петр": [2, 3, 2, 2, 3],
"Елена": [4, 4, 3, 5]
}
Исходные данные представлены в виде словаря, где ключи - имена студентов, а значения - списки оценок.
2. Вычисление средних баллов
student_averages = {}
for name, scores in students.items():
avg = sum(scores) / len(scores)
student_averages[name] = avg
- Создаем пустой словарь для хранения результатов
- Проходим по каждому студенту с помощью
items() - Вычисляем среднее арифметическое: сумма оценок деленная на их количество
- Сохраняем точное значение среднего балла в
student_averages
3. Форматированный вывод
print("Средние баллы студентов:")
for name, avg in student_averages.items():
print(f"{name}: {round(avg, 2)}")
- Используем
round(avg, 2)для округления до двух знаков после запятой - Форматируем вывод с помощью f-строк для читаемости
4. Фильтрация данных
top_students = {}
for name, avg in student_averages.items():
if avg >= 4.0:
top_students[name] = round(avg, 2)
- Проверяем условие среднего балла ≥ 4.0
- Сохраняем округленные значения в новый словарь
top_students - Это гарантирует, что в финальном выводе будут только студенты с высокой успеваемостью
Альтернативные методы вычисления среднего
Использование модуля statistics
import statistics
for name, scores in students.items():
avg = statistics.mean(scores)
student_averages[name] = avg
Модуль statistics предоставляет встроенную функцию mean() для вычисления среднего арифметического. Этот метод особенно полезен для больших наборов данных, так как он оптимизирован производительности.
Ручной подсчет с циклом
for name, scores in students.items():
total = 0
count = 0
for score in scores:
total += score
count += 1
avg = total / count
student_averages[name] = avg
Этот подход полезен для обучения принципам работы алгоритмов, хотя и менее эффективен в реальных проектах.
Фильтрация с использованием словарных включений
Более компактный способ реализации фильтрации:
top_students = {
name: round(avg, 2)
for name, avg in student_averages.items()
if avg >= 4.0
}
Словарное включение позволяет создать отфильтрованный словарь в одной строке, что делает код более лаконичным и читаемым.
Обработка граничных случаев
-
Пустые списки оценок:
pythonif not scores: avg = 0Добавляем проверку на пустые списки, чтобы избежать деления на ноль.
-
Некорректные значения оценок:
pythonvalid_scores = [score for score in scores if 2 <= score <= 5] avg = sum(valid_scores) / len(valid_scores) if valid_scores else 0Фильтруем оценки, оставляя только значения в диапазоне 2-5.
Оптимизация производительности
Для больших объемов данных:
- Используйте генераторы вместо списков
- Старайтесь минимизировать количество итераций
- Предварительно обрабатывайте данные для уменьшения вычислений
Пример оптимизированного решения:
student_averages = {
name: sum(scores) / len(scores)
for name, scores in students.items()
}
top_students = {
name: round(avg, 2)
for name, avg in student_averages.items()
if avg >= 4.0
}
Источники
- Python statistics.mean() Method - Официальная документация по модулю statistics
- Find average of a list in python - GeeksforGeeks, различные методы вычисления среднего
- Filter List of Python Dictionaries by Key in Python - Техники фильтрации словарей
- Python dict items() - Официальная документация по методу items()
- Finding the average of a list - Stack Overflow, практические примеры
Заключение
Решение задачи вычисления среднего балла и фильтрации студентов демонстрирует ключевые возможности Python для работы со структурами данных. Основные преимущества подхода:
- Гибкость: Легко адаптируется под любые объемы данных
- Читаемость: Четкая структура кода с комментариями
- Масштабируемость: Простота добавления новых функций
- Эффективность: Оптимальное использование встроенных функций Python
Использование словарных включений и методов модуля statistics позволяет создавать более лаконичный и эффективный код. Для реальных проектов рекомендуется добавлять обработку исключений и валидацию входных данных.