因此,我正在尝试解决一个挑战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
最佳答案
您正在将[:1]
slice 应用于n
,这是一个整数。您不能对整数进行 slice ,因为它们不是序列。
标题说明您要转换为字符串,然后 slice ,然后转换回整数,但实际上并没有这样做。将slice操作放到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
保留为一系列字符串数字才能保留该信息。
关于python - 为什么将整数转换为字符串,将其切片,然后再转换回整数,这给我带来TypeError吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600181/