listOnesPlace = 'one two three four five six seven eight nine'.split()
listTensPlace = 'twenty thirty forty fifty sixty seventy eighty ninety'.split()
listTeens = 'ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen'.split()
listMagnitudes = 'thousand million billion trillion quadrillion quintillion sextillion septillion octillion nonillion decillion undecillion duodecillion trececillion quattuordecillion quindecillion'.split()
def takeBiggestChunk(strNum):
mag = 0
strBig = strNum
while len(strBig) > 3:
strBig = strBig[:len(strBig)-3]
mag += 1
strSmall = strNum[len(strNum)-3*mag:]
return strBig, strSmall, mag
def printNumber(strNum):
strWords = []
strSmall = strNum
while True:
strBig, strSmall, mag = takeBiggestChunk(strSmall)
if mag == 0:
break
strWords += hundreds(strBig)
strWords += ' '
strWords += listMagnitudes[mag-1]
strWords += ', '
strWords += hundreds(strBig)
return ''.join(strWords)
def hundreds(strNum):
strWords = []
if len(strNum) == 3 and strNum[0] != '0':
strWords += listOnesPlace[int(strNum[0])-1]
strWords += ' hundred '
strWords += tensAndOnes(strNum[len(strNum)-2:len(strNum)])
return ''.join(strWords)
def tensAndOnes(strNum):
strWords = []
if len(strNum) == 1 or strNum[0] == '0':
strWords += listOnesPlace[int(strNum[0])-1]
else:
if strNum[0] == '0':
strWords += listOnesPlace[int(strNum[1])-1]
elif strNum[0] == '1':
strWords += listTeens[int(strNum[1])]
else:
strWords += listTensPlace[int(strNum[0])-2]
if strNum[1] != '0':
strWords += '-'
strWords += listOnesPlace[int(strNum[1])-1]
return ''.join(strWords)
def askForNumber():
print('Hello! Please enter a number.')
while True:
number = input()
if number.isdigit():
return number
else:
print('Please enter any number from 1 to 99, in numerical form.')
def promptRestart():
print('Restart? (y/n)')
return input().lower().startswith('y')
while True:
print (printNumber(askForNumber()))
if not promptRestart():
break