Задача,
На вход программа получает набор чисел, заканчивающихся решеткой. Вам требуется найти: среднее, максимальное и минимальное число в последовательности. Так же нужно вывести cумму остатков от деления суммы троек на последнее число тройки (каждые 3 введеных числа образуют тройку).
Для понимания рассмотрим пример входных данных: 1 2 3 4 5 6 среднее: (1 + 2 + 3 + 4 + 5 + 6) / 6 = 3.5 максимум: 6 минимум: 1 сумма остатков троек: (1 + 2 + 3) mod 3 + (4 + 5 + 6) mod 6 = 6 mod 3 + 15 mod 6 = 0 + 3 = 3
Среднее выводить, округлив до трех знаков после запятой. Для этого нужно использовать функцию round(x, 3)
Того ваша программа должна вывести: 3.5 6 1 3
Подумайте, имеет ли смысл хранить всю последовательность.
Формат входных данных
Последовательность чисел, заканчивающися ‘#’. Все числа от 1 до 100. Количество чисел в последовательности кратно трем. Одно число на строку.
Формат выходных данных
Четыре числа, разделенных пробелом.
Написал вот такой код, но ощущение, что это плохой и плохо читаем код в котором я сам могу запутаться, не отпускает. Так же не понимаю как закончить цикл решеткой ‘#’.
Что скажите?
n = 0 # количество введенных чисел
the_sum = 0
the_max = 0
the_min = 100
k = 0 #сумма 3х чисел каторая будет делится по модулю 3*р
N = int(input())
the_sum += N
k += N
if N > the_max:
the_max = N
if N < the_min:
the_min = N
i = 1 # счетчик каторый обновляется на 0 через каждые 3 числа
m = 0 # остаткот 3х чисел
sum_mod3 = 0 # сумма остатков 3х чисел
p = 1 # умножитель модуля каторый увеличивается на 1 каждые 3 числа
while N > 0 and N < 100:
N = int(input())
if N==0:
break
n += 1
the_sum += N # сумма всех чисел
k += N
i += 1
if i == 3:
m = k %(3*p) # остаткот 3х чисел
i = 0 # счетчик каторый обновляется на 0
k = 0 # сброс суммы 3х чисел на 0
sum_mod3 += m # сумма остатков 3х чисел
p += 1 # умножитель модуля каторый увеличивается на 1
if N > the_max:
the_max = N
if N < the_min:
the_min = N
mean = the_sum/(n+1) # среднее
print(round(mean, 3), the_max, the_min, sum_mod3)