将带有数字的字符串传递给Python - 为什么我的脚本失败了?

时间:2014-04-18 17:25:41

标签: function python-2.7

我正在做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'你没有。

2 个答案:

答案 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

我想感谢你的提示,因为它让我再次查看代码并弄明白。