Python Настольная игра - «Ошибка типа: индексы списка должны быть целыми числами или кусочками, а не кортежем» - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь создать ИИ для игры в Connect 4 в Python. Игра создает текстовую версию доски, которая используется для расчетов AI и игровыми функциями.

Реализуя более продвинутый ИИ, я пытаюсь создать массив строк из текстовой доски следующим образом:

def scorePosition(boardLog, player):
    score = 0
    ## Score Horizontal
    for r in range(boardHeight):
        rowArray = [int(i) for i in list(boardLog[r,:])]
        for c in range(boardWidth - 3):
            window = rowArray[c:c+4]

            if window.count(player[1]) == 4:
                score += 100
            elif window.count(player[1]) == 3 and window.count(0) == 1:
                score += 10
    return score 

Но строка rowArray = [int (i ) для i в списке (boardLog [r,:])] возвращает ошибку: TypeError: индексы списка должны быть целыми или кусочками, а не кортежем

создан ресурс boardLog следующим образом:

boardWidth=7
boardHeight=6
boardLog = [boardWidth*[0] for x in range(boardHeight)]

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

Есть идеи? Это сводит меня с ума!

спасибо :)

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вы должны использовать массивы numpy вместо списков basi c Python.
С помощью numpy создание массива mxn , инициализированного нулями, можно сделать с помощью numpy .zeros :

boardWidth=7
boardHeight=6
boardLog = np.zeros((boardWidth, boardHeight))

Обратите внимание, что аргумент является кортежем, а не двумя отдельными значениями.
С этого момента, поскольку boardLog теперь является numpy массивом, вы можете используйте необычное индексирование для доступа к строкам:

for r in range(boardHeight):
    rowArray = boardLog[r, :]

Или вы можете просто сделать следующее:

for rowArray in boardLog:
    # rest of code here
0 голосов
/ 08 января 2020

Вы не можете получить доступ к элементу списка с этим синтаксисом.

Вот 2 решения, которые вы можете использовать:

  • Если вы хотите использовать список, получите к нему доступ с rowArray = [int(i) for i in list(boardLog)[r]]
  • Если вы не хотите использовать массив numpy, получите к нему доступ с помощью rowArray = [int(i) for i in np.array(boardLog)[r,:]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...