如何洗牌庄家继承的牌组?

2024-06-16 14:29:24 发布

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

我制作了一副可以洗牌的牌。我构建了player模块,并让dealer类继承了牌组。(因为庄家是洗牌的人,而不是一副牌自己洗牌)我试着把这两张都导入一个main,让庄家洗牌。不,事情开始破裂了。你知道吗

过了一段时间,我开始尝试错误,添加random()和self以及任何你能想到的东西。什么都没用。在这一点上,主文件几乎被删除了,因为我不只是理解youtube上的任何东西,真的。你知道吗

import random as rd


class Card:
    card_rank = [str(n) for n in range(2, 10)]
    card_rank.extend(['Ten', 'Jack', 'Queen', 'King', 'Ace'])
    card_suit = ['Spades', 'Clubs', 'Diamonds', 'Hearts']

    def __init__(self, rank, suit):
        assert 2 <= rank <= 14 and 1 <= suit <= 4
        self.rank = rank
        self.suit = suit

    def __str__(self):
        return '{} of {}'.format(Card.card_rank[self.rank - 2], Card.card_suit[self.suit - 1])


class Deck:
    def __init__(self):
        self.cards = [Card(rank, suit) for rank in range(2, 14 + 1) for suit in range(1, 4 + 1)]

    def is_empty(self):
        return not self.cards

    def pick(self):
        rd.shuffle(self.cards)
        return self.cards.pop()
import CardDeck


class Player:
    def __init__(self):
        self.hand = []


class Human(Player):
    def __init__(self):
        super(Human, self).__init__()
        self.name = input()


class Dealer(Player, CardDeck.Deck):
    def __init__(self):
        super(Dealer, self).__init__()

    def deck_shuffle(self):
        while not CardDeck.Deck.is_empty:
            print(CardDeck.Deck.pick)
>     import CardDeck as cd
>     import Players as pl
>     
>     
>     dealer = pl.Dealer
>     
>     
>     dealer.deck_shuffle

我要庄家洗牌。我想通过打印纸牌看看是否有效。我计划做更多的事,但现在,我很困。(很抱歉格式化了,这个网站把我弄糊涂了)


Tags: importselfinitdefascardclasscards
2条回答

如果要保留继承,需要确保初始化所有的超类。你知道吗

Dealer类中调用super(Dealer, self).__init__(),它只初始化Player超类。因此Deck中的cards字段永远不会被创建。你知道吗

您需要在经销商的__init__中添加显式的Deck.__init__(self)调用,或者将super().__init__()添加到Player。你知道吗

有关更多信息,请参阅this other question。你知道吗

然后,在deck_shuffle中,只需调用self.pick()。你知道吗

编辑:
总之,代码应该是:
卡片组.py不变
玩家.py地址:

import CardDeck


class Player:
    def __init__(self):
        # Added superclass initialisation (for cooperative multiple inheritance)
        super(Player, self).__init__()
        self.hand = []

# Unchanged
class Human(Player):
    def __init__(self):
        super(Human, self).__init__()
        self.name = input()


class Dealer(Player, CardDeck.Deck):
    def __init__(self):
        super(Dealer, self).__init__()

    def deck_shuffle(self):
        while not self.is_empty:
            print(self.pick())

你这样称呼它:

import Players as pl

dealer = pl.Dealer()
dealer.deck_shuffle()

deck是一个列表,因此您可以导入random,并在全局或经销商手中创建的deck实例上使用random.shuffle(deck)。你知道吗

这是一个black jack script从一个课程,我正在遵循它会帮助你很多。它也得到了一些解释。你知道吗

相关问题 更多 >