Найти среднее значение всех элементов, делящихся на 7

from random import random
 
N = 20 # кол-во элементов последовательности
a = []
 
for i in range(N): # рандомизируем N
    N = int(random()*100) - 50
    a.append(N)
print(a)
 
s = p = 0
 
for i in range(N): # вычисляем среднее значение
    if (a[i] % 7 == 0):
        s = s + a[i]
        p = p + 1
print(s/p)
IndexError: list index out of rangeЧто я делаю не так? ©
11 ответов

То работает, то не работает


>>> l = [i for i in range(100) if not i%7]
>>> l
[0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]
>>> sum(l)/len(l)
49.0
>>>


Ну хотя бы, если в списке не будет элементов кратных 7, то р будет равно 0 и s/p даст ошибку


У Вас идея какая-то есть по поводу такого использования переменной N?


Ну хотя бы, если в списке не будет элементов кратных 7, то р будет равно 0 и s/p даст ошибку
На втором скрине второй снизу прогон - там видно 70, а оно кратно 7, но всё равно дало ошибку...
>>> sum(l)/len(l)
Для чего это? Упростить данную часть кода никак нельзя?
У Вас идея какая-то есть по поводу такого использования переменной N?
Нет, я просто пытаюсь найти простое и рабочее решение


А текст ошибки прочитать, ошибки две деление на 0 и неправильный индексВторая ошибка, изменяется значение N


ошибки две деление на 0 и неправильный индекс Добавлено через 1 минуту Вторая ошибка, изменяется значение N
А как должно быть?


А как должно быть?
не делить на ноль и не изменять N


for i in range(N): # рандомизируем N
    n = int(random()*100) - 50
    a.append(n)
print(a)
Так хотя бы, но лучше вариант vic5710 использовать


Что я делаю не так? ©
Используете одну и ту же переменную N и для длины списка и для случайных чисел. В результате, когда Вам требуется длина списка, Вы используете случайное число, которое записали позже в эту переменную. Если это число больше длины списка, то получаете исключение при попытке обратиться к несуществующему элементу массива. Если это число меньше длины списка, то исключения нет, но результат всё равно (потенциально) неправильный, так как Вы обрабатываете только часть списка.


И вот это вот "int(random()*100) - 50", есть специальная функция для этого
from random import randint
 
N = 20
lst = [randint(-50, 50) for _ in range(N)]
mod7 = [x for x in lst if not x % 7]
print(lst)  # all elements
print(mod7)  # mod7 elements
print(sum(mod7)/len(mod7) if mod7 else "")  # avg
[-31, -45, 42, 19, 46, 14, -48, 21, -25, 19, -24, -10, -45, -1, -35, -37, 25, 5, 41, 43]
[42, 14, 21, -35]
10.5