[Tutor] puzzled by main()
Dick Moores
rdm at rcblue.com
Fri Aug 20 08:05:01 CEST 2004
Should I have attached intSpell.py as a text file?
Dick Moores
-------------- next part --------------
def convertNToString(n):
"convert integer to string"
return str(n)
def regularizeFirstGroup(s):
"prepend enough zeros, if any needed, to make a group of 3 digits: 45-> 045"
if len(s) % 3 != 0:
numOfZerosToPrepend = 3 - (len(s) % 3)
stringOfZerosToPrepend = "0" * numOfZerosToPrepend
s = stringOfZerosToPrepend + s
return s
else:
return s
# example: illionNum of group "345" in "111345666000" is "2"
def ComputeIllionNum(s):
"find illionNum of group"
illionNum = len(s) / 3 - 1
return illionNum
#example: illionName of group "111" in "111345666000" is "billion"
def illionNumToName(illionNum):
"find illionName of group, given its illionNum"
names = [ \
"",
"thousand",
"million",
"billion",
"trillion",
"quadrillion",
"quintillion",
"sextillion",
"septillion",
"octillion",
"nonillion",
"decillion",
"undecillion",
"duodecillion",
"tredecillion",
"quattuordecillion",
"quindecillion",
"sexdecillion",
"septendecillion",
"octodecillion",
"novemdecillion",
"vigintillion"]
illionName = names[illionNum]
return illionName
def extractGroup(s):
"get group to work on"
group = s[:3]
return group
def stripFrontZeros(r):
"strip zeros at front of group, if any. E.g., 045 -> 45, 003 -> 3"
if int(r) == 0:
return ""
while r[0] == "0":
r = r[1:]
return r
def prepareGroupForPrinting(group):
"use stripFrontZeros(group) on group"
return stripFrontZeros(group)
def main():
s = convertNToString(n)
s = regularizeFirstGroup(s)
a = ""
# work on each group in turn, from first group to end group of s
for index in range(0,len(s),3):
illionNum = ComputeIllionNum(s[index:])
illionName = illionNumToName(illionNum)
group = extractGroup(s[index:])
group = prepareGroupForPrinting(group)
# don't print illionName if group is originally "000"
if group == "":
illionName = ""
continue
a = a + " " + group + " " + illionName + ","
# remove final " ," or ","
if a[-2:] == " ,":
a = a[:-2]
else:
a = a[:-1]
answer = a
return answer
if __name__=='__main__':
n = 12008787987
print main()
More information about the Tutor
mailing list