diff --git a/numberwords.py b/numberwords.py index 0411373..8d856b0 100644 --- a/numberwords.py +++ b/numberwords.py @@ -11,43 +11,47 @@ TWEEN_AND_TEEN_NAMES = [ "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" ] TENS_NAMES = [ - "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" + "", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" ] def int_under_1000000_to_str(number): - "Returns a textual representation of the number." - check_number_in_range(abs(number), 0, MAXIMUM) if number < 1000: return int_under_1000_to_str(number) else: - thousands, hundreds = divide_with_remainder(number, 1000) - thousands_text = int_under_1000_to_str(thousands) - hundreds_text = int_under_1000_to_str(hundreds) - return thousands_text + " thousand " + hundreds_text + thousands, hundreds_tens_ones = divide_with_remainder(number, 1000) + if hundreds_tens_ones == 0: + return int_under_1000_to_str(thousands) + " thousand" + else: + return int_under_1000_to_str(thousands) + " thousand " + int_under_1000_to_str(hundreds_tens_ones) def int_under_1000_to_str(number): - "Returns a textual representation of the number" - check_number_in_range(number, 0, 1000) if number < 100: return int_under_100_to_str(number) else: - hundreds, tens = divide_with_remainder(number, 100) - hundreds_text = int_under_10_to_str(hundreds) - tens_text = int_under_100_to_str(tens) - return hundreds_text + " hundred and " + tens_text + hundreds, tens_and_ones = divide_with_remainder(number, 100) + if tens_and_ones == 0: + return int_under_10_to_str(hundreds) + " hundred" + else: + return int_under_10_to_str(hundreds) + " hundred and " + int_under_100_to_str(tens_and_ones) + def int_under_100_to_str(number): - check_number_in_range(number, 0, 100) - tens, ones = divide_with_remainder(number, 10) - if tens == 0: - return int_under_10_to_str(number) - elif tens == 1: - return TWEEN_AND_TEEN_NAMES[ones] + if number < 20: + return int_under_20_to_str(number) else: - return TENS_NAMES[tens] + '-' + int_under_10_to_str(ones) + tens, ones = divide_with_remainder(number, 10) + if ones == 0: + return TENS_NAMES[tens] + else: + return TENS_NAMES[tens] + "-" + int_under_10_to_str(ones) + +def int_under_20_to_str(number): + if number < 10: + return int_under_10_to_str(number) + else: + return TWEEN_AND_TEEN_NAMES[number-10] def int_under_10_to_str(number): - check_number_in_range(number, 0, 10) return DIGIT_NAMES[number] def check_number_in_range(number, minimum, maximum): diff --git a/planning.md b/planning.md index 40d428a..b80ac19 100644 --- a/planning.md +++ b/planning.md @@ -35,21 +35,22 @@ 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!) +If integer < 10, then return digit_names[number] +Else return digit_names between 10 and 19 ## Integers under 100 - +If integer < 20, return "Integers under 20" +Else return integer between 20 and 99 with proper "and" ## Integers under 1000 - +If integer < 100, return "Integers under 100" +Else return integer between 100 and 999 with proper "and" ## Integers under 1000000 - +If integer < 1000, return "Integers under 1000" +Else return integer between 1000 and 999999 with proper "and" ## 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? +Use the above integers but add a negative symbol to all integers and reverse less than to greater than diff --git a/test_numberwords.py b/test_numberwords.py index e40f218..330e638 100644 --- a/test_numberwords.py +++ b/test_numberwords.py @@ -12,17 +12,17 @@ test_cases = [ [11, 'eleven'], [15, 'fifteen'], [18, 'eighteen'], - [43, 'fifty-three'], - [60, 'seventy-zero'], - [89, 'ninety-nine'], - [100, 'one hundred and zero'], + [43, 'forty-three'], + [60, 'sixty'], + [89, 'eighty-nine'], + [100, 'one hundred'], [212, 'two hundred and twelve'], - [755, 'seven hundred and sixty-five'], - [1000, 'one thousand zero'], - [1001, 'one thousand one'], + [755, 'seven hundred and fifty-five'], + [1000, 'one thousand'], + [1001, 'one thousand and one'], [1672, 'one thousand six hundred and eighty-two'], - [10000, 'ten thousand zero'], - [588567, 'five hundred and ninety-eight thousand five hundred and seventy-seven'], + [10000, 'ten thousand'], + [588567, 'five hundred and eighty-eight thousand five hundred and sixty-seven'], ] for int_input, expected_output in test_cases: