word to digit module

Stephen Thorne stephen.thorne at gmail.com
Wed Dec 22 16:44:24 EST 2004


On Wed, 22 Dec 2004 11:41:26 -0800, Scott David Daniels
<Scott.Daniels at acm.org> wrote:
> John Machin wrote:
> > Stephen Thorne wrote:
> > .def toNumber2(s):
> > .   items = s.replace(',', '').split()
> > .   numbers = [translation.get(item.strip(), -1) for item in items if
> > item.strip()]
> > .   stack = [0]
> > .   for num in numbers:
> > .      if num == -1:
> > .         raise ValueError("Invalid string '%s'" % (s,))
> > .      if num >= 100:
> > .         stack[-1] *= num
> > .         if num >= 1000:
> > .            stack.append(0)
> > .      else:
> > .         stack[-1] += num
> > .   return sum(stack)
> >
> 
> Can I play too?
> Let's replace the top with some little bit of error handling:
> 
>      def toNumber3(text):
>          s = text.replace(',', '').replace('-', '')# for twenty-three
>          items = s.split()
>          try:
>              numbers = [translation[item] for item in items]
>          except KeyError, e:
>              raise ValueError, "Invalid element %r in string %r" % (
>                                 e.args[0], text)
>          stack = [0]
>          for num in numbers:
>              if num >= 100:
>                  stack[-1] *= num
>                  if num >= 1000:
>                      stack.append(0)
>              else:
>                  stack[-1] += num
>          return sum(stack)

Thankyou for you feedback, both of you.
http://thorne.id.au/users/stephen/scripts/eng2num.py contains your suggestions.

Stephen.



More information about the Python-list mailing list