我正在尝试创建一种类似于“扩展程序”的程序。如果您给它一个像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))
答案 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
无法正常工作。