web-dev-qa-db-fra.com

TypeError: l'objet 'int' ne prend pas en charge l'attribution d'élément

Pourquoi ai-je cette erreur?

    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))
12
Ris

Vous passez un entier à votre fonction sous la forme a. Vous essayez ensuite de lui attribuer: a[k] = ... mais cela ne fonctionne pas puisque a est un scalaire ...

C'est la même chose que si vous aviez essayé:

50[42] = 7

Cette déclaration n'a pas beaucoup de sens et python vous crierait de la même manière (probablement).

Aussi, ++k ne fait pas ce que vous pensez qu'il fait - il est analysé comme (+(+(k))) - c'est-à-dire que le bytcode est juste UNARY_POSITIVE deux fois. Ce que vous voulez vraiment, c'est quelque chose comme k += 1

Enfin, soyez prudent avec des déclarations comme:

q = q / b

Les parenthèses que vous utilisez avec print impliquent que vous souhaitiez utiliser ceci sur python3.x à un moment donné. mais, x/y se comporte différemment sur python3.x que sur python2.x. En regardant l'algorithme, je suppose que vous voulez division entière (puisque vous cochez q != 0 qui serait difficile à satisfaire avec des flotteurs). Si tel est le cas, vous devriez envisager d'utiliser:

q = q // b

qui effectue une division entière sur python2.x et python3.x.

21
mgilson