Посчитать, сколько в списке из случайных чисел существует таких, которые имеют четные десятки

Прохожу тему "списки". При решении одной из задач возникла проблема. Нужно из какого-то количества случайных чисел посчитать, сколько из них имеют четный десяток. Вроде код написал верно, случайные числа выводятся:

X, Y, N = map(int,input().split())
from random import randint
A = [randint(X,Y) for i in range(N)]
print(*A)
C = 0
for l in range(*A):
    if (l//10)%2 == 0:
        C = C + 1
    elif (l//10)%2 != 0:
        C = C + 0
    print(C)

Но второе условие выполняется только тогда, когда количество аргументов не превышает трех, при большем количестве чисел возникает такая ошибка:

Traceback (most recent call last):
  File "", line 6, in <module>
    for l in range(*A):
TypeError: range expected at most 3 arguments, got 50

объясните пожалуйста, почему так?


Ответы (2 шт):

Автор решения: SwaD

Ошибка в вызове range(). Функция может принимать на вход 3 параметра(старт, стоп, шаг), в то время, как *A передает все элементы списка как отдельные аргументы.

Если A = [1, 2, 3, 4], то range(*A) будет выглядеть так: range(1, 2, 3, 4)

Вместо range(*A) укажите A

from random import randint

X, Y, N = map(int,input().split())

A = [randint(X,Y) for i in range(N)]
print(*A)
C = 0
for l in A: # <- тут
    if (l//10)%2 == 0:
        C = C + 1
    elif (l//10)%2 != 0:
        C = C + 0
print(C)
→ Ссылка
Автор решения: Алексей Р

Ошибка возникает в строке for l in range(*A):, т.к. вы передаете в функцию range() в качестве аргументов распакованный список A. Так, если, например, A = [12,5,7,15], то range(*A) будет выглядеть после распаковки так: range(12,5,7,15). В свою очередь, функция range() принимает максимум 3 аргумента - начальное значение, конечное значение и шаг. А когда вы передаете больше трех аргументов (в вашем случае - 50), возникает ошибка. Вам нужно перебирать просто список A, функция range() здесь не нужна:

for l in A:
→ Ссылка