Search code examples
pythonpython-3.xlistpython-chess

How to get a list of all the legal moves in the python-chess module?


I am using the python chess module. On the website, it shows that you can check if a move is legal by using

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

However, I want to be able to get a move from board.legal_moves. When I try this:

print(board.legal_moves[0])

This returns the following error:

TypeError: 'LegalMoveGenerator' object is not subscriptable

How can I select a move as if I were using a list? Then, how would I use the selection as a move?


Solution

  • Generate a list from the generator.

    legal_moves = list(board.legal_moves)
    

    Legal moves is now a list.

    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')]