Как считать данные из файла в список
Для работы с файлом удобно использовать конструкцию with:
with open (file) as f:
инструкции
Эта конструкция определяет для открытого файла переменную f и выполняет набор инструкций. После их выполнения файл автоматически закрывается. Метод readlines()прочитает и вернёт все строки в файле в виде списка.
Для работы с данными файла мы будем использовать следующий программный код:
with open (′17.txt′) as f:
a=[int(x) for x in f.readlines()]
Основные операторы для работы со списками (массивами)
В Python для того, чтобы работать с большим количеством данных, используется структура данных под названием список. Список представляет собой последовательность (набор) элементов, пронумерованных от 0.
Чтобы объявить список, нужно в квадратных скобках перечислить его элементы через запятую:
a=[1,2,3,4,5]
Элементы списка могут быть разных типов в отличие от элементов массива, но, как правило, используются списки из элементов одного типа.
Методы списков
a.append(x) добавляет элемент x в конец списка a
a.count(x) возвращает количество элементов списка a со значением x
а.sort() сортирует список a в порядке возрастания
а.reverse() разворачивает список a в обратном порядке
a.clear() очищает список a
Функции для работы со списками
len(a) возвращает длину списка a (количество элементов списка a)
min(a) возвращает наименьший элемент списка a
max(a) возвращает наибольший элемент списка a
sum(a) возвращает сумму элементов списка a
Решение задачи можно разбить на этапы
1. Считать данные из текстового файла в массив (список). Важно, чтобы программа решения и текстовый файл лежали в одной папке (или необходимо указать полный путь для считывания файла).
with open (′17.txt′) as f:
a=[int(x) for x in f.readlines()]
2. Необходимо в массиве найти максимальное число, кратное 3. Для этого инициализируем пустой массив b. Затем с помощью цикла for переберём все элементы массива a. Если элемент кратен 3, то запишем его в массив b. После выполнения цикла в переменную m запишем максимальное значение массива b.
b=[]
for i in range (0,len(a)):
if a[i]%3==0:
b.append(a[i])
m=max(b)
3. Определим количество подходящих пар. Для этого очистим массив b. Затем с помощью цикла for переберём все элементы массива a. Если хотя бы один элемент пары делится на 3 и сумма элементов пары не больше m, то запишем эту сумму в массив b.
b=[]
for i in range (0,len(a)−1):
if (a[i]%3==0 or a[i+1]%3==0) and (a[i]+a[i+1]<=m):
b.append (a[i]+a[i+1])
4. Выведем на экран количество элементов массива b — оно равно количеству подходящих пар — и максимальную сумму:
print (len(b),max(b))
Получилась программа:
with open (′17.txt′) asf:
a= [int(x) for x in f.readlines()]
b=[]
for i in range (0,len(a)):
if a[i]%3==0:
b.append (a[i])
m=max(b)
b=[]
for i in range (0,len(a)−1):
if (a[i]%3==0 or a[i+1]%3==0) and (a[i]+a[i+1]<=m):
b.append (a[i]+a[i+1])
print (len(b),max(b))
Ответ: 2439 998.
Прототипы с ЕГЭ
Задача №1 В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Например, для последовательности из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4 11
Ответ: 2802 1990
Задача №2 В файле содержится последовательность чисел. Элементы последовательности могут принимать целые значения от -100 000 до 100 000 включительно. Определите количество пар последовательности, в которых сумма элементов меньше минимального положительного элемента последовательности, кратного 19. Гарантируется, что такой элемент в последовательности есть. В ответе запишите количество найденных пар, затем абсолютное значение максимальной из сумм элементов таких пар. В данной задаче под парой подразумевается два подряд идущих элемента последовательности.
Ответ: 4984 696
Задача №3 В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите количество пар последовательности, в которых только одно число оканчивается на 3, а сумма квадратов элементов пары не меньше квадрата максимального элемента последовательности, оканчивающегося на 3. В ответе запишите два числа: сначала количество найденных пар, затем максимальную из сумм квадратов элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Ответ: 180 190360573
Задача №4 В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно. Определите количество пар последовательности, в которых хотя бы один из элементов является трёхзначным числом, а сумма элементов пары кратна минимальному трёхзначному элементу последовательности, оканчивающемуся на 5. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Ответ: 13 9500
Задачи уровня ЕГЭ
Задача №1 В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 10 000 включительно. Определите количество пар последовательности, в которых только одно число кратно 7, а сумма элементов пары кратна максимальному элементу последовательности, оканчивающемуся на 0F в шестнадцатеричной системе счисления. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Ответ: 2 9487
Задача №2 В файле представлена последовательность целых положительных чисел, не превышающих 10000. Симметричной парой называется такая пара чисел в заданной последовательности, элементы которой расположены на равном расстоянии от концов последовательности. Например, в последовательности 1 2 3 4 3 5 1 симметричными парами назовем пары (1, 1), (2, 5), (3, 3). Число 4 не образует пару, так как оно находится на равном удалении от краев, следовательно, это одно число, а не два.
Найдите количество симметричных пар таких, что среднее арифметическое максимального и минимального значений последовательности строго меньше значения одного элемента пары и строго больше значения второго элемента пары.
В качестве ответы введите количество найденных пар и максимальную суммы элементов среди найденных пар.
Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц.
Ответ: 2120 14972
Задача №3 В файле содержится последовательность натуральных чисел. Элементы последовательности могут принимать целые значения от 1 до 100 000 включительно. Определите количество пар последовательности, в которых сумма чисел четна, а разница между числами кратна минимальному числу, кратному 103. Гарантируется, что элемент, кратный 103, в последовательности есть.
В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Ответ: 4 145300
Задача №4 В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения, по модулю не превосходящие 10 000 включительно. Найдите такие пары элементов, в которых произведение элементов больше, чем произведение рядом стоящих чисел (перед и после пары). В качестве ответа выведите максимальную сумму среди найденных пар, затем количество таких из них, в которых есть хотя бы одно число, большее среднего арифметического всех чисел в файле. Под парой в задаче подразумевается два подряд идущих числа. Первая и последняя пара в файле не могут быть искомыми, так как перед или после них нет чисел.
Ответ: 19703 3103
Задача №5 В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от -10000 до 10 000 включительно. Определите пары, среднее арифметическое в которых больше, чем количество чисел в последовательности, абсолютное значение которых меньше 100. В ответе запишите два числа: сначала количество найденных пар, а затем – максимальную сумму элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Ответ: 685 1990