python - TypeError: индексы кортежа должны быть целыми числами - PullRequest
3 голосов
/ 05 марта 2012

Я не понимаю, что не так. Я выложу ту часть кода, которая уместна.

Ошибка:

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

функция:

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

инициализирующий актер:

class xy:
  def __init__(self):
    self.x = 0
    self.y = 0
actor = xy()

Инициализирующий портал:

portal = [[100,100],[200,200]],[[300,300],[200,100]]

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Когда вы сказали for i in portal, в каждой итерации вместо индексов в portal, о которых вы можете подумать, i на самом деле является элементами portal.Таким образом, оно не является целым числом и вызывает ошибку в portal[i][0].

Так что быстрое исправление просто замените его на for i in xrange(len(portal)), в котором i - это индексы.

1 голос
/ 05 марта 2012

Учитывая инициализацию portal, цикл

for i in portal:
    ...

сделает только две итерации. На первой итерации i будет [[100,100],[200,200]]. Попытка сделать portal[i] будет эквивалентна portal[[[100,100],[200,200]]], и это не имеет смысла. Вы, вероятно, просто хотите использовать i вместо portal[i]. (Вы, вероятно, хотите переименовать его в нечто более значимое, чем i.)

0 голосов
/ 05 марта 2012

В цикле for, i = ([100, 100], [200, 200]), который не является допустимым индексом для списка.

Учитывая сравнение в операторах if, ваше намерение было больше похоже на:

for coords in portal:
   if [actor.x - 16, actor.y - 16] > coords[0] and [actor.x + 16, actor.y + 16] < coords[0]:

где coords[0] == [100, 100] на первой итерации цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...