v1.0.0

Python с нуля для ЕГЭ · Обрабатываем строки и таблицы

Урок курсаPython 35 задачБесплатно

Обрабатываем строки и таблицы

Разберём путь табличной строки от разделения на поля до отбора и итогового вычисления.

Теория

Таблица — последовательность однотипных строк

В простом текстовом формате каждая строка описывает одну запись, а разделитель отделяет поля. После split получается список строковых значений; нужные столбцы выбирают по индексам и преобразуют.

Смысл индекса задаётся форматом файла. Если столбец балла третий, это должно быть известно до написания цикла, а не угадываться по конкретному примеру.

row = "Ира;15;5"fields = row.split(";")name = fields[0]age = int(fields[1])score = int(fields[2])

От строки к общему результату

Обработка таблицы повторяет один конвейер для каждой строки: разделить, преобразовать, проверить условие и обновить результат. Каждая операция имеет своё место и не должна применяться ко всей строке сразу.

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

Разберём на примере
Разберём строку Ира;15;5
Разделителем служит точка с запятой.
  1. split создаёт три поля с индексами 0, 1 и 2.
  2. Имя остаётся строкой, возраст и балл явно преобразуются в int.
  3. После преобразования балл можно сравнивать и складывать как число.
Проверьте себя
Почему фильтр лучше применять до обновления суммы или максимума?
Тогда неподходящие строки вообще не влияют на агрегат, и смысл каждой итерации остаётся ясным.

Разобранные строки становятся записями

Если к данным нужно вернуться после чтения, каждую строку можно превратить в словарь и добавить в список. После этого сортировка, поиск и фильтрация работают с понятными именами полей, а не с загадочными индексами.

records = []for row in rows:    name, age_text, score_text = row.split(";")    records.append({        "name": name,        "age": int(age_text),        "score": int(score_text),    }) best_first = sorted(records, key=lambda item: item["score"], reverse=True)

Разделитель является частью контракта

Если файл использует точку с запятой, разделение по запятой оставит всю строку одним полем. Ошибка индекса ниже лишь следствие неверно выбранного формата.

Как проверять табличную обработку

Начните с одной строки и подпишите поля. Затем добавьте строку, которая проходит фильтр, и строку, которая его не проходит. Только после этого считайте сумму, количество или максимум.

Как действовать
Проверяем конвейер
  1. Разделите одну строку. Сверьте число и порядок полей.
  2. Преобразуйте столбцы. Числовые сравнения выполняйте с числами.
  3. Примените фильтр. Неподходящая строка не должна менять результат.
  4. Обновите агрегат. Проверьте сумму, количество или лучший элемент вручную.

Практика

Разделите строку на поля

Строка "Ира;15;5" разделяется через .split(";"). Что находится в поле с индексом 1?

Подсказка
После разделения поля имеют индексы 0, 1 и 2.
Решение

Получается список `Ира`, `15`, `5`. Второе поле с индексом 1 содержит строку `15`.

Выберите нужный столбец

Строка "Москва,12,7" разделена по запятой. Какой индекс имеет значение 7?

Подсказка
Индексация полей начинается с нуля.
Решение

Поля имеют индексы: Москва — 0, 12 — 1, 7 — 2.

Оценки равны [5, 3, 4, 2]. Сколько значений удовлетворяют условию grade >= 4?

Подсказка
Подходят 5 и 4.
Решение

Две строки проходят фильтр: значения 5 и 4 не меньше 4.

Второй столбец трёх строк содержит числа 2, 3 и 4. Чему равна их сумма?

Подсказка
Складывайте только значения выбранного столбца.
Решение

Накопитель получает 2 + 3 + 4 = 9.

Найдите максимум в таблице

В локальном CSV второй столбец содержит 8, 12 и 5. Какое число выведет программа, выбирающая максимум этого столбца?

Подсказка
После преобразования сравниваются три целых числа.
Решение

Максимальное значение выбранного столбца — 12.

Итог

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

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

Прогресс

0 / 5
x

Вы ещё не решали задания