如何获取python-chess模块​​中所有合法动作的列表?

Jus*_*eng 3 python list python-3.x python-chess

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够从board.legal_moves. 当我尝试这个时:

print(board.legal_moves[0])
Run Code Online (Sandbox Code Playgroud)

这将返回以下错误:

TypeError: 'LegalMoveGenerator' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

如何像使用列表一样选择移动?那么,我将如何使用选择作为移动?

Dar*_*ylG 9

从生成器生成一个列表。

legal_moves = list(board.legal_moves)
Run Code Online (Sandbox Code Playgroud)

合法的举动现在是一个清单。

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')]
Run Code Online (Sandbox Code Playgroud)


Jak*_*kub 6

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')
Run Code Online (Sandbox Code Playgroud)