Why do I get this error?
a[k] = q % b
TypeError: 'int' object does not support item assignment
Code:
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))
The Python "TypeError: 'int' object does not support item assignment" occurs when we try to assign a value to an integer using square brackets. To solve the error, correct the assignment or the accessor, as we can't mutate an integer value.
The Python "TypeError: 'type' object does not support item assignment" occurs when we assign a data type to a variable and use square brackets to change an index or a key. To solve the error, set the variable to a mutable container object, e.g. my_list = [] .
The Python "TypeError: 'tuple' object does not support item assignment" occurs when we try to change the value of an item in a tuple. To solve the error, convert the tuple to a list, change the item at the specific index and convert the list back to a tuple.
The error is happening because somewhere in that method, it is probably trying to iterate over that input, or index directly into it. Possibly like this: some_id[0] By making it a list (or iterable), you allow it to index into the first element like that.
You're passing an integer to your function as a
. You then try to assign to it as: a[k] = ...
but that doesn't work since a
is a scalar...
It's the same thing as if you had tried:
50[42] = 7
That statement doesn't make much sense and python would yell at you the same way (presumably).
Also, ++k
isn't doing what you think it does -- it's parsed as (+(+(k)))
-- i.e. the bytcode is just UNARY_POSITIVE
twice. What you actually want is something like k += 1
Finally, be careful with statements like:
q = q / b
The parenthesis you use with print imply that you want to use this on python3.x at some point. but, x/y
behaves differently on python3.x than it does on python2.x. Looking at the algorithm, I'm guessing you want integer division (since you check q != 0
which would be hard to satisfy with floats). If that's the case, you should consider using:
q = q // b
which performs integer division on both python2.x and python3.x.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With