word to digit module

Scott David Daniels Scott.Daniels at Acm.Org
Wed Dec 22 14:41:26 EST 2004


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)

--Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list