#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 в строку выглядят странно.