在一副牌中添加两个小丑的最佳方法是什么?

2024-05-12 20:16:35 发布

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

因此,对于非纸牌玩家来说,一副牌通常由52张牌组成(4套牌,每个牌有13个等级)。但是对于我正在创建的牌组,我想包括两个等级相同的小丑(我将称他们为黑色小丑和红色小丑),他们的等级将高于13个等级,使牌的总数达到54张,总等级技术上为14张

因此,这是我发现的制作一副牌(没有小丑)的最常见解决方案:

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

class Deck:
    def __init__(self):
        self.cards = []
        self.build()

    def build(self):
        for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
            for v in range (1, 14):
                self.cards.append(Card(s, v))

我想知道是否有一种方法可以添加小丑,同时仍然能够插入洗牌他们。我对Python还是相当陌生的,所以解释一下会很有帮助


Tags: inbuildselfforinitvaluedef玩家
2条回答

在本例中,您没有对suit或value进行任何类型的类型检查或任何其他约束,那么有什么可以阻止您这样做呢

deck = [Card(suit, value) for suit in '♠♣♥♦' for value in 'A23456789XJQK']
deck.append(Card('black', 'joker'))
deck.append(Card('red', 'joker'))

似乎你不知道你实际上在做什么,所以让我先解释一下

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

给定这个类,您可以启动一个具有两个属性的对象:suitvalue

因此,要正确定义小丑,可以执行以下操作:

>>> joker = Card("Hearts", "J")
>>> joker.suit # get the suit
Hearts
>>> joker.value # get the value
J

假设列表中有一副牌,您只需附加以下内容:

deck.append(Card('Hearts', 'J'))

让我们看看如何用更新的代码实现这一点:

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

class Deck:
    def __init__(self):
        self.cards = []
        self.build()

    def build(self):
        for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
            for v in range (1, 14):
                self.cards.append(Card(s, v))

cardDeck = Deck()
cardDeck.cards.append(Card("Suit", "Joker")) #maybe use 0 as joker value? depends on what you're doing
# add a card to the end

print(cardDeck.cards[-1].value) # print last element's value of the card deck

输出

Joker

相关问题 更多 >