【问题标题】:How would I define 'Ace' in a blackjack deck as 11 or 1?我如何将二十一点牌中的“王牌”定义为 11 或 1?
【发布时间】:2019-09-09 09:19:12
【问题描述】:

我正在尝试创建二十一点游戏。我唯一的问题是如果 11 会爆牌,如何将 Ace 更改为 1。

当玩家手牌被破坏时,我尝试使用 score.append(Ace = 1)。唯一的问题是,此后的每个 ace 现在都是 1。因此,如果庄家有 ace,则 ace 是 1。如果我在最后重新计算得分时尝试将其改回 11,玩家得分现在有10 额外分数(将 10 与 ace 值 1 相加得到 11)。除了追加之外,我还尝试添加另一个字典,但我不知道如何实现另一个字典。我还尝试完全重写我的程序以减少类。

我希望程序能够根据值将 ace 更改为 1 或 11。我不知道还能尝试什么。如果有利于帮助我理解如何做,我可以添加更多代码。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    简单的数字总和无法捕获 ace 可能具有的两个可能值。相反,您需要添加一些额外的代码来处理二十一点的这一方面。

    一种相对简单的方法是在将牌的正常值相加的同时计算 A 的数量。如果您失败了,您可以调整分数,以 10 为增量,为您看到的每个 ace(10,因为这是 11 和 1 之间的差异)。

    def get_score(self):
        score = 0
        aces = 0
        for c in cards:
            score += c.get_score()      # aces should return a value of 11
            if c.getrank() == "Ace":    # count aces
                aces += 1
    
        while aces > 0 and score > 21:  # try to avoid a bust by changing ace values from 11 to 1
            score -= 10                 # until the bust has ben avoided, or you're out of aces
            aces -= 1
    
        return score
    

    【讨论】:

    • 感谢您的帮助。我在我制作的重写文件中试过这个,但没有 if c.getrank() == 'Ace':
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2010-10-24
    • 2012-11-11
    • 2018-04-02
    • 2020-06-18
    • 2014-07-19
    • 2021-06-10
    相关资源
    最近更新 更多