Python消歧

时间:2012-07-04 23:05:21

标签: python disambiguation

我目前正在为RPG游戏构建MUD(多用户域)。完全用Python做这个,既可以制作我喜欢的游戏,也可以学习python。我遇到的一个问题,由于问题的极端特殊性,我一直无法找到正确的答案。

所以,这就是我需要的东西,坚果壳。我没有一个完整显示我需要的代码片段,因为我必须粘贴大约50行才能使用5行我才有意义。

targetOptions = ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill']

我们游戏中的cmd是攻击,我们输入'僵尸',然后我们继续杀死僵尸。但是,我想只输入'a z'。我们在代码中尝试了一些不同的东西,但它们都是不稳定的,而且经常是错的。我们的一次尝试返回了类似['sword','talisman']的内容,作为'获得剑'的匹配。那么,有没有办法搜索此列表并让它返回匹配值?

我还需要返回值[0],如果有话说,房间里有2个僵尸,我输入'a z'。感谢您提前帮助,我希望我能够清楚地了解我正在寻找的东西。如果需要更多信息,请告诉我。并且不要担心整个攻击的事情,我只需要发送'zo'并获得'僵尸'或类似的东西。谢谢!

2 个答案:

答案 0 :(得分:2)

欢迎使用SO和Python!我建议您查看official Python documentation并花一些时间查看Python Standard Library中包含的内容。

difflib模块包含一个函数get_close_matches(),可以帮助您进行近似字符串比较。这是它的样子:

来自difflib import get_close_matches

def get_target_match(target, targets):
    '''
    Approximates a match for a target from a sequence of targets,
    if a match exists.
    '''
    source, targets = targets, map(str.lower, targets)
    target = target.lower()

    matches = get_close_matches(target, targets, n=1, cutoff=0.25)

    if matches:
        match = matches[0]
        return source[targets.index(match)]
    else:
        return None

target = 'Z'
targets = ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill']
match = get_target_match(target, targets)
print "Going nom on %s" % match # IT'S A ZOMBIE!!!

答案 1 :(得分:0)

>>> filter(lambda x: x.startswith("z"), ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill'])
['zombie']
>>> cmd = "a zom"
>>> cmd.split()
['a', 'zom']
>>> cmd.split()[1]
'zom'
>>> filter(lambda x: x.startswith(cmd.split()[1]), ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill'])
['zombie']

有帮助吗?

filter过滤第一个arg接受的内容的列表(第二个arg)。 cmd是你的命令,cmd.split()[1]获得空间之后的部分。 lambda x: x.startswith(cmd.split()[1])是一个函数(一个lambda表达式),它询问“x在空格后面的命令是否开始?”

对于另一个测试,如果cmd是“a B”,那么有两个匹配:

>>> cmd = "a B"
>>> filter(lambda x: x.startswith(cmd.split()[1]), ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill'])
['Bob', 'Bill']