17

为什么我会收到此错误?

    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))
4

1 回答 1

25

您将整数作为a. 然后,您尝试将其分配为: a[k] = ...但这不起作用,因为a它是标量...

就像您尝试过的一样:

50[42] = 7

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

此外,++k没有做你认为它做的事情——它被解析为(+(+(k)))——即字节码只有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 上执行整数除法。

于 2013-02-11T03:07:14.110 回答