2013-02-11 11 views
8

Perché viene visualizzato questo errore?TypeError: l'oggetto 'int' non supporta l'assegnazione dell'articolo

a[k] = q % b 
TypeError: 'int' object does not support item assignment 

Codice:

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)) 
+1

@JBernardo - sorprendentemente, '++ k' è una sintassi python valida - che è l'abbreviazione di" non eseguire nulla su k "e la restituisce per * most * objects' k' :-). 'k ++' senza nient'altro più a destra è un modo sicuro per mandare in crash e masterizzare :). – mgilson

risposta

14

Stai passando un intero alla funzione come a. Quindi si tenta di assegnare ad esso come: a[k] = ... ma che non funziona in quanto a è uno scalare ...

E 'la stessa cosa come se si fosse provato:

50[42] = 7 

Tale affermazione non lo fa ha molto senso e python ti urlerebbe contro allo stesso modo (presumibilmente).

Inoltre, ++k non sta facendo quello che pensi lo fa - è analizzato come (+(+(k))) - vale a dire il bytcode è solo UNARY_POSITIVE due volte. Che cosa si vuole realmente è qualcosa di simile k += 1

Infine, fare attenzione con affermazioni del tipo:

q = q/b 

La parentesi si usa con la stampa implicano che si desidera utilizzare questo su python3.x ad un certo punto. ma, x/y si comporta in modo diverso su python3.x rispetto a python2.x. Osservando l'algoritmo, suppongo che tu voglia la divisione intera (dato che controlli q != 0 che sarebbe difficile da soddisfare con i float). Se questo è il caso, si dovrebbe considerare l'utilizzo di:

q = q // b 

che svolge divisione intera sia python2.X e python3.x.

+3

Vale la pena affermare esplicitamente che ++ e - non esistono in Python. – BlackVegetable

+1

@BlackVegetable - All'inizio pensavo che '++ k' sarebbe un 'SyntaxError', ma non lo è. (Dovevo guardare il bytecode per capire cosa stava facendo ... 'k ++' sarebbe un 'SyntaxError' però). – mgilson

+0

@mgilson bene, è più o meno ovvio modo di analizzare '++ k' in un linguaggio che ha l'unario' + 'ma non il' ++ ':) – wRAR

Problemi correlati