code: def parseFloat(self, words):
          def pointFloat(words):
              m = re.search(r'(.*) point (.*)', words)
              if m:
                  whole = m.group(1)
                  frac = m.group(2)
                  total = 0.0
                  coeff = 0.10
                  for digit in frac.split(' '):
                      total += coeff * self.parse(digit)
                      coeff /= 10.0
                  return self.parseInt(whole) + total
              return None
          def fractionFloat(words):
              m = re.search(r'(.*) and (.*)', words)
              if m:
                  whole = self.parseInt(m.group(1))
                  frac = m.group(2)
                  frac = re.sub(r'(\w+)s(\b)', '\g<1>\g<2>', frac)
                  frac = re.sub(r'(\b)a(\b)', '\g<1>one\g<2>', frac)
                  split = frac.split(' ')
                  num = split[:1]
                  denom = split[1:]
                  while denom:
                      try:
                          num_value = self.parse(' '.join(num))
                          denom_value = self.parse(' '.join(denom))
                          return whole + float(num_value) / denom_value
                      except:
                          num += denom[:1]
                          denom = denom[1:]
              return None
          result = pointFloat(words)
          if result:
              return result
          result = fractionFloat(words)
          if result:
              return result
          return self.parseInt(words)