我试图用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()
答案 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)
。