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):