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

时间:2019-04-30 22:08:25

标签: python

我建立了可以洗牌的牌组。我构建了播放器模块,并让发牌人类继承了套牌。 (因为发牌者是洗牌的人,而不是洗牌本身的牌组),我试图将两者都导入到主卡中并让发牌者洗牌。不,事情开始破裂。

过了一会儿,我开始进行反复试验,添加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

我希望发牌人洗牌。我正在寻找通过打印出甲板是否可行。我计划做更多,但就目前而言,我仍然很困。 (对格式感到抱歉,此网站使我感到困惑)

3 个答案:

答案 0 :(得分:2)

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

这是我遵循的一门课程中的black jack script,可以帮助您很多。也有一些解释。

答案 1 :(得分:1)

您错过了函数调用中的(),以及Players.py文件中的一些小事情。

要进行函数调用,您需要将函数参数放在其名称之后。

is_empty()而非is_empty

也在这里

dealer = pl.Dealer ()

dealer.deck_shuffle ()
import CardDeck


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


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


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

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

更改注释:

  • 您没有初始化Dealer,因为您没有放置()
  • 您没有进行洗牌(原因相同)
  • 播放器的deck_shuffle方法应该在其实例上调用了函数

没有括号,您引用的是函数/方法,而不是调用它。 例如

>>> dealer.deck_shuffle
<bound method Dealer.deck_shuffle of <Players.Dealer object at 0x7fcbdc2ff4e0>>

与您尝试调用is_empty方法的方式相同。

>>> CardDeck.Deck.is_empty
<function Deck.is_empty at 0x7fcbdc297730>

如果您尝试调用不是static的方法,则会出现异常:

>>> CardDeck.Deck.is_empty()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: is_empty() missing 1 required positional argument: 'self'

您需要具有该方法将在其上起作用的对象的实例。

答案 2 :(得分:0)

如果要保留继承,则需要确保初始化所有超类。

在您的SELECT usr.* FROM dbo.[users] usr WHERE usr.[name] <> CONVERT(NVARCHAR(MAX), CONVERT(VARCHAR(MAX), usr.[name] COLLATE Latin1_General_100_BIN2)) OR usr.[address] <> CONVERT(NVARCHAR(MAX), CONVERT(VARCHAR(MAX), usr.[address] COLLATE Latin1_General_100_BIN2)) OR usr.[description] <> CONVERT(NVARCHAR(MAX), CONVERT(VARCHAR(MAX), usr.[description] COLLATE Latin1_General_100_BIN2)); 类中,您调用Dealer仅初始化super(Dealer, self).__init__()超类。因此,永远不会创建Player中的cards字段。

您需要在经销商的Deck中添加一个明确的Deck.__init__(self)通话,或者在__init__中添加super().__init__()

有关更多信息,请查看this other question

然后,在您的Player中,您只需致电deck_shuffle

编辑:
总之,代码应为:
CardDeck.py不变
Players.py:

self.pick()

您这样称呼:

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())