【问题标题】:Blackjack program, having issues with dealer recognizing Ace value [python]二十一点程序,经销商识别 Ace 值时遇到问题 [python]
【发布时间】:2016-08-05 10:04:23
【问题描述】:

嘿伙计们,玩二十一点时,庄家知道 A 可以是 1 或 11,但是当它有机会将其打成 1 时,它就失败了。例如:

从 2 个 A 开始,从技术上讲,您有 2、12 或 22。

假设庄家拿到的第一张牌是杰克。

因此,您有:12、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 语句中,但我尝试的其他方法都没有。 有什么建议吗?

【问题讨论】:

  • 小建议:将card.getRank() 改为使用属性,并将其命名为rank。创建一个名为 hand_value 的新属性,用于处理卡的评估 (1-10)。你的牌应该知道它们的价值,你的牌不应该关心它们的等级(除了 A 必须是特殊情况)
  • 考虑一个类似于thiscard.py

标签: python blackjack


【解决方案1】:

一手牌可以有很多 A,但只有一个可以在 11 点不破牌。

  • 首先用 1 点的 A 评估手牌的价值

  • 那么,如果手牌值

  • 返回正确的手牌值。

这是一些可能的代码(由于您没有指定数据结构,因此带有一些伪代码。)

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

【讨论】:

  • 我写代码(因此看到了这些初学者纸牌游戏练习)已经有十多年了,我作为专业经销商已经有 5 年或 6 年的月光,我从未考虑过从下往上接近这个。这应该很明显,但出于某种原因,我总是将 A 计为 11 并减去 10,这迫使我跟踪手中有 多少 个 A (for _ in range(num_aces): if hand_value &gt; 21: hand_value -= 10)。这好多了。
猜你喜欢
  • 2012-09-04
  • 2019-05-17
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
相关资源
最近更新 更多