为什么将整数转换为字符串,对其进行切片,然后将其转换回整数会给我这个类型错误?



所以我在这里试图解决一个挑战,我写了一个基本的算法来解决这个问题。 该算法的功能之一是它将函数的输入 n 转换为字符串,切片除第一个字符之外的每个字符,然后使用以下方法将其转换回整数:o = int(str(n[:1]))。 但是,当我这样做时,它会给我这个错误:TypeError: 'int' object is not subscriptable. 我在这里发现了另一个案例,但它似乎并不能解决我的问题。 此错误是什么意思,我怎样才能摆脱我的代码?

全功能:

def utopianTree(n):
o = int(str(n[:1]))
n = int(str(n[1:]))
for i in range(1, n):
if n == 0:
o += 1
elif i % 2 == 0:
o *= 2
elif i % 2 != 0:
o += 1
i += 1
return o

您正在将[:1]切片应用于n,这是一个整数。不能对整数进行切片,因为它们不是序列。

您的标题声明您要转换为字符串,然后切片,然后转换回整数,但您实际上并没有这样做。改为将切片操作放在str()结果上:

o = int(str(n)[:1])
n = int(str(n)[1:])

分配给o的第一个数字是最高数字,因此您可以重复除以 10,直到数字小于 10:

o = n
while o > 10:
o //= 10

或者,您可以取该值的 log10,以便知道 10 的多少次幂来移动该值;您可以使用相同的量级值获得n的剩余数字:

import math
magnitude = int(math.log10(n))
o = n // (10 ** magnitude)
n -= o * (10 ** magnitude)

演示:

>>> import math
>>> n = 4213
>>> magnitude = int(math.log10(n))
>>> o = n // (10 ** magnitude)
>>> n -= o * (10 ** magnitude)
>>> o, n
(4, 213)

考虑到不会保留值中的任何零;1024变得124,这两对之间有一个零的事实消失了。这适用于 int-string-slice-int 和算术方法。仅将n保留为一系列字符串数字才能保留该信息。

只需将其更改为o = int(str(n)[:1])即可

希望这有帮助!

最新更新