为什么将整数转换为字符串,将其切片,然后再转换回整数,这给我带来TypeError吗?

时间:2018-10-01 23:30:36

标签: python algorithm compiler-errors runtime-error

因此,我正在尝试解决挑战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

2 个答案:

答案 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变成124,而这两对之间的零值丢失了。这适用于int-string-slice-int和算术方法。仅将n保留为一系列的字符串数字将保留该信息。

答案 1 :(得分:0)

就像将其更改为o = int(str(n)[:1])

一样简单

希望这会有所帮助!