类型错误:'int'对象不支持项赋值
我为什么会遇到这个错误呢?
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 个回答
27
你把一个整数传给了你的函数,命名为 a
。然后你试着用 a[k] = ...
来给它赋值,但这样不行,因为 a
只是一个单一的数字。
这就像你试着做:
50[42] = 7
这个说法没什么意义,Python 会像这样对你大喊(大概是这样)。
还有,++k
其实不是你想的那样,它被解析成 (+(+(k)))
,也就是说,字节码只是执行了 UNARY_POSITIVE
两次。你真正想要的是像 k += 1
这样的写法。
最后,要小心像这样的语句:
q = q / b
你在 print 里用的括号,说明你想在某个时候使用 Python 3.x。但是,x/y
在 Python 3.x 和 Python 2.x 中的表现是不同的。看你的算法,我猜你想要的是 整数除法(因为你检查 q != 0
,用浮点数很难满足这个条件)。如果是这样,你应该考虑使用:
q = q // b
这样在 Python 2.x 和 Python 3.x 中都能进行整数除法。