2013-10-12 3 views
5

Il seguente frammento di codice da questo tutorial: http://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-pythonCome riparare un: TypeError oggetto 'tupla' non supporta l'assegnazione voce

for badguy in badguys: 
     if badguy[0]<-64: 
      badguys.pop(index) 
     badguy[0]-=7 
     index+=1 
    for badguy in badguys: 
     screen.blit(badguyimg, badguy) 

mi sta dando una:

TypeError: 'tuple' object does not support item assignment

Capisco che questo potrebbe essere perché badguy è una tupla. Ciò significa che è immutabile (non è possibile modificare i valori) Ive ha provato la seguente:

t= list(badguy) 
     t[0]= t[0]-7 
     i+=1 

ho convertito la tupla a un elenco in modo che possiamo meno 7. Ma nel gioco non succede nulla.

Qualcuno sa cosa potrei fare?

Grazie.

risposta

17

Modificare questa

badguy[0]-=7 

in questo

badguy = list(badguy) 
badguy[0]-=7 
badguy = tuple(badguy) 

In alternativa, se è possibile lasciare badguy come list, quindi non hanno nemmeno usare tuple e sarete bene con il codice corrente (con la modifica aggiunta dell'uso di elenchi anziché di tuple)

+0

Impossibile ottenere alcun movimento nel mio gioco, con quelle modifiche –

+0

@ Pro grammatic: Quindi, avete altri problemi. La soluzione che ho proposto si prende cura del tuo problema 'tuple'. Se hai un problema diverso, ti suggerisco di creare un altro post – inspectorG4dget

+0

ok, grazie per il tuo aiuto finora :-) –

1

Un'altra soluzione è invece di

badguy[0] -= 7 

da fare

badguy = (badguy[0] - 7,) + badguy[1:] 

questo modo si crea una nuova tupla del tutto con il valore aggiornato nell'elemento zeroth.