Как получить список всех допустимых ходов в модуле python -chess? - PullRequest
1 голос
/ 29 мая 2020

Я использую шахматный модуль python. На веб-сайте показано, что вы можете проверить, является ли ход законным, используя

import chess

board = chess.Board()
move = input("Enter a chess move: ")
if move in board.legal_moves:
    # Some code to do if the move is a legal move

Однако я хочу иметь возможность получить ход из board.legal_moves. Когда я пробую это:

print(board.legal_moves[0])

Это возвращает следующую ошибку:

TypeError: 'LegalMoveGenerator' object is not subscriptable

Как я могу выбрать ход, как если бы я использовал список? Тогда как мне использовать выделение как ход?

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

Объект board.legal_moves - это генератор , а точнее LegalMoveGenerator. Вы можете перебирать этот объект, и на каждой итерации он будет что-то давать. Вы можете преобразовать его в список с помощью list(board.legal_moves), а затем проиндексировать как обычно.

import chess
board = chess.Board()
legal_moves = list(board.legal_moves)
legal_moves[0]  # Move.from_uci('g1h3')
2 голосов
/ 29 мая 2020

Сгенерировать список из генератора.

legal_moves = list(board.legal_moves)

Теперь список разрешенных ходов.

print(legal_moves)

[Move.from_uci('g1h3'), Move.from_uci('g1f3'), Move.from_uci('b1c3'),
 Move.from_uci('b1a3'), Move.from_uci('h2h3'), Move.from_uci('g2g3'), 
 Move.from_uci('f2f3'), Move.from_uci('e2e3'), Move.from_uci('d2d3'), 
 Move.from_uci('c2c3'), Move.from_uci('b2b3'), Move.from_uci('a2a3'), 
 Move.from_uci('h2h4'), Move.from_uci('g2g4'), Move.from_uci('f2f4'), 
 Move.from_uci('e2e4'), Move.from_uci('d2d4'), Move.from_uci('c2c4'), 
 Move.from_uci('b2b4'), Move.from_uci('a2a4')]
...