generated from mwc/problemset_numberwords
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.
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
# numberwords.py
|
|
# --------------
|
|
# By MWC Contributors
|
|
# Functions to print out a verbal representation of an integer.
|
|
|
|
MAXIMUM = 1000000
|
|
DIGIT_NAMES = [
|
|
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"
|
|
]
|
|
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"
|
|
]
|
|
|
|
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):
|
|
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(number)
|
|
elif number <100:
|
|
tens_prefix = divide_with_remainder(number,10)
|
|
if number % 10==0:
|
|
return TENS_NAMES[tens_prefix[0]]
|
|
else:
|
|
return TENS_NAMES[tens_prefix[0]] + "-" +DIGIT_NAMES[tens_prefix[1]]
|
|
|
|
|
|
|
|
def int_under_20_to_str(number):
|
|
if number <10:
|
|
return int_under_10_to_str(number)
|
|
elif number <20:
|
|
return TWEEN_AND_TEEN_NAMES[number-10]
|
|
|
|
|
|
def int_under_10_to_str(number):
|
|
return DIGIT_NAMES[number]
|
|
|
|
def divide_with_remainder(dividend, divisor):
|
|
"""Divides one number by another, using whole-number division.
|
|
Returns the quotient and the remainder.
|
|
"""
|
|
quotient = dividend // divisor
|
|
remainder = dividend % divisor
|
|
return quotient, remainder
|