本文实例讲述了python实现将英文单词表示的数字转换成阿拉伯数字的方法。分享给大家供大家参考。具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
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程序设计有所帮助。