аватар question@mail.ru · 01.01.1970 03:00

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

Вот задача: Сгенерировать 20 случайных целых чисел в диапазоне от -5 до 4, записать их в ячейки массива. Посчитать сколько среди них положительных, отрицательных и нулевых значений. Вывести на экран элементы массива и посчитанные количества. Вот текст ошибки:

a[i]=int(a[i])TypeError: 'int' object is not subscriptable.

Как ето исправить?Большое Спасибо!

import randoma=[]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))
аватар answer@mail.ru · 01.01.1970 03:00

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

a=random.randint(-5,4)

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

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

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

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

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

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

import randoma = [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: Признаком хорошего стиля считается ставить пробелы слева и справа от ""равно"", знаков сравнения и арифметических символов. А также пробел после запятой.

Последние

Похожие