Good Python generators example?
no_replies at fake_email_address.invalid
Mon Apr 21 00:16:35 CEST 2003
"Andrew Koenig" <ark at research.att.com> wrote in message
news:yu99y9243nn1.fsf at europa.research.att.com...
> Robert> Can someone point me to a nice concise Python 2.2 compatible
> Robert> example of the use of generators?
> Here's a program that solves the "8 queens" problem--that is, the
> problem of how to place 8 queens on a chessboard so that none of
> them attacks any of the others. It prints all the solutions.
> from __future__ import generators
> class Queens(object):
> def __init__(self, n):
> assert n >= 0
> self.N = n
> self.board = 
> def generate(self):
> if len(self.board) == self.N:
> yield self.board[:]
> for i in range(self.N):
> if self.safe(i):
> for i in self.generate():
> yield i
> def safe(self, n):
> "Is is safe to append a queen to the board in row n?"
> m = len(self.board)
> for i in range(m):
> b = self.board[i]
> if n == b or b+(m-i) == n or b-(m-i) == n:
> return False
> return True
> for i in Queens(8).generate():
> print i
> Andrew Koenig, ark at research.att.com, http://www.research.att.com/info/ark
Thanks! Interesting choice of examples, last time I solved that problem was
with Prolog. With a stack of Python generators you can pretty well emulate
Prolog backtracking, except for the automatic unbinding of variables.
Android Technologies, Inc.
The home of PowerSell! (tm)
The FrontPage AddIn for Amazon Associates
- "Power Tools for Amazon Associates" (sm)
More information about the Python-list