我想在洗牌方法中调用我的牌组类,在洗牌之前恢复牌组,这样我就不会洗牌少于52张牌的牌组

2024-10-02 16:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

好了,伙计们,我正在上一堂牌组课,我想制作我的牌组,这样当牌发完后,我可以在洗牌时恢复牌组。我认为它可以用相同的类名调用类,但python会引发“TypeError:restore_deck()缺少1个必需的位置参数:'self'”

class Card:
    def __init__(self, value, suit):
        self.value = value
        self.suit = suit

class Deck:
    def __init__(self):
        suits = ["Hearts", "Diamonds", "Clubs", "Spades"]
        values = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
        self.cards = [Card(value, suit) for suit in suits for value in values]


    def shuffle(self):
        def restore_deck(self):
            self = Deck()
        if self.count() < 52: # |here is the problem!
            restore_deck(self)# |
        shuffle(self.cards)
        return self

Tags: inselfforinitvaluedefrestorecard
1条回答
网友
1楼 · 发布于 2024-10-02 16:29:48

我认为你的意思是从牌组中的牌列表中移除牌,你想做的是洗牌所有52张牌,要做到这一点,我们可以随机导入模块,当我们想洗牌牌时,我们可以重新创建牌列表,然后洗牌整个列表。我添加了repr方法,以便您可以清楚地看到输出。如果您不想重新生成整个列表,您可以将“删除”的卡存储起来,并在洗牌之前将它们重新添加到列表中

import random


class Card:
    def __init__(self, value, suit):
        self.value = value
        self.suit = suit

    def __repr__(self):
        return str((self.suit, self.value))


class Deck:
    def __init__(self):
        self.suits = ["Hearts", "Diamonds", "Clubs", "Spades"]
        self.values = ['A', '2', '3', '4', '5', '6',' 7', '8', '9', '10', 'J', 'Q', 'K']
        self.cards = [Card(value, suit) for suit in self.suits for value in self.values]

    def shuffle(self):
        self.cards = [Card(value, suit) for suit in self.suits for value in self.values]
        random.shuffle(self.cards)


d = Deck()
print(d.cards)
d.shuffle()
print(d.cards)

相关问题 更多 >