【发布时间】: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 = 6、self.full_deck = 'A23456789JQK' * 4 * num_decks然后random.shuffle(self.full_deck)?
标签: python list class oop methods