与其说是一个问题或问题,只是想知道别人会如何处理这个问题。我正在python中通过python的类结构制作一个二十一点游戏,我已经将这个卡片作为字符串制作了一个数组。这有助于这样一个事实:4张牌在二十一点中的价值是10而一张牌的价值可以是1或11.但是,计算牌的价值很难。套牌位于 init 中。怎么会这样更好?我考虑过字典,但不处理重复。任何想法都表示赞赏。对不起,如果这是一个不好的帖子,我是新来的。
self.deck = [['2']*4, ['3']*4, ['4']*4, ['5']*4, ['6']*4, ['7']*4, \
['8']*4, ['9']*4, ['10']*4, ['J']*4, ['Q']*4, ['K']*4, \
['A']*4]
def bust(self, person):
count = 0
for i in self.cards[person]:
if i == 'A':
count += 1
elif i == '2':
count += 2
elif i == '3':
count += 3
elif i == '4':
count += 4
elif i == '5':
count += 5
elif i == '6':
count += 6
答案 0 :(得分:1)
帮自己一个忙,得到卡片值的明确地图:
CARD_VALUE = {
'2': 2,
'3': 3,
# etc
'A': 1,
'J': 12,
'Q': 13,
'K': 14,
}
# Calculate the value of a hand;
# a hand is a list of cards.
hand_value = sum(CARD_VALUE[card] for card in hand)
对于不同的游戏,您可以使用不同的值映射,例如使用值为1或11的Ace。您可以将这些映射放入以游戏名称命名的字典中。
另外,我不会把我的手表示作为简单的卡片列表。相反,我会使用计数包装重复值:
# Naive storage, even unsorted:
hand = ['2', '2', '3', '2', 'Q', 'Q']
# Grouped storage using a {card: count} dictionary:
hand = {'2': 3, '3': 1, 'Q': 2}
# Allows for neat operations
got_a_queen = 'Q' in hand
how_many_twos = hand['2'] # only good for present cards.
how_many_fives = hand.get('5', 0) # 0 returned since '5' not found.
hand_value = sum(CARD_VALUE(card) * hand[card] for card in hand)
希望这有帮助。
答案 1 :(得分:0)
以下是您可以做的事情:
让您的牌组成为一个字符串
import random
cards = 'A'*4 + '2'*4 + ... + 'K'*4
self.deck = ''.join(random.sample(cards,len(cards)))
values = {'2': 2,
'3': 3,
'4': 4,
'5': 5,
'6': 6,
'7': 7,
'8': 8,
'9': 9,
'T': 10,
'J': 10,
'Q': 10,
'K': 10
}
然后将手定义为字符串并使用count方法:
def counth(hand):
"""Evaluates the "score" of a given hand. """
count = 0
for i in hand:
if i in values:
count += values[i]
else:
pass
for x in hand:
if x == 'A':
## makes exception for aces
if count + 11 > 21:
count += 1
elif hand.count('A') == 1:
count += 11
else:
count += 1
else:
pass
return count