help with generators

Mayer gmayer at cs.bgu.ac.il
Thu May 19 10:04:37 EDT 2005


Thanks a lot! This clarified [I think] my misunderstanding about yield,
and I also learned something about efficiency from George's code --
Thanks.

So, The function tel(aString) takes a string (or a number) that denote
a phone number, using digits or letters, and returns a generator for
the set of all possible words that are made up of that phone number.
It's not a terribly useful program, but it's short and it's a lot of
fun.

Mayer

import string

def addKeyString(keyString):
    for ch in keyString:
        keypad[ch] = keyString

keypad = {}
addKeyString('0')
addKeyString('1')
addKeyString('2ABC')
addKeyString('3DEF')
addKeyString('4GHI')
addKeyString('5JKL')
addKeyString('6MNO')
addKeyString('7PQRS')
addKeyString('8TUV')
addKeyString('9WXYZ')

def tel(phone):
phoneString = str(phone)
    length = len(phoneString)
    buffer = [Null] * length
    def run(n):
        if n == length:
            yield string.join(buffer, '')
        else:
            for word in run(n + 1):
                for letter in keypad[phoneString[n]]:
                    buffer[n] = letter
                    yield buffer
    return run(0, '')




More information about the Python-list mailing list