Python消歧

Python消歧,python,disambiguation,Python,Disambiguation,我目前正在为rpg游戏构建一个MUD(多用户域)。完全用Python来做这件事,既可以制作我喜欢的游戏,也可以学习Python。我遇到了一个问题,由于这个问题的极端特殊性,我一直无法找到正确的答案 所以,这是我需要的,在坚果壳里。我没有一个好的代码片段可以完全显示我需要的内容,因为我需要粘贴大约50行才能使我使用的5行有意义 targetOptions = ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill'] 在我们的游戏中,cmd是攻击,我们

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

所以,这是我需要的,在坚果壳里。我没有一个好的代码片段可以完全显示我需要的内容,因为我需要粘贴大约50行才能使我使用的5行有意义

targetOptions = ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill']
在我们的游戏中,cmd是攻击,我们输入“一个僵尸”,然后继续杀死僵尸。但是,我只想键入'Az'。我们在代码中尝试了一些不同的东西,但它们都不稳定,而且常常是错误的。我们的一次尝试返回了类似于[“剑”、“护身符”]的东西作为“获取剑”的匹配。那么,有没有办法搜索这个列表并让它返回匹配的值

如果房间里有2个僵尸,我还需要返回值[0],然后输入'Az'。提前感谢您的帮助,我希望我已经清楚地知道我在寻找什么。如果需要更多信息,请告诉我。不要担心整个攻击的事情,我只需要发送'zo'和得到'zombie'或类似的东西。谢谢

>>> 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
为第一个参数接受的内容筛选列表(第二个参数)
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']

欢迎来到SO和Python!我建议您查看一下,并花一些时间查看包含在中的内容

该模块包含一个函数
get\u close\u matches()
,可以帮助您进行近似字符串比较。下面是它的样子:

从difflib导入获取\u关闭\u匹配

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!!!

尝试发布一些失败的尝试。对我们来说,解决这个问题要比为你做作业容易得多。编辑:根据文档示例,这似乎是为了拼写更正。我可以把苹果还给阿佩尔。在这种情况下,Z将不匹配僵尸。如果少于3个字符,则也不会返回任何字符。”j'和'jo'不返回'Joe'。忘记调整截止值,请再试一次o/