根据位置设置玩家的主要区域 - Python

时间:2015-02-01 16:38:39

标签: python list

我是Python的新手,我可以使用一些基于文本的小游戏(实际上是“风险”棋盘游戏的版本)。我的位置系统有问题,因为我想在区域划分游戏,在这些区域内会有很多位置。我必须这样做,因为一些区域最初不可用。

无论如何,到目前为止我做了:

包含区域的列表(名称是按程序生成的):

regionList = [casia, lorus, mehin]

区域的3个列表,例如:

casia = ["casia", "town1", "town2", "town3"]

(我似乎必须在列表的开头留下该区域的名称,以便在代码的其他部分方便实用)

1个列表,其中包含玩家的初始位置,当用户键入新位置时,该列表会更新:

playerPos = [(regionList[0])[0], (regionList[0])[1]]

有没有办法简单地输入位置名称(它们都不同)并自动更新位置列表中的区域?我还没有找到一种从它的元素中获取列表名称的方法,但是会解决它吗?

此外,如果有更有效的方式来组织它,请通知我,如果问题需要进一步澄清,请告诉我。

非常感谢!

1 个答案:

答案 0 :(得分:0)

使用足够少的,足够小的列表,您可以使用强力解决方案:

def find_location(location_name):
    for region in regionList:
        if location_name in region:
            return [region[0], location_name]
    # if we get there the location name was found nowhere
    raise ValueError('Location {!r} unknown'.format(location_name))

如果区域的数量或长度为了您的目的而过度减慢这种强力操作,您可以进行一次性传递以构建用作“索引”的字典:

loc2reg = {}
def populate_loc2reg():
    for region in regionList:
        for location_name in region:
            loc2reg[location_name] = [region[0], location_name]

这有点多余,因为它再次存储位置名称,但它确实使事情变得非常快:

def find_location_fast(location_name):
    try: return loc2reg[location_name]
    except KeyError:
        raise ValueError('Location {!r} unknown'.format(location_name))

这里有几种可能的变种,我只是为初学者提出最简单的代码。