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

标签 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

最佳答案

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

关于python - 为什么将整数转换为字符串,将其切片,然后再转换回整数,这给我带来TypeError吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600181/

相关文章:

spring - 无法创建内部bean'org.szymon.email.classes.MyMapperClass

python - Keras: ValueError: Negative dimension size caused by 减去 5 from 1

由于某种原因,Python 请求库帖子被 Django 解释为 GET

c# - 忽略假用户名

c# - 将接口(interface)数组转换为结构数组时隐式转换无效

java - 没有编译器错误的多个返回语句

python - Numpy 对象数组

python - Django : An established connection was aborted by the software in your host machine

algorithm - 如何在 Matlab 中加速我的代码 [包括示例]?

algorithm - 网络和图论问题