Проверить программы онлайн · файлы остаются в браузере
10 класс, углублённый уровень. Занятие восьмое: программа читает числа не с клавиатуры, а из файла — как в задании 17 ЕГЭ.
Проверка.bat из общей папки: она запускает программу на девяти своих
файлах — маленьких с подвохом и больших, на тысячи чисел. Интернет не нужен.
Шесть типов задач, по одной на каждый. Под задачей — строки файла
data.txt сверху вниз, по одному числу в строке. Считать в уме или на
бумаге. Остаток от деления у отрицательных — по правилам Python:
-17 % 10 равно 3.
Файл открывается по имени, без пути, — тогда Python ищет его в папке программы.
Положи файл данных рядом с .py. Текстовый файл — это символы и переводы
строк, его можно открыть Блокнотом; двоичный (картинка, архив) — байты в своём
формате, и читают его по-другому.
Файловая переменная помнит место: после readline() цикл
for line in f продолжит со второй строки и пройдёт до конца файла.
Пар на одну меньше, чем чисел. Старт prev = 0 — ошибка: он создаёт
лишнюю пару (0; первое число), которой в файле нет.
Когда условие пары зависит от всего файла («сумма больше наибольшего числа на
7»), сначала первым проходом находят это число, потом второй проход считает пары.
После первого прохода файловая переменная стоит в конце: файл открывают заново —
f.close(), потом снова f = open("17.txt"). Списков мы не
знаем, и они не нужны.
-17 % 10 в Python равно 3.
Оканчивается на 7 — это abs(x) % 10 == 7.m = 0 врёт.
Начинай с числа меньше любого возможного (-10001) или с первого
подходящего.zadanie1.py, zadanie2.py, zadanie3.py.open("1.txt"). Оболочка
запускает программу в отдельной папке и кладёт туда свой файл.Программа читает числа из файла и печатает, сколько из них
оканчивается на цифру 7, и наибольшее из таких чисел. В файле есть хотя бы одно
такое число.
5 -17 27 3 -7
Количество: 3 Наибольшее: 27
Проверяется: чтение файла по строкам, последняя цифра отрицательного числа, старт наибольшего.
Счётчик и наибольшее
— до цикла. В цикле
превращаешь строку в число и проверяешь последнюю
цифру. Подошло — счётчик плюс один и сравнение с
.
Ловушки, ради которых это задание. Оболочка подаст файл, где все числа на
7 отрицательные: напечатает 0, которого в файле нет. И числа
вроде −17: условие
их пропустит, а −13 — наоборот,
засчитает (в Python −13 % 10 равно 7).
Пара — два числа, стоящие в файле друг за другом. Найди
количество пар, в которых хотя бы одно число кратно 5, а сумма пары больше
— наибольшего из чисел файла, оканчивающихся на 7. Затем
наибольшую из сумм таких пар. В файле есть хотя бы одна такая пара.
9999 5 -3 17
Пар: 1 Наибольшая сумма: 10004
Здесь . Пары: (9999; 5) — 5 кратно 5, сумма 10004 > 17,
подходит; (5; −3) — сумма 2, не больше 17; (−3; 17) — ни одно не кратно 5.
Проверяется: два прохода по файлу, пары соседних через
, старт наибольшей суммы.
Первый проход — как задание 1, только нужно одно наибольшее .
Потом
и снова
. Второй проход:
первое число — в
до цикла, в цикле пара
, в конце витка
.
Ловушки, ради которых это задание. Первое число файла большое, а
до цикла даст лишнюю пару (0; первое): ноль кратен 5. Все
числа отрицательные: суммы пар меньше нуля, и старт наибольшей суммы с нуля
врёт. И
в поиске
.
Серия — несколько чисел файла подряд, каждое из которых
строго больше предыдущего; одно число — тоже серия длины 1. Программа
печатает длину самой длинной серии и её первое число. Если самых длинных серий
несколько — первое число той, что встретилась раньше.
4 1 5 9 2 2 8
Длина: 3 Первое число: 1
Проверяется: prev и две пары накопителей — текущая серия и лучшая; равные соседи, серия в конце файла, равная длина.
До цикла: первое число — в ; текущая серия длины 1 начинается
с него, и лучшая пока она же. В цикле: если
, серия
удлиняется; иначе новая серия длины 1 начинается с
. После этого —
сравнение с лучшей, на каждом шаге.
Ловушки, ради которых это задание. Лучшая серия в самом конце файла: если сравнивать только при обрыве, она потеряется. Равные соседи серию обрывают («строго больше»). Две серии одной длины — сравнение строгое, остаётся первая.
zadanie1.py … zadanie3.py лежат в твоей
папке, отладочные print из них убраны.Проверка.bat.Оболочка показывает, на каком файле программа ошиблась и что должна была вывести.
Большой файл в отчёт не поместится — поэтому она кладёт его в твою папку как
proverka-1.txt (proverka-2.txt, …). Открой его в программе
вместо своего и найди ошибку. Попыток сколько угодно.
Текстовый файл — символы и переводы строк, открывается Блокнотом. Двоичный — байты в своём формате (картинка, архив). Файл данных кладут в папку программы и открывают по имени: f = open("17.txt"). f — файловая переменная: помнит, докуда файл прочитан.
for line in f — по всем непрочитанным строкам до конца файла. f.readline() — одна следующая строка. Строка — текст: x = int(line), перевод строки int() отбросит сам. Второй проход — f.close() и снова open.
g = open("out.txt", "w") — "w" стирает старое содержимое, "a" дописывает в конец. print(x, file=g) пишет строку в файл. В конце g.close().
prev = int(f.readline()) до цикла; в цикле пара (prev; x), в конце витка prev = x. Пар на одну меньше, чем чисел. prev = 0 — лишняя пара с нулём.
cur — длина текущей серии, best — лучшая. Подходит: cur + 1, иначе серия начинается заново. best сравнивать на каждом шаге — иначе серия в конце файла потеряется.
Последняя цифра: abs(x) % 10, потому что -17 % 10 == 3. Наибольшее и наибольшая сумма: старт не с нуля, а с числа меньше любого возможного.
Материалы подготовлены с использованием технологий искусственного интеллекта.