>>Программисты, не бейте. Да, говнокодерство.
1. Несмотря на уточнения про тройки, этот момент всё равно написан криво. Идущие подряд элементы могут быть разбиты на независимые вот так:
А могут браться с предыдущими элементами вот так:
В обоих случаях это будут три идущих подряд элемента, но результат будет принципиально разный.
2. Решение:
from itertools import combinations
with open('17-328.txt', 'r') as file: #читаем файл и формируем список
data = [int(line.strip()) for line in file]
def avg_odd(lst): #поиск среднего арифметического нечетных элементов
odds = [i for i in lst if i%2] #все нечетные элементы списка
avg = sum(odds)/len(odds)
return avg
def check_pairs(lst,CR=''): #проверка на наличие числа CR в OCT-записи суммы всех пар чисел списка
sum_of_pairs = [sum(i) for i in list(combinations(lst,2))] #сумма всех пар списка
s = list(map(oct,sum_of_pairs)) #перевод всех сумм в OCT
res = str(CR) not in ''.join(s) #отсутствие числа CR среди всех элементов
return res
def window(lst,aliasing=False):
sublst=[lst[i:i+3] for i in range(0,len(lst),[3,1][aliasing])] #Разбиение на тройки, aliasing - перекрытие
res = [x for x in sublst if check_pairs(x,'7') and sum(x) return res
l_res = len(window(data))
m_res = max([sum(i) for i in window(data)])
print(f'Count of triples: {l_res}',f'Max sum: {m_res}',sep='\n')
В функции window есть аргумент aliasing (перекрытие). По умолчанию он равен False, но если в обращении к функции написать 1 или True, то окно будет двигаться и забирать элементы с перекрытием как на второй картинке.