Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

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

#python #python_3x #обработка_ошибок


Вот задача:
Сгенерировать 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



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

Комментариев нет:

Отправить комментарий