... > Информатика (ЕГЭ) > Работа с файлами...

Работа с файлами в Python

НАВИГАЦИЯ ПО СТРАНИЦЕ

Элементы списка функцию abs Разберем задачи
ПОЛНЫЙ ОТВЕТ
БЕЗ ВОДЫ
Без воды — краткий вариант ответа,
легко понять и запомнить

Обязательно пригодится:

  • Элементы списка обозначаются a[0], a[1], a[2], a[3] и т. д., соответственно, чтобы перебрать все элементы списка, мы запускаем цикл 

for i in range (len(a)-1):

if a[i] >0  and a[i+1]> 0 #поиск пар положительных чисел
  • Последние цифры у отрицательных чисел всегда ищутся через функцию abs (модуль!), так у отрицательных чисел остаток от деления считается иначе, он не равен последней цифре числа.

Разберем задачи.

  • В файле 14.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. Рассматривается множество элементов последовательности, больших 100 и меньших 889, которые удовлетворяют следующим условиям:

    • − цифра в разряде десятков не превышает 3;

    • − цифра в разряде сотен принадлежит отрезку [5; 8];

    • − при переводе в 16СС не оканчивается на А;

    • − не кратно 18.

Найти количество таких чисел и максимальное из них.

Решение:

a = [int(x) for x in open('14.txt')]

d = []

for i in range (len (a)):

    if (a[i] > 100 and a[i] < 889 and a[i] % 100 // 10 <=3 and a[i] % 1000 // 100 <=8  and a[i] % 1000 // 100 >=5 and a[i] % 16 !=10 and a[i] % 18 !=0):

         d.append(a[i])

print (len(d),max(d))

Ответ: 29 827

  • В файле 15.txt содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0 до 10 000 включительно. Определить количество пар чисел, в которых хотя бы один из двух элементов больше, чем наибольшее из всех чисел в файле, делящихся на 218, и хотя бы один элемент из двух оканчивается на E в 16-ой системе счисления. В ответе записать два числа: сначала количество найденных пар, а затем — минимальную сумму элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Решение (вариант 1):

mn = 20001

k = 0

mx = -1

a = [int(x) for x in open('15.txt')]

for i in range(len(a)):

        if a[i] % 218 == 0:

            mx = max(mx,a[i])

for i in range (len (a)-1):

        if (a[i] > mx or a[i+1]>mx) and (a[i] % 16 == 14 or a[i+1] % 16 == 14):

            k +=1

            mns = a[i] + a[i+1]

            mn = min(mn,mns)

print (k,mn)

Ответ: 29 10072

Решение (вариант 2):

mx = -1

a = [int(x) for x in open('15.txt')]

for i in range(len(a)):

        if a[i] % 218 == 0:

            mx = max(mx,a[i])

d =[]

for i in range (len (a)-1):

        if (a[i] > mx or a[i+1]>mx) and (a[i] % 16 == 14 or a[i+1] % 16 == 14):

            d.append(a[i]+a[i+1])

print (len(d),min(d))

Ответ: 29 10072

Решение (вариант 3):

a = [int(x) for x in open('15.txt')]

mx = max([x for x in a  if x % 218 == 0])

d =[]

for i in range (len (a)-1):

        if (a[i] > mx or a[i+1]>mx) and (a[i] % 16 == 14 or a[i+1] % 16 == 14):

            d.append(a[i]+a[i+1])

print (len(d),min(d))

Ответ: 29 10072

Суть представленных вариантов решений в постоянном оптимизируемом коде.