Ошибка типа: объект ‘int’ не подлежит подписке ?что-то не так с pow()?

#python

Вопрос:

У меня есть следующий код:

 def nar( value ):  leng = len(str(value))  x = 0    for i in range(len(str(value))):  while ilt;leng:  if leng == 1:  return True    x = x   pow(int(value[i]), leng)  if x == value:  return True  else: return False  

В этом и заключается ошибка:

 x = x   pow(int(value[i]), leng) TypeError: 'int' object is not subscriptable  

Функция должна принимать число, например 145, и выполнять следующее: 1^3 4^3 5^3 где мощность в основном равна длине этого числа.

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

1. Похоже, что value это целочисленное значение. Нет смысла использовать подстрочный индекс для целых чисел. Может быть, вы хотели int(str(value)[i]) ?

2. И вместо преобразования нескольких строк существуют другие способы получения отдельных цифр целого значения с использованием операций деления и остатка. Вспомните, когда вы узнали о десятичной системе счисления в школе и что происходит, когда вы умножаете и делите на 10 .

3. Я также пытаюсь понять, что делает этот код. Внутри while i lt; leng у вас есть код , который не изменяет ни i «ни leng «. Таким образом, у вас есть цикл , который либо никогда не выполняется, либо выполняется один раз leng == , либо является бесконечным циклом.

Ответ №1:

Проблема с вашим кодом заключается в том, что

 x = x   pow(int(value[i]), leng) # Replace above line with x = x   pow(int(str(value)[i]), leng)  

Ошибка возникает из-за того, что значение является целым числом, а целые числа не могут быть подписаны. Добавление str(значения) позволяет получить доступ к каждому номеру по индексу.

Кроме того, ваш код представляет собой бесконечный цикл.

Это должно работать в соответствии с вашим описанием.

 def nar( value ):  leng = len(str(value))  x = 0    for i in range(len(str(value))):  x = x   pow(int(str(value)[i]), leng)   # return x  if x == value:  return True  else: return False  print(nar(145))  

Ответ №2:

Проблема value[i] в том . Вы не можете записать целое число в виде строки, чтобы получить его десятичные цифры.

Для извлечения десятичных цифр необходимо использовать операторы деления по модулю и целочисленные. Например, чтобы получить «4» в «145», вы делаете

 print((value % 100) // 10)  

В общем случае, чтобы получить i-ю цифру (считая справа и начиная с нуля), вы делаете

 print((value % (10**(i 1))) // 10**i)  

Это можно поместить в цикл, чтобы получить все цифры.

Или, может быть, вы просто хотели int(str(value)[i]) вместо этого получить i-й элемент в строковом представлении значения. Но все эти преобразования int в строку выглядят странно.