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

Set player's main region depending on location - Python

我是 Python 的新手,我可以使用一些基于文本的小型游戏(实际上是 "Risk" 棋盘游戏的一个版本)的建议。我的位置系统有问题,因为我想将游戏划分为多个区域,而在这些区域中会有多个位置。我必须这样做,因为一开始有些地区不可用。

不管怎样,到目前为止我做了:

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

regionList = [casia, lorus, mehin]

3 个区域列表,例如:

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

(为了代码其他部分的实际方便,我似乎不得不将区域名称留在列表的开头)

和 1 个包含玩家初始位置的列表,当用户输入新位置时更新:

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

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

此外,如果有更有效的组织方式,请告诉我,如果问题需要进一步说明,请告诉我。

非常感谢!

对于足够少、足够小的列表,您可以使用暴力解决方案:

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

如果出于您的目的,区域的数量或长度过度减慢了这种蛮力操作,您可以一次性通过构建字典用作 "index":

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

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