def numify(number, singular=None, plural=None): """Turn a number into a word if less than 13 and optionally add a singular or plural word >>> numify(3) 'three' >>> numify(1, 'item', 'items') 'one item' >>> numify(9, 'book', 'books') 'nine books' You can add capitalize to change the capitalization >>> numify(9, 'book', 'books').capitalize() 'Nine books' Or capitalize every word using title >>> numify(9, 'book', 'books').title() 'Nine Books' >>> numify(15) '15' >>> numify(0) '0' >>> numify(12334, 'hippopotamus', 'hippopotami') '12,334 hippopotami' """ num_repr = {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"} if number == 1: word = singular else: word = plural if number in num_repr: number = num_repr[number] elif number > 9999: number = commify(number) if word: return "%s %s" % (number, word) else: return str(number) def commify(n): """Add commas to an integer n. See http://stackoverflow.com/questions/3909457/whats-the-easiest-way-to-add-commas-to-an-integer-in-python But I (Sam) made some small changes based on http://www.grammarbook.com/numbers/numbers.asp >>> commify(1) '1' >>> commify(123) '123' >>> commify(1234) '1234' >>> commify(12345) '12,345' >>> commify(1234567890) '1,234,567,890' >>> commify(123.0) '123.0' >>> commify(1234.5) '1234.5' >>> commify(1234.56789) '1234.56789' >>> commify(123456.789) '123,456.789' >>> commify('%.2f' % 1234.5) '1234.50' >>> commify(None) >>> """ if n is None: return None n = str(n) if len(n) <= 4: # Might as well do this early return n if '.' in n: dollars, cents = n.split('.') else: dollars, cents = n, None # Don't commify numbers less than 10000 if len(dollars) <= 4: return n r = [] for i, c in enumerate(reversed(str(dollars))): if i and (not (i % 3)): r.insert(0, ',') r.insert(0, c) out = ''.join(r) if cents: out += '.' + cents return out if __name__ == '__main__': import doctest doctest.testmod()