TypeError:'int'对象不支持项目分配

时间:2013-02-11 03:05:27

标签: python typeerror

为什么我会收到此错误?

    a[k] = q % b
 TypeError: 'int' object does not support item assignment

代码:

def algorithmone(n,b,a):
     assert(b > 1)
     q = n
     k = 0
     while q != 0:
        a[k] = q % b
        q = q / b
        ++k

     return k

print (algorithmone(5,233,676))
print (algorithmone(11,233,676))
print (algorithmone(3,1001,94))
print (algorithmone(111,1201,121))

1 个答案:

答案 0 :(得分:19)

您将整数传递给函数a。然后,您尝试将其指定为:a[k] = ...,但由于a是标量,因此无效...

就像你曾经尝试过的那样:

50[42] = 7

这句话没有多大意义,python会以同样的方式对你大喊大叫(大概)。

此外,++k没有做你认为它做的事情 - 它被解析为(+(+(k))) - 即bytcode只是UNARY_POSITIVE两次。你真正想要的是k += 1

最后,请注意以下语句:

q = q / b

与print一起使用的括号意味着您希望在某些时候在python3.x上使用它。但是,x/y在python3.x上的行为与在python2.x上的行为不同。看看这个算法,我猜你想要整数除法(因为你检查q != 0哪个难以满足浮点数)。如果是这种情况,您应该考虑使用:

q = q // b

在python2.x和python3.x上执行整数除法。