Ошибка: TypeError: индексы списка должны быть целыми числами или слайсами, а не кортеж продолжает отображаться - PullRequest
0 голосов
/ 21 апреля 2020

поэтому я пишу метод, который покажет мне ближайшего врага.

ef nearestEnemy(player, *args):
    nearest = 0
    list = [args]
    print(list)
    for x in list:
        if player.getDistancetoEnemy(list[x]) > nearest:
            nearest = list[x]

Он продолжает выдавать мне ошибку:

def nearEnemy (player, * аргументы): ближайший = 0 список = [аргументы] печать (список) для х в списке: если player.getDistancetoEnemy (список [х])> ближайший: ближайший = список [х]

Это мой главный:

def main():
    dragon1 = dragon()
    dragon2 = dragon()
    player1 = player()
    player1.setPosition(100, 100)
    dragon1.setPosition(200, 200)
    dragon2.setPosition(150, 150)
    nearestEnemy(player1, dragon1, dragon2)

Это метод, который дает мне расстояние до врага:

    def getDistancetoEnemy(self, enemy):
        return math.sqrt(pow(enemy.getPosition()[0] - self.x, 2) + pow(enemy.getPosition()[1] - self.y, 2))

Спасибо за всю вашу помощь и чудесного вечера.

1 Ответ

1 голос
/ 21 апреля 2020

Когда используется «* args», переменная args представляет собой tuple. Следовательно, list = [args] станет -> list = [(player1, dragon1, dragon2)]

Так что for l oop используется для получения отдельных элементов из кортежа:

list = []
for arg in args:
    list.append(arg)

В этом строка:

for x in list:

переменная x представляет собой tuple. Следовательно, list[x] терпит неудачу, и вы должны использовать индексы для поиска вместо фактического элемента (x) в списке.

Либо используйте x напрямую вместо list[x], либо измените на l oop условие:

for i in range(len(list)) 

и затем используйте list[i]

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