From f2ac21ab1635307654c138dce1d6357a8bce7c44 Mon Sep 17 00:00:00 2001 From: Chris Mekelburg Date: Sun, 3 Nov 2024 20:26:14 -0500 Subject: [PATCH] final submission number words problem sentences MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I was able to add the remaining numbers above 1000 without too much difficulty. As I worked, I used number.py to test the numbers, which helped correct errors early on and I didn’t have too many issues. I think the planning really helped with this problem set. I only ran into 2 problems while debugging with test_numberwords.py. The first was not including the word “and”, which was an easy fix. The second turned out to be an error in test_numberwords.py as one of the numbers 588567 did not match the english type. I changed the number to 589567 in the test program which fixed that error. This problem set was one of the easier assignments for me. --- numberwords.py | 37 ++++++++++++++++++++++++++++--------- nw.py | 4 ++-- test_numberwords.py | 2 +- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/numberwords.py b/numberwords.py index 0394a61..e1b7658 100644 --- a/numberwords.py +++ b/numberwords.py @@ -14,21 +14,41 @@ TENS_NAMES = [ "", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" ] -def int_under_1000000_to_str(number): - return None +def int_under_1000000_to_str(number): #also does 1 million just for fun! + if number <1000: + return int_under_1000_to_str(number) + elif number == 1000000: + return "one million" + elif number < 1000000: + thousands_prefix = divide_with_remainder(number, 1000) + if number % 1000 == 0: + return int_under_1000_to_str(thousands_prefix[0]) + " thousand" + else: + return int_under_1000_to_str(thousands_prefix[0]) + " thousand " + int_under_1000000_to_str(thousands_prefix[1]) + else: + return "Error, Try again, number must be 1 million or less, positive numbers only" def int_under_1000_to_str(number): - return None + if number <100: + return int_under_100_to_str(number) + elif number<1000: + hundreds_prefix = divide_with_remainder(number, 100) + if number % 100 ==0: + return DIGIT_NAMES[hundreds_prefix[0]] + " hundred" + else: + return DIGIT_NAMES[hundreds_prefix[0]] + " hundred and " + int_under_100_to_str(hundreds_prefix[1]) + def int_under_100_to_str(number): if number <20: - return int_under_20_to_str + return int_under_20_to_str(number) elif number <100: - prefix = divide_with_remainder(number,10) + tens_prefix = divide_with_remainder(number,10) if number % 10==0: - return TENS_NAMES[prefix[0]] + return TENS_NAMES[tens_prefix[0]] else: - return (TENS_NAMES[prefix[0]]) + "-" +(DIGIT_NAMES[prefix[1]]) + return TENS_NAMES[tens_prefix[0]] + "-" +DIGIT_NAMES[tens_prefix[1]] + def int_under_20_to_str(number): @@ -36,8 +56,7 @@ def int_under_20_to_str(number): return int_under_10_to_str(number) elif number <20: return TWEEN_AND_TEEN_NAMES[number-10] - else: - return "Error" + def int_under_10_to_str(number): return DIGIT_NAMES[number] diff --git a/nw.py b/nw.py index 79bac9a..0a0e588 100644 --- a/nw.py +++ b/nw.py @@ -4,11 +4,11 @@ # Ex: python nw.py 145 from argparse import ArgumentParser -from numberwords import int_under_100_to_str +from numberwords import int_under_1000000_to_str parser = ArgumentParser("Print out a number as it is spoken in English.") parser.add_argument("number", type=int) args = parser.parse_args() -text = int_under_100_to_str(args.number) +text = int_under_1000000_to_str(args.number) print(text) diff --git a/test_numberwords.py b/test_numberwords.py index 0fa6d68..74fd840 100644 --- a/test_numberwords.py +++ b/test_numberwords.py @@ -33,7 +33,7 @@ class TestIntToStr(unittest.TestCase): [int_under_1000000_to_str, 1001, 'one thousand one'], [int_under_1000000_to_str, 1672, 'one thousand six hundred and seventy-two'], [int_under_1000000_to_str, 10000, 'ten thousand'], - [int_under_1000000_to_str, 588567, 'five hundred and ninety-eight thousand five hundred and sixty-seven'], + [int_under_1000000_to_str, 598567, 'five hundred and ninety-eight thousand five hundred and sixty-seven'], ] def test_converts_integer_to_string(self):