首页 > 解决方案 > 我想在洗牌前回忆我的 Deck 类来洗牌以恢复牌组,这样我就不会洗牌少于 52 张牌的牌组

问题描述

好的,伙计们,我正在上甲板课,我想制作我的甲板,以便在发牌时,我可以在洗牌时恢复甲板。我认为它可以调用具有相同类名的类但 python raise "TypeError: restore_deck() missing 1 required positional argument: '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

标签: pythonclassoop

解决方案


我认为您的意思是您从 Deck 中的卡片列表中删除卡片,您想要做的是洗牌所有 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)

推荐阅读