Python二十一点游戏中修改calculate_hand_value函数调整Ace取值方法
实现逻辑
- 先遍历手牌计算初始总点数(Ace默认按11取值),同时统计手牌里Ace的数量
- 当总点数超过21且还有未调整的Ace时,每次将1个Ace的取值从11改为1,对应总点数减去10,同时可用Ace计数减1,直到总点数≤21或没有Ace可以调整为止
修改后的
calculate_hand_value函数 def calculate_hand_value(hand): hand_value = 0 ace_count = 0 # 计算初始总点数,同时统计Ace数量 for card in hand: card_val = get_card_value(card) hand_value += card_val if card_val == 11: ace_count += 1 # 超过21时调整Ace取值 while hand_value > 21 and ace_count > 0: hand_value -= 10 # 11改为1,差值为10 ace_count -= 1 return hand_value
效果示例
比如手牌为["Ace of clubs", "King of spades", "Five of hearts"]时,初始计算总点数为11+10+5=26,超过21,调整1个Ace后总点数变为16,符合二十一点规则。如果手牌包含2张Ace加1张K,初始总点数为11+11+10=32,调整2次Ace后总点数为12,结果正确。
内容的提问来源于stack exchange,提问作者ennh
相关产品推荐
相关产品推荐

