即使进行了正确的转换,int对象也不是下标错误?

时间:2019-04-23 21:23:43

标签: python python-3.6

我正在尝试创建一种类似于“扩展程序”的程序。如果您给它一个像1234这样的数字,它应该返回“ 1000 + 200 + 30 + 4”。但是,即使我进行了适当的转换,我也一直收到一个int对象不是下标错误的消息。

我尝试过使用new_str = num [int(i)] ...,但这仍然行不通。

def expanded_form(num):
    count = len(str(num))-1
    new_str = ""
    for i in range(0,len(str(num))):
        new_str += num[i] * 10**count + " + "
        count -= 1
    return new_str
print(expanded_form(1234))

2 个答案:

答案 0 :(得分:1)

问题出在for循环内,您正在编写num [i],这是给您错误的原因,因为num是一个int并且您实际上无法访问int的索引。

您正在尝试获取该索引上的数字并将其乘以10 **个计数。为此,应该尝试一下

new_str += str(int(str(num)[i]) * 10 ** count) + ' + ' 

首先必须将num转换为字符串以获取该位置上的数字,但它会以字符串形式返回,因此必须将其解析回int以便将其与10 **计数相乘,然后您必须再次将其转换为字符串才能将其与'+'连接起来。

如果您想避免对其进行多次分析,请尝试在for循环内进行

new_str = str(num)[i] + '0' * count + ' + '

您可以使用count是str(num)[i]后应为零的数量来代替将其乘以10的幂的事实。

答案 1 :(得分:0)

您的错误告诉您不能对整数下标。此处:num[i]num是整数。您应该再次将其转换为字符串。
这就是说,要执行所需的操作,需要将数字num[i]重铸为int以便进行数学运算。

def expanded_form(num):
    count = len(str(num))-1
    new_str = []
    for i in range(0,len(str(num))):
        new_str.append(int(str(num)[i]) * 10**count)
        count -= 1
    return ' + '.join(map(str, new_str))

print(expanded_form(1234))

请注意,我将new_str列为列表,并使用join用总和来构建字符串,以消除最后的多余'+'。我还需要map将所有整数转换回字符串,否则join无法正常工作。