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))
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.