本文实例讲述了python实现将英文单词表示的数字转换成阿拉伯数字的方法。分享给大家供大家参考。具体实现方法如下:

import re
_known = {
  \'zero\': 0,
  \'one\': 1,
  \'two\': 2,
  \'three\': 3,
  \'four\': 4,
  \'five\': 5,
  \'six\': 6,
  \'seven\': 7,
  \'eight\': 8,
  \'nine\': 9,
  \'ten\': 10,
  \'eleven\': 11,
  \'twelve\': 12,
  \'thirteen\': 13,
  \'fourteen\': 14,
  \'fifteen\': 15,
  \'sixteen\': 16,
  \'seventeen\': 17,
  \'eighteen\': 18,
  \'nineteen\': 19,
  \'twenty\': 20,
  \'thirty\': 30,
  \'forty\': 40,
  \'fifty\': 50,
  \'sixty\': 60,
  \'seventy\': 70,
  \'eighty\': 80,
  \'ninety\': 90
  }
def spoken_word_to_number(n):
  \"\"\"Assume n is a positive integer\".
assert _positive_integer_number(\'nine hundred\') == 900
assert spoken_word_to_number(\'one hundred\') == 100
assert spoken_word_to_number(\'eleven\') == 11
assert spoken_word_to_number(\'twenty two\') == 22
assert spoken_word_to_number(\'thirty-two\') == 32
assert spoken_word_to_number(\'forty two\') == 42
assert spoken_word_to_number(\'two hundred thirty two\') == 232
assert spoken_word_to_number(\'two thirty two\') == 232
assert spoken_word_to_number(\'nineteen hundred eighty nine\') == 1989
assert spoken_word_to_number(\'nineteen eighty nine\') == 1989
assert spoken_word_to_number(\'one thousand nine hundred and eighty nine\') == 1989
assert spoken_word_to_number(\'nine eighty\') == 980
assert spoken_word_to_number(\'nine two\') == 92 # wont be able to convert this one
assert spoken_word_to_number(\'nine thousand nine hundred\') == 9900
assert spoken_word_to_number(\'one thousand nine hundred one\') == 1901
\"\"\"
  n = n.lower().strip()
  if n in _known:
    return _known[n]
  else:
    inputWordArr = re.split(\'[ -]\', n)
  assert len(inputWordArr) > 1 #all single words are known
  #Check the pathological case where hundred is at the end or thousand is at end
  if inputWordArr[-1] == \'hundred\':
    inputWordArr.append(\'zero\')
    inputWordArr.append(\'zero\')
  if inputWordArr[-1] == \'thousand\':
    inputWordArr.append(\'zero\')
    inputWordArr.append(\'zero\')
    inputWordArr.append(\'zero\')
  if inputWordArr[0] == \'hundred\':
    inputWordArr.insert(0, \'one\')
  if inputWordArr[0] == \'thousand\':
    inputWordArr.insert(0, \'one\')
  inputWordArr = [word for word in inputWordArr if word not in [\'and\', \'minus\', \'negative\']]
  currentPosition = \'unit\'
  prevPosition = None
  output = 0
  for word in reversed(inputWordArr):
    if currentPosition == \'unit\':
      number = _known[word]
      output += number
      if number > 9:
        currentPosition = \'hundred\'
      else:
        currentPosition = \'ten\'
    elif currentPosition == \'ten\':
      if word != \'hundred\':
        number = _known[word]
        if number < 10:
          output += number*10
        else:
          output += number
      #else: nothing special
      currentPosition = \'hundred\'
    elif currentPosition == \'hundred\':
      if word not in [ \'hundred\', \'thousand\']:
        number = _known[word]
        output += number*100
        currentPosition = \'thousand\'
      elif word == \'thousand\':
        currentPosition = \'thousand\'
      else:
        currentPosition = \'hundred\'
    elif currentPosition == \'thousand\':
      assert word != \'hundred\'
      if word != \'thousand\':
        number = _known[word]
        output += number*1000
    else:
      assert \"Can\'t be here\" == None
  return(output)

希望本文所述对大家的Python程序设计有所帮助。