【问题标题】:repeatedly remove items from list in class-object (Python)反复从类对象列表中删除项目(Python)
【发布时间】:2017-09-24 11:01:39
【问题描述】:

如何在 Python 3 中重复从列表中删除项目?对于第一个项目,我的代码有效,但如果我尝试再次应用删除项目的方法,它会产生一个TypeError。这是我正在使用的代码:

二十一点游戏

from random import choice

class Black_jack_deck(object):

    def __init__(self, full_deck=(([str(i) for i in range(2,11)]+["A","J","Q","K"])*4*6)): #a deck of 312 cards containing 6* 52 french cards
        self.full_deck = full_deck

    def draw(self, draw=True):
        self.draw = choice(self.full_deck)   #I use choice to simulate the dealer drawing a card from the top of a mixed card staple
        return self.draw
        self.full_deck = (self.full_deck).remove(self.draw)   


deck = Black_jack_deck() 

当我第二次尝试调用deck.draw() 时产生的错误如下所示:

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    deck.draw()
TypeError: 'str' object is not callable

注意:即使没有 choice() 函数,例如在洗牌的 full_deck 上使用 pop(),也会发生同样的错误。

【问题讨论】:

  • 请发布格式正确的代码。空格在 Python 中具有重要的语法意义,因此它不会起作用。
  • 你似乎有一个函数和一个变量都命名为self.draw。你如何期望 Python 知道你指的是哪一个?
  • Python“知道”它是哪一个:它是最后一个设置的。您正在覆盖一个与另一个。
  • @Morgoth 完成,现在它看起来像在我的电脑上工作了
  • 为什么 full_deck 是一个具有默认值的参数?为什么不num_decks = 6self.full_deck = 'A23456789JQK' * 4 * num_decks 然后random.shuffle(self.full_deck)

标签: python list class oop methods


【解决方案1】:

您正在用抽出的卡片覆盖Black_jack_deck.draw() 方法。因此关于deck.draw() 的错误是'str' objectis not callable

这是一个较短的版本。你需要记住鞋子里抽到的牌吗?我删除了 draw() 的布尔参数,因为我不知道它为什么在那里。

In [94]: class CardShoe(object):
    ...:     def __init__(self, num_decks=6):
    ...:         self.cards = list('A23456789JQK' * 4 * num_decks)
    ...:         random.shuffle(self.cards)
    ...:
    ...:     def draw(self):
    ...:         self.last_card_drawn = self.cards.pop()
    ...:         return self.last_card_drawn
    ...:

In [95]: shoe = CardShoe()

In [96]: shoe.draw()
Out[96]: '2'

In [97]: shoe.draw()
Out[97]: '8'

【讨论】:

  • 有记忆的东西以后会进来。现在我只是想让抽牌工作。有了布尔参数,我认为这是有必要的。谢谢你的回答,对我帮助很大:-)
猜你喜欢
  • 2011-09-29
  • 2013-08-03
  • 1970-01-01
  • 2022-12-20
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多