我正在尝试编写一些基本的类和交互来进行实践,并最终将其变成一个工作游戏(类似于OGame)。在我的代码中,每个玩家都有一些工具(我更希望它们是类,而不是数据集,但也无法让它们工作)使用自己的密钥。我希望字典通过使用build_ships()函数来更新船只的数量和类型,这样做感觉是正确的方法,但它目前无法工作.
免责声明:总的来说,我在编码方面很新,但找不到任何好的解决方案,这些解决方案可以很好地扩展,也不能找到这样的最佳结构。
class Player:
def __init__(self, name, ships=None):
self.name = name
if ships is None:
self.ships = {}
else:
self.ships = ships
def build_ships(self, ship, quantity):
self.ships[ship] = quantity
small_cruiser = {
"name":'SMALL CRUISER',
"size":5,
"attack":10,
"defense":7,
"speed":30
}
big_cruiser = {
"name":'BIG CRUISER',
"size":7,
"attack":15,
"defense":9,
"speed":25
}
player_1 = Player('TheLegend27')
player_1.build_ships(small_cruiser, 5)发布于 2020-08-14 20:18:12
您不能在另一个字典中使用字典作为键,因为字典是可变的,而字典键必须是可选的(不可变)。
在我看来,self.ships是一张船只列表,而不是一本字典更有意义。然后,您的build_ships方法只需附加到该列表中。
考虑以下代码:
class Player:
def __init__(self, name, ships=None):
self.name = name
if ships is None:
self.ships = []
else:
self.ships = ships
def build_ships(self, ship, quantity):
for _ in range(quantity):
s = ship.copy()
self.ships.append(s)
small_cruiser = {
"name":'SMALL CRUISER',
"size":5,
"attack":10,
"defense":7,
"speed":30
}
big_cruiser = {
"name":'BIG CRUISER',
"size":7,
"attack":15,
"defense":9,
"speed":25
}
player_1 = Player('TheLegend27')
player_1.build_ships(small_cruiser, 5)注意,我们需要添加行s = ship.copy(),以便创建作为参数传入build_ships的原始字典的副本。否则,您将一次又一次地追加相同的字典,而对self.ships中的任何字典所做的任何修改都会反映到其他字典上。
发布于 2020-08-14 20:19:12
字典里的钥匙必须是可说的。因此,您不能在第二个字典中将字典作为密钥。一种方法是,如果您知道船舶的名称是唯一的,那么您就可以让Player对象只维护名称和计数。
def build_ships(self, ship, quantity):
self.ships[ship] = quantity它将由下列组织调用:
player_1.build_ships("SMALL CRUISER", 5)然后,您可以有一个单独的字典来维护船舶的类型,比如:
ships = {"SMALL CRUISER":{"size":5,
"attack":10,
"defense":7,
"speed":30},
"BIG CRUISER":{"size":7,
"attack":15,
"defense":9,
"speed":25},
}https://stackoverflow.com/questions/63419362
复制相似问题