map = { 0: '', 1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine", 10: "ten", 11: "eleven", 12: "twelve", 13: "thirteen", 14: "fourteen", 15: "fifteen", 16: "sixteen", 17: "seventeen", 18: "eighteen", 19: "nineteen", 20: "twenty", 30: "thirty", 40: "fourty", 50: "fifty", 60: "sixty", 70: "seventy", 80: "eighty", 90: "ninety", 100: "hundred", 1000: "thousand", } def cons(lst): if len(lst) > 0: return lst[0], lst[1:] return None, [] def n2list(n): return [ int(i) for i in str(n) ] def list2n(lst): return int(''.join(lst)) def get_num(n): if n in map: return map[n] else: list = n2list(n) head, tail = cons(list) units = (len(list)-1)**10 ones = head / units return map[ones] + map[units] + get_num(list2n(tail)) def getTens(n): if 10 < n < 20: # teens return map[n] else: tens = n / 10 ones = n % 10 return map[tens*10] + map[ones] def getHundreds(n): for hundreds in range(10): for tens in range(100): print map[hundreds*1] + map[100] + getTens(tens) print getHundreds(345)