检查输入中的部分匹配是否具有不同前缀的有效参数列表

时间:2013-01-28 17:51:38

标签: python python-3.x

所以我正在开发一个基于文本的游戏,在这个游戏中,我希望用户输入他们的下一个动作。我正在尝试编写一种方法来编写它,以便它可能不那么“挑剔”。我希望游戏接受部分输入(例如n而不是北),我也希望它忽略前缀,例如“go”。

我用for循环计算了部分输入,它还接受带有“go”前缀的输入。 但是,如果我只是输入“go”而不输入方向,则默认为“north”,这是我的有效命令列表的第一部分。在给出空输入时也会出现此问题。

我现在正在寻找的是一种让前缀变化的方法,例如在地图前面的“检查”或在南面前面的“步行”。我还需要让它识别输入只包含前缀而不是实际命令。

这是目前的相关代码。

move_input = input("You silently ask yourself what to do next.\n").lower()
    for n in valid_moves:
        if n.startswith(move_input) or ("go " + n).startswith(move_input):
            move_input = n

1 个答案:

答案 0 :(得分:0)

您可以尝试将其拆分为单词:

noise = ['go', 'check', 'walk']
commands = [word for word in move_input if word not in noise]
# process commands

如果您想为不同的命令使用不同的前缀,可以使用以下内容:

prefixes = {('map', 'inventory'): ('check',),
            ('north', 'south', 'east', 'west'): ('go', 'walk')}
commands = [word for word in move_input if word not in noise]
if len(commands) == 1:
   command = commands[0]
else:
    assert len(commands) == 2 # or decide what to do otherwise
    for com, pref in prefixes.items():
        if commands[0] in pref and commands[1] in com:
           command = commands[1]
           break
    else:
        print('Invalid command')

但它开始看起来太复杂了。