考虑了处理数字的方式,在书里面提出通过try
测试是否是数值,经过实践是可用的,而且不会太复杂,以下是代码:
def scan(str):
words = str.split()
s_list = []
dict_nr = {
'direction':['north','south','east','west','up','down','left','right','back'],
'verb':['go','stop','kill','eat'],
'stop':['the','in','of','from','at','it'],
'noun':['door','bear','princess','cabinet'],
}
for word in words:
try:
num = int(word)
s_list.append(('number',num))
except ValueError:
flag = 0
for name,value in dict_nr.items():
if word in value:
s_list.append((name,word))
flag = 1
if flag == 0:
s_list.append(('error',word))
return s_list
按书中所给的测试方式是可以通过的:
> nosetests
......
----------------------------------------------------------------------
Ran 6 tests in 0.010s
OK