Получить элемент в списке списка для сравнения со значением при итерации обоих списков Python - PullRequest
0 голосов
/ 08 октября 2018

Я сейчас пытаюсь реализовать вопросы, аналогичные Connect-4, поэтому я хочу выяснить, есть ли такие же "X" s или "O" s по вертикали, горизонтали или диагонали.Я превратил начальную игровую доску в несколько вложенных списков в списке.например:

[['.', '.', '.', '.', '.'], ['.', '.', '.', 'O', '.'], ['.', '.', '.', 'X', '.'], ['X', 'X', 'X', 'O', 'X']]

'.' обозначает пустое пространство, а 'X' и 'O' обозначает каждый ход игрока.Скажем, я хочу проверить, было ли 3 (я использую connect-3) одинаковых "X" s или "O" s по диагонали.Но мне нужно проверить каждый вложенный список и элементы на определенной позиции в каждом вложенном списке.У меня что-то вроде этого:

#check positive-dia
for row in board:
    for col in board[row]:
        if(board[row][col] == "X" and board[row-1][col+1] == "X" and board[row-2][col+2] == "X"):
            print("X wins!")
        elif(board[row][col] == "O" and board[row-1][col+1] == "O" and board[row-2][col+2] == "O"):
            print("O wins!")

Но я получил ошибку: TypeError: list indices must be integers or slices, not list.Я попытался использовать подсписок, но мне нужно проверить каждую строку, чтобы подсписок не работал.Я не знаю, что делать сейчас.Любые советы будут оценены!

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Я не могу быть уверен, не увидев полную трассировку стека и / или полный пример кода , но это, вероятно, потому, что вы используете элемент списка в качестве индекса в списке.Например, при первом проходе через внешний цикл (for row in board:) row соответствует списку ['.', '.', '.', '.', '.'].Затем у вас есть выражение board[row], которое пытается найти ['.', '.', '.', '.', '.']-й элемент board.Естественно, Python жалуется на это, потому что имеет смысл только найти 0-й или 1-й или 2-й (или т. Д.) Элемент списка.

Вероятно, лучший способ продолжить вместо этого - использовать целочисленный индекс,что вы получите, сделав свой цикл следующим образом:

for row_index in range(len(board)):
    # do something with board[row_index]

Существуют другие способы решения проблемы, в которых вам не нужно использовать целочисленный индекс, но они, вероятно, немного сложнее длятакая простая задача.

0 голосов
/ 08 октября 2018

Переменные row и col назначаются циклом for со значениями элементов в списках, а не индексами списков.Вместо этого вы должны использовать генератор range, если хотите сделать индексы row и col:

for row in range(len(board)):
    for col in range(len(board[row])):
        if(board[row][col] == "X" and board[row-1][col+1] == "X" and board[row-2][col+2] == "X"):
            print("X wins!")
        elif(board[row][col] == "O" and board[row-1][col+1] == "O" and board[row-2][col+2] == "O"):
            print("O wins!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...