追加列表时出现运行时错误

时间:2019-02-06 05:29:51

标签: python-3.x

我想制作一个游戏,其中“纸牌”是游戏中各种纸牌的类别。 “玩家”作为一个类,其中包含要包含纸牌对象的纸牌列表。 “游戏”作为一个类,其中包含要包含玩家对象的玩家列表。 因此,当我创建游戏对象时,一切正常。 将玩家对象附加到游戏对象中后,一切正常。 问题-但是,当纸牌对象附加在播放器对象中时。所有纸牌对象都附加在所有玩家中

我正在使用PyCharm和Python3.6.2(v3.6.2:5fd33b5)

class game:
    players=[]

class player:
    cards=[]

class card:
    def __init__(self,number,suit,player):
        self.number=number
        self.suit=suit
        self.player=player

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(i%13,i/13,i%4))

预期-据我所知,每个玩家都应该包含13张牌。

2 个答案:

答案 0 :(得分:0)

这样做的原因是您如何定义player类; cards被定义为 class 变量,这意味着player的每个实例都共享相同的cards变量。由于每个玩家应该拥有不同的牌,cards应该是一个 instance 变量,如下所示:

class player:

    def __init__(self):
        self.cards=[]

顺便说一句:通常最好给您的班级起首字母大写的名称,例如GameClassPlayer

答案 1 :(得分:0)

您可以按照以下过程进行操作:

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