День первый. Часть третья


Ему нужен файл. И лежать он должен там же, где лежит сама прога. А где она лежит? Хз. Поэтому положим ее в C:\000. Не спрашивайте. Одного нуля мало, четыре будет перебор, так что название 000 в самый раз. File-Save as, создаем директорию 000, имя даем ege-17-1.py, поехали

С сайта гиа скачиваю файл 17.txt в ту же директорию, втыкаю в код. Так, переменные объявляются по-простому, без типа.

count = 0
m = -20001

После открытия файла данные из него переносятся в массив одной командой

f = open('17.txt')
l = [int(i) for i in f]

Затем цикл по массиву, внутри цикла условие

for i in range(len(l) - 1):
    if (l[i] % 3 == 0) or (l[i + 1] % 3 == 0):

Вместо фигурных скобок или begin\end – просто отступы; синтаксис выглядит корявым, но лаконичным. Если условие выполняется – наращиваем счетчик, присваиваем переменной максимальное значение из того что уже есть в ней или суммой текущего и следующего элемента. Синтаксис непривычен, сама буду писать по-другому. Но пока – как есть:

        count += 1
        m = max(m, l[i]+ l[i + 1])

После окончания цикла – вывод счетчика и переменной. Это реально все? Зеленый треугольник… барабанная дробь.. заработало!

День заканчивается, но и осталось немного – написать код самой, не заглядывая в решение. Придется вкурить в само задание:

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от −10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности. Например, для последовательности из пяти элементов: 6; 2; 9; –3; 6  — ответ: 4 11.

Так, посчитать надо “количество пар” и максимум “сумм элементов”. При этом парой считаются “идущие подряд”, при этом в паре “хотя бы одно делится на 3”. Поэтому в коде цикл, в котором if с or, %3 == 0 <- явно признак делимости на три, проверяется текущий и следующий элемент массива (идущие подряд, ага). Заботливо указан диапазон значений, от -10000 до 10000. Ищем максимум, так что переменную надо загнать ниже минимума, поэтому m = -20000.

Пришла пора писать код самой. File-New-Python file

переменные называю привычно, сразу инициализирую:

cnt = 0
maxVal = -20000

Так, файл открывается в переменную по-простому, в одинарных кавычках. Но, придется запомнить, как после открытия файла загнать его содержимое в массив. Раз массив – значит квадратные скобки. В них – тип int и цикл по файлу f

f = fopen('17.txt')
l = [int(i) for i in f]

Теперь цикл по массиву, до предпоследнего элемента, IDE подсвечивает, что нужно двоеточие

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

Внутри if с условием, что или текущий или следующий элемент делятся на 3. Для начала просто нарастим счетчик. И выведем его после цикла. Синтаксис print подсказывает IDE, спасибо

for i in range(len(l)-1):
  if((l[i]%3 == 0) or (l[i+1]%3 == 0)):
      cnt = cnt + 1
print(cnt)

Ctrl+S, зеленый треугольник, ошибочка… Не знает fopen, предлагает просто open. Штош, попробуем..Получилось!

Пора внутри if не просто счетчик наращивать, но еще и переменной что-то там присваивать. Так, вспоминаем, что нам надо: “максимальную из сумм элементов”. Запоминать синтаксис функции max – не по фен-шую, напишу сама, как понимаю: “Если сумма i-го и i+1-го больше, чем maxVal, то в maxVal и положим эту сумму”. Ну и в printе после цикла это самое maxVal надо вывести. попробую через запятую, с пробелом в двойных кавычках:

      if(l[i]+l[i+1] > maxVal):
          maxVal = l[i] + l[i+1]
print(cnt, " ", maxVal)

Заработало!

Кто молодец? Я – молодец! Осталось сделать ставку – что из всей этой фигни останется в голове до завтра? Пока самый мутной кусок – запомнить, как содержимое файла засунуть в массив одной командой. Этот синтаксис, походу, придется просто зазубрить.

Как с этим справится наш герой? Смотрите это в серии второй: День второй