带Python Deck的面向对象的Black Jack没有长度?

2024-10-09 03:24:58 发布

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

我正在尝试用Python创建21点游戏。然而,当我尝试洗牌并从牌堆对象中发牌时,我得到一个错误,说明我的牌堆对象没有长度。有人能帮忙解决这个问题吗?谢谢

def deal():
    deck = Deck()
    player = Hand()
    dealer = Hand()
    random.shuffle(deck)
    player.add_card(deck.deal_card())
    player.add_card(deck.deal_card())
    dealer.add_card(deck.deal_card())
    dealer.add_card(deck.deal_card())
    prompt()

Tags: 对象add游戏def错误randomcardplayer
2条回答

您可能试图在Deck对象上使用len函数,而不是在Deck对象的实例变量deck上使用它。如果d是类Deck的实例,则应该调用len(d.deck),或者更好地为self.deck实现一个getter方法,并使用类似len(d.get_deck())。在

操作后编辑编辑:

您试图对Deck对象本身调用shuffle,而不是存储在Deck对象中的listdeck。混淆的部分原因可能是您决定将类命名为Deck及其实例变量deck。如果需要listdeck,则需要在deal函数中发出{}。在

根据评论进行编辑:

当然,您不能在listdeck上调用deal_card。你能做到的

def deal():
    deckObject = Deck()
    deckList = deckObject.deck 
    player = Hand()
    dealer = Hand()
    random.shuffle(deckList)
    player.add_card(deckObject.deal_card())
    player.add_card(deckObject.deal_card())
    dealer.add_card(deckObject.deal_card())
    dealer.add_card(deckObject.deal_card())
    prompt()

这个符号应该清楚地表明这里的Deck对象是什么,decklist。在

deck = Deck() should be deck = Deck().deck 

Deck()上尝试random.shuffle将导致:

^{pr2}$

Deck没有len,其中Deck().deck表示您的{}列表,它有一个长度。在

In [42]: d = Deck()

In [43]: d.deck.__len__() # self.deck has a __len__() as it is a list of instances
Out[43]: 52


In [44]: d = Deck()

In [45]: d.__len__()
                                     -
AttributeError                            Traceback (most recent call last)
<ipython-input-45-c2cc108c72f0> in <module>()
  > 1 d.__len__()

AttributeError: Deck instance has no attribute '__len__'

random.shuffle在适当的位置洗牌序列x。可选参数random是一个0参数函数,返回[0.0,1.0]中的随机浮点;默认情况下,这是函数random()。 注意,即使是很小的len(x),x的置换总数也比大多数随机数生成器的周期大;这意味着一个长序列的大多数置换永远无法生成。

注意len(x)。在

相关问题 更多 >

    热门问题