带Python的面向对象Black Jack-Deck没有长度?
我正在尝试用Python创建一个21点游戏。然而,当我尝试洗牌并从我的牌组对象中发牌时,我得到一个错误,表明我的“牌组”对象没有长度。有人能帮忙解决这个问题吗?谢谢带Python的面向对象Black Jack-Deck没有长度?,python,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
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()
您可能试图在
Deck
对象本身上使用len
函数,而不是在Deck
对象的实例变量Deck
上使用它。如果d
是类Deck
的一个实例,那么应该调用len(d.Deck)
,或者更好地,为self.Deck
实现一个getter方法,并使用类似len(d.get_Deck())
的东西
操作后编辑:
您正试图在组
对象本身上调用shuffle
,而不是在组
对象中存储的列表
组。部分混淆可能是因为您决定将类命名为Deck
及其实例变量Deck
。如果您想要列表
deck
,您需要在交易
函数中发出deck=deck().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
列表是什么
deck = Deck() should be deck = Deck().deck
在Deck()
上尝试random.shuffle
将导致:
AttributeError: Deck instance has no attribute '__len__'
Deck没有len,其中Deck()。Deck
指的是您的\uuuu main\uuuu.Card实例的列表,其长度为
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__'
[42]中的d=Deck()
在[43]:d.deck.self.deck有一个实例列表,因为它是一个实例列表
Out[43]:52
在[44]中:d=甲板()
在[45]中:d.______;len ___;()
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->一维
AttributeError:甲板实例没有属性“\uuuu len\uuuu”
将序列x移动到位。可选参数random是一个0参数函数,在[0.0,1.0]中返回一个随机浮点;默认情况下,这是函数random()。
请注意,即使对于非常小的len(x),x的置换总数也大于大多数随机数生成器的周期;这意味着长序列的大多数置换永远不会生成
注意len(x)
您是如何得到错误的?您是否试图调用类似len(deck)
?您可以共享产生错误的代码吗?另外,您有一个deck
类,但您没有显示名为deck
的对象。如果我调用x=deck()
那么len(x.deck)
我得到了52
。这是完整的代码。如果你把你的问题减少到一个最小的例子(可能是20行左右),这对其他人可能真的很有帮助只显示与重现您的问题相关的内容。我知道获得这样一个最小的示例是一项工作,但它大大增加了您的问题的价值,并使答案对社区更有价值。:)他为什么需要getter方法?@Padraic Cunningham他不需要getter方法。为什么会像您建议的那样更好d?@Padraic Cunningham为类的使用提供了一个接口,而不必知道它的内部结构。在我看来,你应该只编写一些类,当你完全确定自己在做什么时,这些类会迫使你在它们的肠道里摸索。OP看起来像这样的人吗?@user3002315我在我的帖子中解释过,哪部分是unclear?简而言之:x=Deck()创建一个具有实例变量Deck的对象。您可以使用点符号访问此实例变量,即Deck().deck或x.deck。shuffle函数仅适用于列表。deck对象不是列表,但其实例变量deck是。至于您的新问题:您需要在deck对象上调用deal_card,而不是在列表组上。