problemset_numberwords/planning.md

3.2 KiB

Planning Number Words

Before you start programming, do some planning here on how you will break down this problem. Here's a hint: if you start by writing functions for smaller numbers, you will find that these functions help you with the larger numbers. For each of the cases below, explain how you would turn a number into a string. Feel free to write in sentences or in pseudocode (pseudocode is a sort of "casual programming" where you're almost writing in code, being pretty specific without worrying about syntax. For each case below, assume the integer is zero or more--don't worry about negative integers.

Integers under 10

(This one is done for you!) For an integer less than ten, you need to know the name of each digit, and look it up. You could use a big if/else statement like:

if number == 0:
    return "zero"
elif number == 1:
    return "one"
elif number == 1:
    return "two"

A cleaner way to do this would be to make a list of digit names, from zero to nine. Then you could just look up a digit's name:

digit_names = [
    "zero", "one", "two", "three", "four", 
    "five", "six", "seven", "eight", "nine"
]
return digit_names[number]

Integers under 20

If the integer is under 10, then use the procedure described above. Otherwise, ... (this is where you take over!)

We can again make a list of digit names:

digit_names = [ 
    "zero", "one", "two", "three", "four", 
    "five", "six", "seven", "eight", "nine",
    "ten", "eleven", "twelve", "thirteen",
    "fourteen", "fifteen", "sixteen",
    "seventeen", "eighteen", "nineteen"
]
return digit_names[number]

Integers under 100

If the integer is under 20, then use the procedure described above. Otherwise,

First, create a list of tens digit strings:

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

Second, determine the leading digit, using integer division by 10, and the ones digit using mod 10 and look up the correct names. return tens_names[number / 10 - 2] + digit_names[number % 10]

Integers under 1000

If the integer is under 100, then use the procedure described above. We'll call that procedure tens_number(). Otherwise,

First, create a list of hundreds digit srings:

hundreds_names = [
    "one hundred", "two hundred", "three hundred",
    "four hundred", "five hundred", "six hundred",
    "seven hundred", "eight hundred", "nine hundred"
]

Second determine the hundreds digit using integer division by one hundred, the tens digit by finding the number mod 100 and applying tens_number(), and the ones digit by finding the number mod 10. return hundreds_name[number / 100] + tens_number(number % 100) + digit_names[number % 10]

Integers under 1000000

If the integer is under 1000, then use the procedure described above. We'll call that procedure hundreds_name().

return hundreds_name(number / 1000) + "thousand" + hundreds_name(number % 1000)

Negative integers down to -1 million

We won't deal with negative integers in this problem set, but how would you deal with a negative integer, using the functions above?

If the number is positive, use the above method. Otherwise, return "negative " + number_words(-1 * number)