On 15 Sep 2006 19:17:25 -0700,
gr*@ll.mit.edu <gr*@ll.mit.eduwrote:
I want a function (or callable something) that returns a random
word meeting a criterion. I can do it like:
def random_richer_word(word):
'''find a word having a superset of the letters of "word"'''
if len(set(word) == 26): raise WordTooRichException, word
while True:
w = random.choice(words)
if set(w) - set(word): # w has letters not present in word
return w
This seems like a perfect application for generators or iterators,
but I can't quite see how. Any suggestions?
Simply change the return to yield. The function will return a
generator which will iterate over each new word found. I would fix it
up a bit more than that, however. For example, create the set for
word's letters before the loop, and keep a set of previously yielded
words, so you dont use the same one twice.
Alternatively, maybe you meant that you still want to get a single
word, but you want to iterate until its done, so its non-blocking in
nature. In that case, you might still yield, but add an else block to
yield None, and keep iterating until it yields something evaluating
true. In either case I would be pre-computing that set of subset
letters.