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