Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: 'int' object does not support item assignment

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))
like image 682
Ris Avatar asked Feb 11 '13 03:02

Ris


People also ask

How do I fix TypeError int object does not support item assignment?

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.

Does not support item assignment in Python?

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 = [] .

How do you fix TypeError tuple object does not support item assignment?

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.

What does int does not support indexing mean?

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.


1 Answers

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.

like image 199
mgilson Avatar answered Sep 19 '22 16:09

mgilson