def get_cardinal_name(num): """Get cardinal name for number (0 to 1 million)""" numbers = { 0: "zero", 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: "forty", 50: "fifty", 60: "sixty", 70: "seventy", 80: "eighty", 90: "ninety", } def _get_tens(n): a, b = divmod(n, 10) return (numbers[n] if (n in numbers) else "%s-%s" % (numbers[10*a], numbers[b])) def _get_hundreds(n): tens = n % 100 hundreds = (n / 100) % 10 return list(compact([ hundreds > 0 and numbers[hundreds], hundreds > 0 and "hundred", hundreds > 0 and tens and "and", (not hundreds or tens > 0) and _get_tens(tens), ])) # This needs some refactoring if not (0 <= num < 1e6): raise ValueError, "value not supported: %s" % num thousands = (num / 1000) % 1000 strings = compact([ thousands and (_get_hundreds(thousands) + ["thousand"]), (num % 1000 or not thousands) and _get_hundreds(num % 1000), ]) return " ".join(flatten(strings))
def _get_hundreds(n): tens = n % 100 hundreds = (n / 100) % 10 return list(compact([ hundreds > 0 and numbers[hundreds], hundreds > 0 and "hundred", hundreds > 0 and tens and "and", (not hundreds or tens > 0) and _get_tens(tens), ]))