Python 3.x 在列表中追加时获取运行时错误
我想做一个游戏,其中“卡”是游戏中各种卡的一个类。 “玩家”作为一个类,它包含一个包含卡对象的卡列表。 “游戏”作为一个类,它包含一个包含玩家对象的玩家列表。 因此,当我创建一个游戏对象时,它运行良好。 当玩家对象被添加到游戏对象中时,一切正常。 但当卡对象附加到玩家对象中时出现问题。所有牌对象都附加在所有玩家中 我正在使用PyCharm和Python3.6.2(v3.6.2:5fd33b5)Python 3.x 在列表中追加时获取运行时错误,python-3.x,Python 3.x,我想做一个游戏,其中“卡”是游戏中各种卡的一个类。 “玩家”作为一个类,它包含一个包含卡对象的卡列表。 “游戏”作为一个类,它包含一个包含玩家对象的玩家列表。 因此,当我创建一个游戏对象时,它运行良好。 当玩家对象被添加到游戏对象中时,一切正常。 但当卡对象附加到玩家对象中时出现问题。所有牌对象都附加在所有玩家中 我正在使用PyCharm和Python3.6.2(v3.6.2:5fd33b5) 预期-据我所知,每位玩家应包含13张卡。原因是您如何定义玩家类别cards被定义为一个类变量,这意味着
预期-据我所知,每位玩家应包含13张卡。原因是您如何定义
玩家
类别cards
被定义为一个类变量,这意味着player
的每个实例共享相同的cards
变量。因为每个玩家应该有不同的牌,牌
应该是一个实例变量,如下所示:
class player:
def __init__(self):
self.cards=[]
顺便说一句:通常最好给你的班级起名,比如
Game
,Class
和Player
,Player这样做的原因是你如何定义Player
班级cards
被定义为一个类变量,这意味着player
的每个实例共享相同的cards
变量。因为每个玩家应该有不同的牌,牌
应该是一个实例变量,如下所示:
class player:
def __init__(self):
self.cards=[]
顺便说一句:通常最好给你的班级起名,比如Game
,Class
和Player
,
class Game:
def __init__(self):
self.players = []
class Player:
def __init__(self):
self.cards = []
class Card:
def __init__(self, number, suit, player):
self.number = number
self.suit = suit
self.player = player
def __str__(self):
card_string = f'{self.suit}\'s {self.number} of player {self.player}'
return card_string
if __name__ == "__main__":
g = Game()
for i in range(0, 4):
g.players.append(Player())
for i in range(0, 52):
g.players[i % 4].cards.append(Card(int(i % 13), int(i / 13), int(i % 4)))
print(Card(int(i % 13), int(i / 13), int(i % 4)))
您可以遵循以下流程:
class Game:
def __init__(self):
self.players = []
class Player:
def __init__(self):
self.cards = []
class Card:
def __init__(self, number, suit, player):
self.number = number
self.suit = suit
self.player = player
def __str__(self):
card_string = f'{self.suit}\'s {self.number} of player {self.player}'
return card_string
if __name__ == "__main__":
g = Game()
for i in range(0, 4):
g.players.append(Player())
for i in range(0, 52):
g.players[i % 4].cards.append(Card(int(i % 13), int(i / 13), int(i % 4)))
print(Card(int(i % 13), int(i / 13), int(i % 4)))