generated from mwc/problemset_numberwords
40 lines
1.4 KiB
Python
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)
|