Python,将变量的名称添加到列表/目录中

Python,将变量的名称添加到列表/目录中,python,list,Python,List,我是个大便初学者 实际上,我正在用pygame编写一个游戏,我想将变量的名称添加到列表或dict中 我有一个职业英雄 我有一个在屏幕上显示精灵的功能: def show(self) : display.blit(self.image, (self.posx, self.posy)) 它工作正常,没有问题,我实际上使用的是: captainamerica = Hero(100,400, "sprites/captainamerica/base.png") captainamerica.s

我是个大便初学者

实际上,我正在用pygame编写一个游戏,我想将变量的名称添加到列表或dict中

我有一个职业英雄

我有一个在屏幕上显示精灵的功能:

def show(self) :
    display.blit(self.image, (self.posx, self.posy))
它工作正常,没有问题,我实际上使用的是:

captainamerica = Hero(100,400, "sprites/captainamerica/base.png")
captainamerica.show()
ironman = Hero(100,400, "sprites/ironman/base.png")
ironman.show()
但我想用这个:

listhero = []
listhero.append(captainamerica)
listhero.append(ironman)
i = 0
while i < len(listhero):
    listhero[i].show()
它不工作,因为它接受变量的值而不是变量的名称


谢谢你的帮助,如果我的英语不好,我很抱歉。

你没有增加i,所以这会导致无限循环

你可以加上

i += 1
在循环的末尾

更好的做法是:

for h in listhero:
    h.show()
关于数据结构的选择,正如评论中强调的,使用字典比使用列表要好。您可以这样做:

heroes = {}
heroes['Captain America'] = Hero(100, 400, 'sprites/captainamerica/base.png')

您可以实际使用字典:

dictheroes = {}

dictheroes['ironman'] = Hero(100,400, "sprites/ironman/base.png")

保留列表,你也可以这样做

[h.show() for h in listhero]
您可以使用字典,但blit的顺序将不是dict中的插入顺序。如果需要保留blit的顺序,请继续使用列表或使用:

collections.OrderedDict

你说它不起作用是什么意思?你应该在while循环中增加i,或者更好地使用这样的forloop:for hero in listhero:hero.show只需在classis中的show定义上方添加以下行,我只是不从我的代码中复制该行,但谢谢你的回答。我对dicts不太了解,但我尝试了一下,几分钟后我会来。非常感谢。
collections.OrderedDict