因此,我正在尝试解决挑战here,并且编写了解决该问题的基本算法。该算法的功能之一是,它将把函数n的输入转换为字符串,除第一个字符外的所有字符均切成薄片,然后使用以下命令将其转换回整数:o = int(str(n[:1]))
。但是,当我这样做时,它给了我这个错误:TypeError: 'int' object is not subscriptable
。我发现了另一种情况here,但似乎无法解决我的问题。该错误是什么意思,我该如何清除它的代码?
全功能:
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
答案 0 :(得分:2)
您正在将[: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
变成1
和24
,而这两对之间的零值丢失了。这适用于int-string-slice-int和算术方法。仅将n
保留为一系列的字符串数字将保留该信息。
答案 1 :(得分:0)
就像将其更改为o = int(str(n)[:1])
希望这会有所帮助!