First attempt at a Python prog (Chess)

Oscar Benjamin oscar.j.benjamin at
Fri Feb 15 14:11:50 CET 2013

On 15 February 2013 11:36, Tim Golden <mail at> wrote:
> On 15/02/2013 11:22, Oscar Benjamin wrote:
>> Why not make board a list of lists. Then you can do:
>> for row in board:
>>     for piece in row:
>> rather than using range().
>> Or perhaps you could have a dict that maps position tuples to pieces,
>> e.g.: {(1, 2): 'k', ...}
> I'm laughing slightly here because, at the monthly London Python
> Dojo, we often find ourselves implementing board-game mechanics
> of one sort or another: Boggle, Battleships, Sliding block,
> Connect 4, Noughts-and-Crosses, even things like Game of Life
> (which has a board of sorts).
> And the "how shall we represent the board?" question is pretty
> much the first thing any team asks themselves. And you always
> get someone in favour of lists of lists, someone for one long
> list,

I always get confused when doing this about which of my coordinates
needs to be multiplied (i.e. whether I am in Fortran or C order).

> someone who likes a string, someone (me) who likes a sparse
> dict keyed on coords,

Clearly better than the others.

> someone else likes nested defaultdicts,
> and occasionally more outlandish schemes.
> We even went to the extent of having a Dojo a few months back
> which was solely about implementing the ideal board for varying
> characteristics, but we didn't come to any conclusions :)

In this case the innermost loop of the program is over the pieces on
the board. Clearly you want a data structure that allows you to
iterate directly over them. (Actually since that loop is to calculate
the score I would replace it with a function that computes the change
in score as a result of each move).

> (Also I seem to remember that the OP was advised earlier precisely
> to abandon lists of lists in favour of something else).

Actually the suggestion was for the list of lists (instead of a flat list).


More information about the Python-list mailing list