Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在列表中追加时获取运行时错误_Python 3.x - Fatal编程技术网

Python 3.x 在列表中追加时获取运行时错误

Python 3.x 在列表中追加时获取运行时错误,python-3.x,Python 3.x,我想做一个游戏,其中“卡”是游戏中各种卡的一个类。 “玩家”作为一个类,它包含一个包含卡对象的卡列表。 “游戏”作为一个类,它包含一个包含玩家对象的玩家列表。 因此,当我创建一个游戏对象时,它运行良好。 当玩家对象被添加到游戏对象中时,一切正常。 但当卡对象附加到玩家对象中时出现问题。所有牌对象都附加在所有玩家中 我正在使用PyCharm和Python3.6.2(v3.6.2:5fd33b5) 预期-据我所知,每位玩家应包含13张卡。原因是您如何定义玩家类别cards被定义为一个类变量,这意味着

我想做一个游戏,其中“卡”是游戏中各种卡的一个类。 “玩家”作为一个类,它包含一个包含卡对象的卡列表。 “游戏”作为一个类,它包含一个包含玩家对象的玩家列表。 因此,当我创建一个游戏对象时,它运行良好。 当玩家对象被添加到游戏对象中时,一切正常。 但当卡对象附加到玩家对象中时出现问题。所有牌对象都附加在所有玩家中

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


预期-据我所知,每位玩家应包含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)))