我是Python的新手,我可以使用一些基于文本的小游戏(实际上是“风险”棋盘游戏的版本)。我的位置系统有问题,因为我想在区域划分游戏,在这些区域内会有很多位置。我必须这样做,因为一些区域最初不可用。
无论如何,到目前为止我做了:
包含区域的列表(名称是按程序生成的):
regionList = [casia, lorus, mehin]
区域的3个列表,例如:
casia = ["casia", "town1", "town2", "town3"]
(我似乎必须在列表的开头留下该区域的名称,以便在代码的其他部分方便实用)
1个列表,其中包含玩家的初始位置,当用户键入新位置时,该列表会更新:
playerPos = [(regionList[0])[0], (regionList[0])[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))
这里有几种可能的变种,我只是为初学者提出最简单的代码。