Файл в задаче — это входные данные программы. До выбора алгоритма нужно выяснить, что означает каждая строка: размер набора, одно число, пара значений или таблица. Если случайно обработать заголовок как обычное значение, даже правильный алгоритм даст неправильный ответ.
Разберём короткий пример, который можно проверить вручную. Он полезен для изучения Python; конкретный состав компьютерных заданий на ЕГЭ и ОГЭ различается, поэтому язык и формат работы выбирайте по условиям своего экзамена.
Условие и данные
В первой строке записано количество чисел. Далее каждое число расположено на отдельной строке. Нужно найти количество чисел, больших 10, и их сумму.
text5
7
12
10
18
3
Первая пятёрка означает, что дальше должно быть пять чисел. Подходят 12 и 18. Число 10 не подходит: «больше 10» означает строгое неравенство. Ручной ответ: количество 2, сумма 30.
Читаем данные без магии
Сохраните пример в файл data.txt рядом с программой. Встроенный редактор задания может предоставлять уже подготовленный файл; в таком случае используйте его имя из интерфейса.
Pythonwith open('data.txt', encoding='utf-8') as file:
expected_count = int(file.readline())
numbers = [int(line) for line in file]
assert len(numbers) == expected_count
count = 0
total = 0
for number in numbers:
if number > 10:
count += 1
total += number
print(count, total)
open открывает файл, а конструкция with закрывает его после чтения. readline() забирает только первую строку. int превращает текст числа в целое число: строка '12' и число 12 для программы не одно и то же.
Далее for line in file перебирает оставшиеся строки. Заголовок повторно туда не попадает. Выражение в квадратных скобках собирает числа в список. Проверка assert помогает заметить неполный файл или неверно прочитанный заголовок во время отладки.
Почему нужны две переменные
count отвечает на вопрос «сколько?», total — «какая сумма?». Когда найдено подходящее число, первое значение увеличивается на 1, второе — на само число.
| Число | Больше 10? | count после шага | total после шага |
|---|---|---|---|
| 7 | Нет | 0 | 0 |
| 12 | Да | 1 | 12 |
| 10 | Нет | 1 | 12 |
| 18 | Да | 2 | 30 |
| 3 | Нет | 2 | 30 |
Такая таблица называется ручной трассировкой: вы выполняете те же действия, что программа, и видите место возможной ошибки. Её достаточно составить на маленьком наборе, а не на тысяче строк.
Если в строке два числа
Строку 12 18 нельзя целиком передать в int: внутри два значения. Сначала разделите текст на части, затем преобразуйте каждую часть:
Pythonline = '12 18'
left, right = map(int, line.split())
print(left + right) # 30
split() без аргумента разделяет по пробельным символам. Если файл использует другой разделитель, например точку с запятой, нужно учитывать его явно. Сначала прочитайте описание формата, затем пишите код.
Проверьте границы условия
Замените набор на 10, 11 и −2. Для условия > 10 подходит только 11: ответ 1 11. Для условия >= 10 уже подходят 10 и 11: ответ 2 21. Один знак меняет результат, поэтому такой тест полезнее запуска только на случайных числах.
Если подходящих значений нет, счётчик и сумма останутся нулевыми. Если файл не найден, проверьте имя и папку запуска. Не меняйте алгоритм подсчёта, пытаясь исправить ошибку пути.
Следующий шаг
После уверенного чтения файла изучайте само условие: сортировку, пары, интервалы или другой нужный приём. Подготовка доступна в треках ЕГЭ по информатике и ОГЭ по информатике.
Синтаксис чтения файлов: официальное руководство Python. Учебные данные и алгоритм подсчёта в статье созданы Курсиком. Версия Python и доступные инструменты на экзамене могут отличаться от браузерного редактора; проверяйте требования и тренировочное окружение в своей школе.