Посчитать, сколько в списке из случайных чисел существует таких, которые имеют четные десятки
Прохожу тему "списки". При решении одной из задач возникла проблема. Нужно из какого-то количества случайных чисел посчитать, сколько из них имеют четный десяток. Вроде код написал верно, случайные числа выводятся:
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 шт):
Ошибка в вызове 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: