我正在做LPTHW exercise 48并且我多次重写了我的功能。我删除了所有内容,并希望从头开始,所以我将问题缩小到一个。
如果我将包含数字的字符串传递给scan
函数,我希望它能打印字符串' number'和传递的字符串。我遇到了一个问题,即无法识别包含数字的字符串,而是返回None。
我做错了什么?
这是简短的剧本:
def scan(user_input):
direction = ['north', 'south',
'east', 'west', 'down',
'up', 'left', 'right', 'back']
number = range(0,99999)
try:
if user_input in direction:
print 'direction', direction[direction.index(user_input)]
else:
return None
except ValueError:
if int(user_input) in number:
print 'number', user_input
else:
return None
scan(raw_input("> "))
如果您通过例如' north'对于这个功能,当你通过' 123'你没有。
答案 0 :(得分:1)
那是因为永远不会发生异常,因此else
下的try
部分会返回None
。
try:
if user_input in direction:
print 'direction', direction[direction.index(user_input)]
elif int(user_input) in number:
print 'number', user_input
else:
return None
except ValueError:
return None
答案 1 :(得分:0)
其实我基本上想这样做:
def scan(user_input):
direction = ['north', 'south',
'east', 'west', 'down',
'up', 'left', 'right', 'back']
number = range(0,99999)
try:
if int(user_input) in number:
print 'number', user_input
except ValueError:
if user_input in direction:
print 'direction', direction[direction.index(user_input)]
else:
return None
scan(raw_input("> "))
我发现最好的方法是首先检查整数,这就是try:
我添加if int(user_input) in number:
后的原因。
每当失败时(因为字符串' north'无法更改为int
),它会立即转为异常。如果找不到任何内容,则会返回None
。
我想感谢你的提示,因为它让我再次查看代码并弄明白。