Программирование

Как вычислить средний балл студентов в Python

Пошаговое руководство по вычислению среднего балла студентов и фильтрации по успеваемости с использованием Python. Примеры кода и объяснения алгоритма.

Python: Как вычислить средний балл студентов и отфильтровать их по успеваемости?

Задание по программированию на Python: Поиск и фильтрация данных в словаре

Дан словарь students, где ключ — это имя студента, а значение — список его оценок (целые числа от 2 до 5):

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]
}

Напишите программу на Python, которая:

  1. Вычисляет и выводит средний балл для каждого студента
  2. Создает новый словарь, содержащий только студентов со средним баллом 4.0 и выше
  3. В новом словаре сохраняет средний балл каждого студента

Требуется решение с использованием словарей и списков, желательно с комментариями для понимания алгоритма.

Для решения задачи вычисления среднего балла студентов и их фильтрации по успеваемости в Python используем словари и списки с четкой структурой программы. Вот полное решение:

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

Содержание

Алгоритм решения задачи

  1. Вычисление среднего балла:

    • Для каждого студента суммируем все оценки
    • Делим сумму на количество оценок
    • Результат сохраняем в отдельный словарь
  2. Фильтрация студентов:

    • Проверяем условие среднего балла ≥ 4.0
    • Создаем новый словарь с отобранными студентами
    • Сохраняем округленные значения средних баллов
  3. Вывод результатов:

    • Отображаем средние баллы всех студентов
    • Выводим отфильтрованных студентов с их оценками

Пошаговое объяснение кода

1. Инициализация данных

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]
}

Исходные данные представлены в виде словаря, где ключи - имена студентов, а значения - списки оценок.

2. Вычисление средних баллов

python
student_averages = {}
for name, scores in students.items():
    avg = sum(scores) / len(scores)
    student_averages[name] = avg
  • Создаем пустой словарь для хранения результатов
  • Проходим по каждому студенту с помощью items()
  • Вычисляем среднее арифметическое: сумма оценок деленная на их количество
  • Сохраняем точное значение среднего балла в student_averages

3. Форматированный вывод

python
print("Средние баллы студентов:")
for name, avg in student_averages.items():
    print(f"{name}: {round(avg, 2)}")
  • Используем round(avg, 2) для округления до двух знаков после запятой
  • Форматируем вывод с помощью f-строк для читаемости

4. Фильтрация данных

python
top_students = {}
for name, avg in student_averages.items():
    if avg >= 4.0:
        top_students[name] = round(avg, 2)
  • Проверяем условие среднего балла ≥ 4.0
  • Сохраняем округленные значения в новый словарь top_students
  • Это гарантирует, что в финальном выводе будут только студенты с высокой успеваемостью

Альтернативные методы вычисления среднего

Использование модуля statistics

python
import statistics

for name, scores in students.items():
    avg = statistics.mean(scores)
    student_averages[name] = avg

Модуль statistics предоставляет встроенную функцию mean() для вычисления среднего арифметического. Этот метод особенно полезен для больших наборов данных, так как он оптимизирован производительности.

Ручной подсчет с циклом

python
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

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

Фильтрация с использованием словарных включений

Более компактный способ реализации фильтрации:

python
top_students = {
    name: round(avg, 2) 
    for name, avg in student_averages.items() 
    if avg >= 4.0
}

Словарное включение позволяет создать отфильтрованный словарь в одной строке, что делает код более лаконичным и читаемым.

Обработка граничных случаев

  1. Пустые списки оценок:

    python
    if not scores:
        avg = 0
    

    Добавляем проверку на пустые списки, чтобы избежать деления на ноль.

  2. Некорректные значения оценок:

    python
    valid_scores = [score for score in scores if 2 <= score <= 5]
    avg = sum(valid_scores) / len(valid_scores) if valid_scores else 0
    

    Фильтруем оценки, оставляя только значения в диапазоне 2-5.

Оптимизация производительности

Для больших объемов данных:

  1. Используйте генераторы вместо списков
  2. Старайтесь минимизировать количество итераций
  3. Предварительно обрабатывайте данные для уменьшения вычислений

Пример оптимизированного решения:

python
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
}

Источники

  1. Python statistics.mean() Method - Официальная документация по модулю statistics
  2. Find average of a list in python - GeeksforGeeks, различные методы вычисления среднего
  3. Filter List of Python Dictionaries by Key in Python - Техники фильтрации словарей
  4. Python dict items() - Официальная документация по методу items()
  5. Finding the average of a list - Stack Overflow, практические примеры

Заключение

Решение задачи вычисления среднего балла и фильтрации студентов демонстрирует ключевые возможности Python для работы со структурами данных. Основные преимущества подхода:

  • Гибкость: Легко адаптируется под любые объемы данных
  • Читаемость: Четкая структура кода с комментариями
  • Масштабируемость: Простота добавления новых функций
  • Эффективность: Оптимальное использование встроенных функций Python

Использование словарных включений и методов модуля statistics позволяет создавать более лаконичный и эффективный код. Для реальных проектов рекомендуется добавлять обработку исключений и валидацию входных данных.

Авторы
Проверено модерацией
Модерация