二十一点程序,经销商识别Ace值有问题[python]

时间:2016-04-14 03:05:41

标签: python blackjack

嘿伙计们在玩二十一点时,经销商会知道ace可以是1或11,但是当它有机会将它作为1时,它就会破灭。例如:

从2个ace开始,你在技术上有2个,12个或22个。

让我们说经销商获得的第一张牌是杰克。

因此你有:a 12,a 22或32。 因此,计算机保持12的态度,并添加千斤顶使其成为22并输掉。

这是代码

def evaluateHand(self, dHand):
        DValue = 0

        for card in dHand:
            rank = card.getRank()
            if rank > 10:
                rank = 10
            elif rank == 1 and DValue + 11 <= 21:
                rank = 11
            DValue = DValue + rank


        return DValue 

这里是我为ace定义我的价值的地方,我很确定这是我的elif声明,但我尝试的其他任何事情都没有。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

你手上可以有很多A,但只有一个可以在没有破坏的情况下被估价为11。

  • 首先评估价值为1

  • 的牌的价值
  • 然后,如果手的值是&lt; 12手中有一个ace,值为11时的值(手数增加10)

  • 返回正确的手牌值。

这是一些可能的代码(由于你没有指定数据结构,所以有一些伪代码。)

def get_hand_value(self, hand):       
    hand_value = 0
    for card in hand:
        hand_value += card.get_value()      # this evaluates the hand with all aces at 1
    if hand_value < 12 and ace in hand:     # this line is pseudocode, IDK your data structure
                                            # it evaluates one ace (if any) at 11 (if possible w/o busting)
        hand_value += 10
    return hand_value