Из данных файла выяснить кто сколько набрал баллов и напечатать. Выяснить кто набрал макс. балл и мин. балл.
Важная;5;4;5;4
Веселая;5;5;5;5
Вредная;3;3;5;5
Грустный;4;5;5;5
Иванов;5;4;4;5
Иванович;5;5;5;5
Наглецов;3;3;5;5
Неуверенный;5;4;5;4
Петров;4;4;3;5
Сидоров;5;3;5;4
Счастливый;5;5;4;5
Удачливый;5;3;5;4
Проходной балл;18;;;
Python
Выяснить кто сколько набрал баллов и напечатать в файле csv пример: Важная;5;4;5;4 и посчитать сколько у нее баллов
Ну, читаем, разбиваем по точке с запятой и суммируем от 2-го элемента и далее. Затем ищем максимальное и минимальное по этому показателю. Файл как должен называться? Ну, допустим, scores.csv:
Обрабатываем весь файл за один проход, с константными требованиями по памяти (не зависящими от длины файла).
Строим итератор записей, разбитых по полям.
На его основе строим итератор пар (суммарная оценка, имя), первой идёт оценка, чтобы удобнее было искать экстремумы.
На основе предыдущего итератора строим итератор с побочным эффектом, подсчитывающий максимум и минимум оценок.
Затем выводим полный список кандидатов с оценками. После этого файл полностью прочитан, поэтому закрываем файл, и тогда уже выводим отдельно максимум и минимум оценок.
Если нужно отфильтровать строку "Проходной балл", то это можно сделать в любом из итераторов. Например, во втором, куда строки подаются уже разбитые по полям:
from itertools import chain
def fmt(t): s, n = t; return f"{n}: {s}"
with open("scores.csv", "r") as f:
fields = (s.split(';') for s in f)
scores = ((sum(int(m) for m in marks if m), name) for name, *marks in fields)
mn = mx = next(scores)
final = chain([mn], ((mn := min(mn, s), mx := max(mx, s), s)[-1] for s in scores))
print("Все результаты:", *map(fmt, final), sep = '\n')
print("Максимум и минимум:", *(fmt(mx), fmt(mn)), sep = '\n')
Обрабатываем весь файл за один проход, с константными требованиями по памяти (не зависящими от длины файла).
Строим итератор записей, разбитых по полям.
На его основе строим итератор пар (суммарная оценка, имя), первой идёт оценка, чтобы удобнее было искать экстремумы.
На основе предыдущего итератора строим итератор с побочным эффектом, подсчитывающий максимум и минимум оценок.
Затем выводим полный список кандидатов с оценками. После этого файл полностью прочитан, поэтому закрываем файл, и тогда уже выводим отдельно максимум и минимум оценок.
Если нужно отфильтровать строку "Проходной балл", то это можно сделать в любом из итераторов. Например, во втором, куда строки подаются уже разбитые по полям:
scores = ((sum(int(m) for m in marks if m), name) for name, *marks in fields if name != "Проходной балл")
Похожие вопросы
- Скажите пожалуйста, сколько правда может заработать программист на языке piton со стажем 5 лет?
- CSV парсинг в python
- Как преобразовать png в csv
- Выяснить, сколько точек пересечения имеют прямая
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Задача: Посчитать и вычислить значение функции у=50/(х²-4) на отрезке от -4 до -7 с шагом -1
- Как подключить файл к другому файлу в питоне
- Как объединить 6000 txt файлов в один и выгрузить с него ссылки?
- Задача для Python. Работа с массивом чисел в файле.
- Нужно из двух .txt файлов выделить в два .txt файла повторы и уникальные