Всем, кто имеет отношение к ЕГЭ по информатике знают, что 27 задача на экзамене - одна из наиболее сложных. Не проста она и с точки зрения преподавания. В этой задаче аккумулируются все предыдущие знания и навыки, теоретическая часть информатики и практика программирования.
И уже свершившийся факт - КЕГЭ - предоставил обучающимся возможность спокойно решать эту (и не только) задачу уже за компьютером, проверяя свои тезисы на практике. Благодаря КЕГЭ, в некотором контексте, сдача информатики стала намного проще.
Чем же примечательна эта задача? Мы ее сейчас не будем решать. Но предлагаю просто посмотреть, на какие ключевые моменты можно разделить решение в целом. И чтение данных из внешнего файла занимает тут довольно важное место.
В качестве примера для проб можно использовать файлы из заданий 27 ЕГЭ по информатике на сайте К. Полякова - https://kpolyakov.spb.ru/school/ege/gen.php?action=viewAllEgeNo&egeId=27&cat161=on
Приведенный пример создает файловый объект, который связывается с внешним файлом, расположенным в той же папке, связь в режиме чтения ('r' - read). Метод close() закрывает открытый файл.
С файлами, в которых много данных, также уточню, с текстовыми файлами, очень удобно работать построчно. Берем из файла строку за строкой и обрабатываем их.
Когда взята строка целиком, то она берется "целиком" - в том числе с символом переноса строки в конце.
Работая с файлами из 27 задачи КЕГЭ по информатике будет удобно, а также целесообразно воспользоваться следующими методами строк:
- split()
- strip()
- find()
- rfind()
Пример кода выше демонстрирует способ считывания данных из нашего файла построчно (ну с учетом того обстоятельства, что пример выполняет только одну итерацию - break - не прогонять же в коде примера все 60 тыс. значений).
В некоторых задачах удобнее работать с данными в текстовом формате, а в некоторых, и в этом тоже, удобнее работать с числами.
Обратим внимание на переменную n - она принимает из файлового объекта fin данные только из одной строки - readline() - первой строки. Мы получили даже всю первую строку, а потом полученная строка преобразована в целое число - int().
Второй вариант - метод read(). Если можете его не использовать - лучше не использовать. Этот метод считывает весь файл целиком в файловый объект - если файл большой, то он весь окажется в оперативке.
Хотя у этого метода есть параметр, который определяет сколько знаков забираем из файла:
Есть еще один способ загнать все строки текстового файла в один контейнер - readlines() - этот метод создаст список из строк нашего файла.
Если текстовый файл относительно небольшой, то при решении учебных заданий это даже удобно: открыть файл, все данные считываем в список, закрываем файл. Далее просто работаем с данными в списке.
Будут комментарии - пишите!