本文实例讲述了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程序设计有所帮助。