我有一个课程,我为德州扑克游戏初始化了一副52张牌,然后从牌组中随机抽取一张牌,这取决于玩家的数量:
class Cards:
def __init__(self):
suits = ['s', 'c', 'd', 'h']
values = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
deck = set(itertools.product(values, suits))
self.drawn_cards = random.sample(deck,(5 + 2 * number_of_players))
然而,在打印卡片时,我希望将11替换为J',将12替换为' Q',依此类推。我不知道该怎么做。在这里做了一些搜索后,我最终将其添加到课程中:
def __str__(self):
text = ""
for x, y in self.drawn_cards:
if x == 11:
text = "J"
elif x == 12:
text = "Q"
elif x == 13:
text = "K"
elif x == 14:
text = "A"
else:
text = x
但是当我初始化一个对象(经销商)时:
dealer = Cards()
然后打印抽出的卡片:
print(dealer.drawn_cards)
我得到:
[(4, 'h'), (14, 'd'), (13, 's')........]
取代期望的:
[(4, 'h'), ('A', 'd'), ('K', 's')........]
不胜感激。
答案 0 :(得分:1)
您正在打印这些卡而不是调用其__str__
;无论哪种方式,由于__str__
未在您的实施中返回字符串,因此会出错。
最简单的解决方案是创建一个类级别映射,其中包含范围[11, 14]
的数字卡,然后在其__str__
中创建元组的中间翻译列表并返回其字符串表示形式:< / p>
class Cards:
# translate numbers to cards
_tr = {11: 'J', 12 :'Q', 13: 'K', 14: 'A'}
def __init__(self):
suits = ['s', 'c', 'd', 'h']
values = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
deck = set(itertools.product(values, suits))
self.drawn_cards = random.sample(deck,(5 + 2 * number_of_players))
def __str__(self):
r = [(x, y) if x not in self._tr else (self._tr[x], y) for x,y in self.drawn_cards]
return str(r)
现在,打印您的实例将产生所需的结果:
dealer = Cards()
print(dealer)
[(9, 'c'), ('A', 'c'), (4, 'd'), (5, 'd'), (4, 's'), ('J', 'c'), (6, 'h'), ('A', 's'), (10, 'c')]