Create the English word for a number I cobbled together a function from various sources that takes an integer and returns it as its respective English word formatted as a string. The function is as follows:

def int2word(num, separator="-"):
    """Transforms integers =&lt; 999 into English words

    Parameters
    ----------
    num : int
    separator : str

    Returns
    -------
    words : str
    """
    ones_and_teens = {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'}
    twenty2ninety = {2: 'Twenty', 3: 'Thirty', 4: 'Forty', 5: 'Fifty',
                     6: 'Sixty', 7: 'Seventy', 8: 'Eighty', 9: 'Ninety', 0: ""}

    if 0 &lt;= num &lt; 19:
        return ones_and_teens[num]
    elif 20 &lt;= num &lt;= 99:
        tens, below_ten = divmod(num, 10)
        if below_ten &gt; 0:
            words = twenty2ninety[tens] + separator + \
                ones_and_teens[below_ten].lower()
        else:
            words = twenty2ninety[tens]
        return words

    elif 100 &lt;= num &lt;= 999:
        hundreds, below_hundred = divmod(num, 100)
        tens, below_ten = divmod(below_hundred, 10)
        if below_hundred == 0:
            words = ones_and_teens[hundreds] + separator + "hundred"
        elif below_ten == 0:
            words = ones_and_teens[hundreds] + separator + \
                "hundred" + separator + twenty2ninety[tens].lower()
        else:
            if tens &gt; 0:
                words = ones_and_teens[hundreds] + separator + "hundred" + separator + twenty2ninety[
                    tens].lower() + separator + ones_and_teens[below_ten].lower()
            else:
                words = ones_and_teens[
                    hundreds] + separator + "hundred" + separator + ones_and_teens[below_ten].lower()
        return words

    else:
        print("num out of range")
There's an easier way.
We have the num2words module which can be easily installed via pip:
pip install num2words

The advantage of this module is that it supports multiple languages:


en (English, default)
fr (French)
de (German)
es (Spanish)
lt (Lithuanian)
lv (Latvian)
en_GB (British English)
en_IN (Indian English)
no (Norwegian)
pl (Polish)
ru (Russian)
dk (Danish)
pt_BR (Brazilian Portuguese)


More, you can even generate ordinal numbers like forty-second.
A small python example for converting numbers to words using num2words looks like this:
&gt;&gt;&gt; from num2words import num2words
&gt;&gt;&gt; num2words(42)
forty-two
&gt;&gt;&gt; num2words(42, ordinal=True)
forty-second

You can read more about what you can do using this module here

NOTE: In case somebody is wondering why this is not a code review (such as comments on the posted code), is because in the unedited question the author specifically asked if there is already a library for this.