Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №1996872
А
Аноним
24 октября 2024 06:15 · публичный вопрос
А
Аноним

В файле marks.csv записаны сведения о результатах экзаменов в 9-х классах района. Всего в списке 1000 записей, каждая из которых содержит • фамилию • имя • отметки по четырем предметам (алгебре, русскому языку, физике и истории). Все элементы в каждой строке разделены запятыми. Напишите программу, которая читает данные из файла в массив структур (записей) и выводит на экран (или в файл): а) средний балл в районе по каждому предмету; б) максимальную сумму баллов, полученных учащимися; в) список учащихся (фамилии и имена), набравших эту максимальную сумму, в алфавитном порядке; г) количество учащихся, получивших хотя бы одну отметку «2».

Нейросеть24 октября 2024 06:15

Для решения вашей задачи необходимо выполнить следующие шаги:

  1. Прочитать данные из файла marks.csv.
  2. Разобрать строки и создать массив структур для хранения информации о каждом учащемся.
  3. Вычислить средний балл по каждому предмету.
  4. Найти максимальную сумму баллов и список учащихся с этой суммой.
  5. Подсчитать количество учащихся, получивших хотя бы одну отметку "2".

Давайте реализуем это на языке Python. Вот пример кода, который выполняет все описанные задачи:

import csv

# Определяем структуру для хранения информации об учениках
class Student:
    def __init__(self, last_name, first_name, algebra, russian, physics, history):
        self.last_name = last_name
        self.first_name = first_name
        self.scores = [algebra, russian, physics, history]

    def total_score(self):
        return sum(self.scores)

# Чтение данных из файла
students = []
with open('marks.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        last_name = row[0]
        first_name = row[1]
        scores = list(map(int, row[2:]))  # Преобразуем отметки в целые числа
        student = Student(last_name, first_name, *scores)
        students.append(student)

# a) Средний балл в районе по каждому предмету
total_scores = [0] * 4
for student in students:
    total_scores = [total + score for total, score in zip(total_scores, student.scores)]

average_scores = [total / len(students) for total in total_scores]
print(f"Средний балл по каждому предмету: Алгебра: {average_scores[0]}, Русский: {average_scores[1]}, Физика: {average_scores[2]}, История: {average_scores[3]}")

# b) Максимальная сумма баллов
max_score = max(student.total_score() for student in students)
print(f"Максимальная сумма баллов: {max_score}")

# c) Список учащихся с максимальной суммой баллов в алфавитном порядке
top_students = [f"{student.last_name} {student.first_name}" for student in students if student.total_score() == max_score]
top_students.sort()
print("Учащиеся с максимальной суммой баллов:")
for student in top_students:
    print(student)

# d) Количество учащихся, получивших хотя бы одну отметку «2»
count_with_failing = sum(1 for student in students if 2 in student.scores)
print(f"Количество учащихся с хотя бы одной отметкой '2': {count_with_failing}")

Объяснение кода:

  1. Импортируем библиотеку csv, которая позволяет удобно работать с CSV файлами.
  2. Создаем класс Student, чтобы удобно хранить информацию о каждом ученице: фамилия, имя и оценки по предметам.
  3. Читаем данные из файла и заполняем список students экземплярами класса Student.
  4. Вычисляем средние баллы по каждому предмету путем суммирования оценок и деления на количество студентов.
  5. Находим максимальную сумму баллов и создаем список студентов, у которых эта сумма равна максимальной, затем сортируем этот список.
  6. Считаем количество студентов с оценками "2" с помощью генераторного выражения.

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

Обсуждение

2 сообщения
А
Аноним

Выполни задание 1

Нейросеть21 октября 2026 03:23

Вот полное решение задания 1 на Python. Файл marks.csv нужно положить в ту же папку, что и программу.

import csv


class Student:
    def __init__(self, surname, name, algebra, russian, physics, history):
        self.surname = surname
        self.name = name
        self.marks = [algebra, russian, physics, history]

    @property
    def total(self):
        return sum(self.marks)


students = []

with open("marks.csv", encoding="utf-8-sig", newline="") as file:
    reader = csv.reader(file)

    for row in reader:
        if len(row) < 6:
            continue

        try:
            marks = list(map(int, row[2:6]))
        except ValueError:
            # пропускаем строку заголовка, если она есть
            continue

        students.append(
            Student(row[0].strip(), row[1].strip(), *marks)
        )

if not students:
    print("В файле нет данных")
else:
    n = len(students)
    subjects = ["Алгебра", "Русский язык", "Физика", "История"]

    # а) средний балл по каждому предмету
    sums = [0] * 4
    for student in students:
        for i in range(4):
            sums[i] += student.marks[i]

    print("а) Средний балл по предметам:")
    for subject, total in zip(subjects, sums):
        print(f"{subject}: {total / n:.2f}")

    # б) максимальная сумма баллов
    max_sum = max(student.total for student in students)
    print(f"\nб) Максимальная сумма баллов: {max_sum}")

    # в) учащиеся с максимальной суммой в алфавитном порядке
    best_students = sorted(
        (student for student in students if student.total == max_sum),
        key=lambda s: (s.surname.lower(), s.name.lower())
    )

    print("\nв) Учащиеся с максимальной суммой:")
    for student in best_students:
        print(student.surname, student.name)

    # г) количество учащихся хотя бы с одной отметкой «2»
    count_with_two = sum(
        1 for student in students if 2 in student.marks
    )

    print(f"\nг) Количество учащихся с хотя бы одной отметкой «2»: "
          f"{count_with_two}")

Если нужны конкретные числа по твоему marks.csv, прикрепи сам файл — программа посчитает их по данным.

В файле marks.csv записаны сведения о результатах экзаменов в 9-х классах района. Всего в списке 1000 записей, каждая из которых содержит • фамилию • имя • отметки по четырем предметам (алгебре, русскому языку, физике и истории). Все элементы в каждой строке разделены запятыми. Напишите программу, которая читает данные из файла в массив структур (записей) и выводит на экран (или в файл): а) средний балл в районе по каждому предмету; б) максимальную сумму баллов, полученных учащимися; в) список учащихся (фамилии и имена), набравших эту максимальную сумму, в алфавитном порядке; г) количество учащихся, получивших хотя бы одну отметку «2».
Для решения вашей задачи необходимо выполнить следующие шаги: 1. Прочитать данные из файла `marks.csv`. 2. Разобрать строки и создать массив структур для хранения информации о каждом учащемся. 3. Вычислить средний балл по каждому предмету. 4. Найти максимальную сумму баллов и список учащихся с этой суммой. 5. Подсчитать количество учащихся, получивших хотя бы одну отметку "2". Давайте реализуем это на языке Python. Вот пример кода, который выполняет все описанные задачи: ```python import csv # Определяем структуру для хранения информации об учениках class Student: def __init__(self, last_name, first_name, algebra, russian, physics, history): self.last_name = last_name self.first_name = first_name self.scores = [algebra, russian, physics, history] def total_score(self): return sum(self.scores) # Чтение данных из файла students = [] with open('marks.csv', mode='r', encoding='utf-8') as file: reader = csv.reader(file) for row in reader: last_name = row[0] first_name = row[1] scores = list(map(int, row[2:])) # Преобразуем отметки в целые числа student = Student(last_name, first_name, *scores) students.append(student) # a) Средний балл в районе по каждому предмету total_scores = [0] * 4 for student in students: total_scores = [total + score for total, score in zip(total_scores, student.scores)] average_scores = [total / len(students) for total in total_scores] print(f"Средний балл по каждому предмету: Алгебра: {average_scores[0]}, Русский: {average_scores[1]}, Физика: {average_scores[2]}, История: {average_scores[3]}") # b) Максимальная сумма баллов max_score = max(student.total_score() for student in students) print(f"Максимальная сумма баллов: {max_score}") # c) Список учащихся с максимальной суммой баллов в алфавитном порядке top_students = [f"{student.last_name} {student.first_name}" for student in students if student.total_score() == max_score] top_students.sort() print("Учащиеся с максимальной суммой баллов:") for student in top_students: print(student) # d) Количество учащихся, получивших хотя бы одну отметку «2» count_with_failing = sum(1 for student in students if 2 in student.scores) print(f"Количество учащихся с хотя бы одной отметкой '2': {count_with_failing}") ``` ### Объяснение кода: 1. **Импортируем библиотеку `csv`**, которая позволяет удобно работать с CSV файлами. 2. **Создаем класс `Student`**, чтобы удобно хранить информацию о каждом ученице: фамилия, имя и оценки по предметам. 3. **Читаем данные из файла** и заполняем список `students` экземплярами класса `Student`. 4. **Вычисляем средние баллы** по каждому предмету путем суммирования оценок и деления на количество студентов. 5. **Находим максимальную сумму баллов** и создаем список студентов, у которых эта сумма равна максимальной, затем сортируем этот список. 6. **Считаем количество студентов с оценками "2"** с помощью генераторного выражения. Это базовый пример программы, который можно дополнительно улучшить и настраивать под ваши конкретные требования. Удачи с вашим проектом!