在二十一点找到多手的总数

时间:2016-02-03 17:39:31

标签: python python-3.x

我有一个二十一点游戏的多手牌。

离。

Player 1 = ['AD', 'AS']
Player 2 = ['6C', '3D']
Player 3 = ['TD', 'AH']

我试图通过将每个牌的价值引用到牌组词典中来获取每个牌的价值:

deckValue = {'AH':11, '2H':2,'3H':3, '4H':4, '5H':5, '6H': 6, '7H': 7, '8H':8, 
         '9H':9, 'TH':10, 'JH':10, 'QH':10, 'KH':10, 'AC':11, '2C':2,'3C':3,
         '4C':4, '5C':5, '6C':6,'7C': 7, '8C':8, '9C':9, 'TC':10, 'JC':10, 
         'QC':10, 'KC':10, 'AS':11, '2S':2,'3S':3, '4S':4, '5S':5, '6S': 6, 
         '7S': 7, '8S':8, '9S':9, 'TS':10, 'JS':10, 'QS':10, 'KS':10, 
         'AD':11, '2D':2,'3D':3, '4D':4, '5D':5, '6D': 6, '7D': 7, '8D':8, 
         '9D':9, 'TD':10, 'JD':10, 'QD':10, 'KD':10}

使用

可以在字典中查找值

deckvalue.get(key)

deckvalue [键]

其中key是每手牌中的字符串。 deckvalue.get(' AH')= 11

为了实现我想要做的事情,我使用for循环遍历每只手并找到总值。

def calculate_hand(pHands):
    # What I have so far
    total = 0
    for i in pHands:
        deckValue.get(pHands[i][0])
        deckValue.get(pHands[i][1])
        total = #value of 0 + value of 1 
return

pH值为:

pHands = [['AD', 'AS'], ['6C', '3D'], ['TD', 'AH']]

但我得到的列表索引必须是整数,而不是列表'错误

我是Python的新手,所以我不知道这是什么(但可能是由于pH值包含str元素而不是int元素)。

我怎样才能获得每只手的个人总数?

例如。

pHands[0] = 22
pHands[1] = 9
pHands[2] = 21

我是否必须分配一个新变量来保存每手总数?

感谢您的任何意见。

1 个答案:

答案 0 :(得分:4)

如果您在列表上进行迭代,则不会获得索引,但实际上是列表元素。更好:

def calculate_hand(pHands):
    # What I have so far
    values = []
    for (card1, card2) in pHands:
        total = deckValue.get(card1) + deckValue.get(card2)
        values.append(total)
    return values

此外,还有一种更简洁的方式来获取卡的价值:

def getvalue(card):
    val = card[0]
    return 11 if val=="A" else 10 if val in "TQKJ" else int(val)

如果你有这样的函数,你实际上可以在单个列表理解中编写整个calculate_hand函数:

def calculate_hand(pHands):
    return [getvalue(card1) + getvalue(card2) for (card1, card2) in pHands]