How to convert an integer into its written‑out English words in Python

1 Answer

0 votes
below20 = [
    "", "one", "two", "three", "four", "five", "six", "seven",
    "eight", "nine", "ten", "eleven", "twelve", "thirteen",
    "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
    "nineteen"
]

tens = [
    "", "", "twenty", "thirty", "forty", "fifty",
    "sixty", "seventy", "eighty", "ninety"
]

def set_below20_and_tens(num):
    if num == 0:
        return ""
    elif num < 20:
        return below20[num] + " "
    elif num < 100:
        return tens[num // 10] + " " + set_below20_and_tens(num % 10)
    else:
        return below20[num // 100] + " hundred " + set_below20_and_tens(num % 100)

def number_to_words(num):
    if num == 0:
        return "zero"

    result = ""

    if num >= 1_000_000_000:
        result += set_below20_and_tens(num // 1_000_000_000) + "billion "
        num %= 1_000_000_000
    if num >= 1_000_000:
        result += set_below20_and_tens(num // 1_000_000) + "million "
        num %= 1_000_000
    if num >= 1000:
        result += set_below20_and_tens(num // 1000) + "thousand "
        num %= 1000
    if num > 0:
        result += set_below20_and_tens(num)

    return result.rstrip()

n = 176283

print(number_to_words(n))



'''
run:

one hundred seventy six thousand two hundred eighty three

'''

 



answered May 5 by avibootz
...