Search code examples
pythonnumbersshort

Short Form Number into Words Python


Looking for help in changing a number input and converting it to a short form word:

for instance 4,000,000,000 -> 4 Trillion, 
ones = ["", "one ","two ","three ","four ", "five ", "six ","seven ","eight ","nine "]
tens = ["ten ","eleven ","twelve ","thirteen ", "fourteen ", "fifteen ","sixteen ","seventeen ","eighteen ","nineteen "]
twenties = ["","","twenty ","thirty ","forty ", "fifty ","sixty ","seventy ","eighty ","ninety "]
thousands = ["","thousand ","million ", "billion ", "trillion ", "quadrillion ", "quintillion ", "sextillion ", "septillion ","octillion ", "nonillion ", "decillion ", "undecillion ", "duodecillion ", "tredecillion ", "quattuordecillion ", "quindecillion", "sexdecillion ", "septendecillion ",  "octodecillion ", "novemdecillion ", "vigintillion "]

def wordNumber(number):
    number = int(number)  

number = str(input("Enter the digits: "))    
print(wordNumber(number))

I am completely stumped on where to go next and I've looked at a lot of programs online that do the exact thing with full numbers (10)--> ten.


Solution

  • If you need to do this manually, here is a partial example of one way to go about it.

    def f(number):
        ones    =   [
                        "",
                        "one",
                        "two",
                        "three",
                        "four",
                        "five",
                        "six",
                        "seven",
                        "eight",
                        "nine",
                    ]
        teens   =   {
                        10:"ten",
                        11:"eleven",
                        12:"twelve",
                        13:"thirteen",
                        14:"fourteen",
                        15:"fifteen",
                        16:"sixteen",
                        17:"seventeen",
                        18:"eighteen",
                        19:"nineteen",
                    }
        tens    =   [
                        "",
                        "teen",
                        "twenty",
                        "thirty",
                        "fourty",
                        "fifty",
                        "sizty",
                        "seventy",
                        "eighty",
                        "ninety",
                    ]
        hundred =   [ "%shundred" % one for one in ones ]
        place_value   = {1:ones,2:tens,3:hundred}
        number_string = ""
        number        = list(str(number))
        number.reverse()
        number        = [(place+1, int(digit)) for place, digit in enumerate(number)]
        number.reverse()
        number_iter = number.__iter__()
        for place, digit in number_iter:
            print place, digit
            if place == 2 and digit == 1:
                place, digit = number_iter.next()
                number_string += teens[10 + digit]
            else:
                number_string += place_value[place][digit]
            print number_string