Как исправить? 'int' object is not subscriptable

Awesome Man

Вот задача: Сгенерировать 20 случайных целых чисел в диапазоне от -5 до 4, записать их в ячейки массива. Посчитать сколько среди них положительных, отрицательных и нулевых значений. Вывести на экран элементы массива и посчитанные количества. Вот текст ошибки: a[i]=int(a[i]) TypeError: 'int' object is not subscriptable. Как ето исправить?Большое Спасибо!

import random
a=[]
for i in range(20): a=random.randint(-5,4)
p=[]
n=[]
z=[]
for i in range(20): a[i]=int(a[i]) for i in range(0,20,1): if(a[i]>0): p.append(a[i]) if(a[i]==0): z.append(a[i]) if (a[i]<0): n.append(a[i])
print('quantity positive',len(p))
print('quantity negative',len(n))
print('quantity zero',len(z))
1 ответ

Awesome Man

В 4й строчке вы записываете в переменную "a" целое число:

a=random.randint(-5,4)

Затем, в 9й строчке вы пытаетесь обратиться к переменной "a" по индексу.

a[i]=int(a[i])

Но целочисленные переменные не умеют в индекс. Чтобы всё заработало, вам нужно заменить 4ю строчку на такое:

a.append(random.randint(-5,4))

А вообще, ваш код не слишком питоничен. Там где это возможно, рекомендуется вместо циклов использовать списковые включения. Они гораздо более лаконичны, и код с ними становится гораздо проще, чем без них.

Вашу программу можно переписать таким образом:

import random
a = [random.randint(-5,4) for _ in range(20)]
p = [i for i in a if i > 0]
n = [i for i in a if i < 0]
z = [i for i in a if i == 0]
print('quantity positive', len(p))
print('quantity negative', len(n))
print('quantity zero', len(z))

Как видите, получилось гораздо понятнее, чем у вас.

PS: Признаком хорошего стиля считается ставить пробелы слева и справа от "равно", знаков сравнения и арифметических символов. А также пробел после запятой.

licensed under cc by-sa 3.0 with attribution.