面向对象的黑杰克与Python - 甲板没有长度?

时间:2014-05-31 22:40:38

标签: python

我试图用Python创建一个二十一点游戏。然而,当我试图洗牌并从我的套牌对象中处理一张牌时,我收到一条错误,指出我的牌组是'对象没有长度。有人可以帮忙解决这个问题吗?感谢

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

2 个答案:

答案 0 :(得分:1)

您可能尝试在len对象本身上使用Deck函数,而不是在deck对象的实例变量Deck上使用它。如果d是类Deck的实例,则应致电len(d.deck),或者甚至更好地为self.deck实施getter方法并使用len(d.get_deck())之类的内容。

后运 - 编辑编辑:

您试图在shuffle对象本身上调用Deck,而不是list deck对象中存储的Deck Deck。部分混淆可能来自于您决定将类命名为deck及其实例变量list。如果您需要deck deck = Deck().deck,则需要在deal函数中发出deal_card

编辑以回应评论:

当然,您无法在list deck上致电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

该符号应该有助于明确deck这里的list对象以及{{1}} {{1}}的内容。

答案 1 :(得分:0)

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

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

AttributeError: Deck instance has no attribute '__len__'

Deck没有len,其中Deck().deck指的是__main__.Card instance's的长度列表。

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)