Sync with files in zip

This commit is contained in:
tso
2005-06-18 16:20:11 +00:00
parent f1e887bcd2
commit 9acd82c4d5
10 changed files with 312 additions and 91 deletions

View File

@@ -1,7 +1,7 @@
'''
Module: num2word_EN.py
Requires: num2word_EU.py
Version: 1.0
Version: 1.2
Author:
Taro Ogawa (tso@users.sourceforge.org)
@@ -23,9 +23,22 @@ Usage:
to_card(1234567890)
to_ord(1234567890)
to_ordnum(1234567890)
to_year(1976)
to_currency(dollars*100 + cents, longval=False)
to_currency((dollars, cents))
History:
1.2: to_ordinal_num() made shorter and simpler (but slower)
strings in merge() now interpolated
to_year() and to_currency() added
1.1: to_ordinal_num() fixed for 11,12,13
'''
from __future__ import division
import num2word_EU
class Num2Word_EN(num2word_EU.Num2Word_EU):
def set_high_numwords(self, high):
max = 3 + 3*len(high)
@@ -35,7 +48,7 @@ class Num2Word_EN(num2word_EU.Num2Word_EU):
def setup(self):
self.negword = "minus "
self.pointword = "point"
self.errmsg_nonnum = "Only numbers may be converted to words."
self.errmsg_nornum = "Only numbers may be converted to words."
self.exclude_title = ["and", "point", "minus"]
self.mid_numwords = [(1000, "thousand"), (100, "hundred"),
@@ -56,18 +69,16 @@ class Num2Word_EN(num2word_EU.Num2Word_EU):
"twelve" : "twelfth" }
def merge(self, curr, next):
ctext, cnum, ntext, nnum = curr + next
if cnum == 1 and nnum < 100:
def merge(self, (ltext, lnum), (rtext, rnum)):
if lnum == 1 and rnum < 100:
return next
elif 100 > cnum > nnum :
return (ctext + "-" + ntext, cnum + nnum)
elif cnum >= 100 > nnum:
return (ctext + " and " + ntext, cnum + nnum)
elif nnum > cnum:
return (ctext + " " + ntext, cnum * nnum)
return (ctext + ", " + ntext, cnum + nnum)
elif 100 > lnum > rnum :
return ("%s-%s"%(ltext, rtext), lnum + rnum)
elif lnum >= 100 > rnum:
return ("%s and %s"%(ltext, rtext), lnum + rnum)
elif rnum > lnum:
return ("%s %s"%(ltext, rtext), lnum * rnum)
return ("%s, %s"%(ltext, rtext), lnum + rnum)
def to_ordinal(self, value):
@@ -88,16 +99,25 @@ class Num2Word_EN(num2word_EU.Num2Word_EU):
def to_ordinal_num(self, value):
self.verify_ordinal(value)
out = str(value)
out += {"1" : "st",
"2" : "nd",
"3" : "rd" }.get(out[-1], "th")
return out
return "%s%s"%(value, self.to_ordinal(value)[-2:])
def to_year(self, val, longval=True):
if not (val//100)%10:
return self.to_cardinal(val)
return self.to_splitnum(val, hightxt="hundred", jointxt="and",
longval=longval)
def to_currency(self, val, longval=True):
return self.to_splitnum(val, hightxt="dollar/s", lowtxt="cent/s",
jointxt="and", longval=longval)
n2w = Num2Word_EN()
to_card = n2w.to_cardinal
to_ord = n2w.to_ordinal
to_ordnum = n2w.to_ordinal_num
to_year = n2w.to_year
def main():
for val in [ 1, 11, 12, 21, 31, 33, 71, 80, 81, 91, 99, 100, 101, 102, 155,
@@ -105,9 +125,11 @@ def main():
8280, 8291, 150000, 500000, 1000000, 2000000, 2000001,
-21212121211221211111, -2.121212, -1.0000100]:
n2w.test(val)
n2w.test(1325325436067876801768700107601001012212132143210473207540327057320957032975032975093275093275093270957329057320975093272950730)
for val in [1,120,1000,1120,1800, 1976,2000,2010,2099,2171]:
print val, "is", n2w.to_currency(val)
print val, "is", n2w.to_year(val)
if __name__ == "__main__":
main()