python - TypeError: tuple indices must be integers
Verstehe ich nicht, was falsch ist. Ich poste den Teil des Codes, relevant ist.
Fehler:
Traceback (most recent call last):
File "C:\Python\pygame\hygy.py", line 104, in <module>
check_action()
File "C:\Python\pygame\hygy.py", line 71, in check_action
check_portal()
File "C:\Python\pygame\hygy.py", line 75, in check_portal
if [actor.x - 16, actor.y - 16] > portal[i][0] and [actor.x + 16, actor.y + 16] < portal[i][0]:
TypeError: tuple indices must be integers
Funktion:
def check_portal():
for i in portal:
if [actor.x - 16, actor.y - 16] > portal[i][0] and [actor.x + 16, actor.y + 16] < portal[i][0]:
if in_portal == False:
actor.x,actor.y=portal[i][1]
in_portal = True
elif [actor.x - 16, actor.y - 16] > portal[i][1] and [actor.x + 16, actor.y + 16] < portal[i][1]:
if in_portal == False:
actor.x,actor.y=portal[i][1]
in_portal = True
else:
in_portal = False
initialisieren Schauspieler:
class xy:
def __init__(self):
self.x = 0
self.y = 0
actor = xy()
initialisieren portal:
portal = [[100,100],[200,200]],[[300,300],[200,100]]
InformationsquelleAutor kommihe | 2012-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angesichts der Initialisierung der
portal
ist, wird die Schleifenur zwei Iterationen. In der ersten iteration
i
wird[[100,100],[200,200]]
. Versuchen zu tunportal[i]
entsprichtportal[[[100,100],[200,200]]]
, und dies nicht sinnvoll. Sie wahrscheinlich nur benutzen wolleni
stattportal[i]
. (Sie werden wahrscheinlich wollen, um es umzubenennen, um etwas sinnvolles alsi
auch.)InformationsquelleAutor Sven Marnach
Wenn Sie sagte
for i in portal
in jeder iteration wird statt der Indizes inportal
die Sie sich vorstellen können,i
ist tatsächlich Elemente vonportal
. So ist es nicht integer und verursacht Fehler in derportal[i][0]
.So ein quick-fix ist nur zu ersetzen, mit
for i in xrange(len(portal))
, in deneni
ist Indizes.InformationsquelleAutor Ade YU
Innerhalb der for-Schleife
i = ([100, 100], [200, 200])
, das ist kein Gültiger index für eine Liste.Gegeben, der Vergleich in der if-Anweisungen, es sieht aus wie Ihre Absicht war mehr wie:
wo
coords[0] == [100, 100]
bei der ersten iteration der Schleife.InformationsquelleAutor Izkata