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