how to make a generator use the last yielded value when it regains control
Azolex
cretin at des.alpes.ch
Fri Apr 7 04:52:42 EDT 2006
just couldn't help taking the bait...
def morris(seed) :
"""
>>> m = morris('3447221')
>>> m.next()
'1324172211'
>>> m.next()
'1113121411172221'
>>> m.next()
'31131112111431173211'
"""
assert isinstance(seed,basestring) and seed.isdigit(),"bad seed"
def itially(z) :
feedback.z = z
while True :
yield feedback.z
def feedback(gen) :
while True :
feedback.z = gen.next()
yield feedback.z
def morrisify(number) :
from itertools import groupby
for digit,sequence in groupby(number) :
yield str(len(tuple(sequence)))
yield digit
return feedback(''.join(morrisify(number))
for number in itially(seed))
More information about the Python-list
mailing list