21点模拟器(以供检查)

0 投票
1 回答
1555 浏览
提问于 2025-04-17 15:25

我写了一个二十一点的模拟器。我的目标是估算庄家爆掉的可能性。要注意的是,庄家在手牌总点数为16时必须继续抽牌,而在17时必须停牌。如果庄家的手牌中有一张王牌(A),那么当总点数在17到21之间时,这张王牌应该算作11点;否则,它就算作1点。这个程序看起来是正常工作的,但我不是特别确定。下面是程序的核心部分。你能帮我看看代码有没有问题吗?

def simNGames(n):
    holds = busts = 0
    for i in range(n):
        score = simOneGame()
        if score <= 21:
            holds += 1
        else:
            busts += 1
    return holds, busts

def simOneGame():
    score = 0
    cardsVal = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11]
    while not gameOver(score):
        dealerScore = choice(cardsVal)

        # in case dealer hits an ace
        if dealerScore == 11:
            if score >= 6 and score <= 10:
                score += 11
            else:
                score += 1
        else:
            score += dealerScore

    return score

def gameOver(score):
    return score >= 17 and score <= 21 or score >=22

1 个回答

0

整体来看,这个逻辑看起来没问题。

我建议你为一些你担心的特定情况写一些单元测试

撰写回答