problemset_numberwords/mycode.py

40 lines
1.4 KiB
Python

# nw.py
# ------
# Implements a simple number-to-text command-line interface.
# Ex: python nw.py 145
from argparse import ArgumentParser
from numberwords import int_under_1000000_to_str
def int_under_1000000_to_str(number):
if number < 0 or number >= 1000000:
return "Number out of range"
units = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen",
"seventeen", "eighteen", "nineteen"]
tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
def number_to_words(n):
if n < 10:
return units[n]
elif 10 <= n < 20:
return teens[n - 10]
elif n < 100:
return tens[n // 10] + ('' if n % 10 == 0 else '-' + units[n % 10])
elif n < 1000:
return units[n // 100] + ' hundred' + (' and ' + number_to_words(n % 100) if n % 100 != 0 else '')
elif n < 1000000:
return (number_to_words(n // 1000) + ' thousand' +
('' if n % 1000 == 0 else ' ' + number_to_words(n % 1000)))
return number_to_words(number)
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_1000000_to_str(args.number)
print(text)