You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blackjack程序分数超21时无法将A(11)转为1的问题排查

问题分析与解决方案

你的代码问题出在遍历手牌的方式上:当你用for card in player_hand循环时,card只是列表元素的临时副本,修改card = 1并不会改变player_hand列表里的实际元素,所以重新计算sum(player_hand)时,分数还是原来的数值,手牌也没更新。

修正方案一:通过索引修改列表元素

这种方法会逐个检查手牌,找到第一个值为11的A就将其改为1,适合只需要调整一个A就能让分数回到21以内的场景:

else:
    player_hand.append(deal_card())
    player_score = sum(player_hand)
if player_score > 21:
    # 用索引遍历列表,直接修改对应位置的元素
    for i in range(len(player_hand)):
        if player_hand[i] == 11:
            player_hand[i] = 1
            player_score = sum(player_hand)
            # 改完一个A后可选择退出循环,避免多次修改(按需调整)
            break
print(player_hand)

修正方案二:生成新列表替换原手牌

这种方法会将手牌中所有值为11的A都转为1,适合需要处理多个A的场景:

else:
    player_hand.append(deal_card())
    player_score = sum(player_hand)
if player_score > 21:
    # 生成新列表,替换所有11为1
    player_hand = [1 if card == 11 else card for card in player_hand]
    player_score = sum(player_hand)
print(player_hand)

内容的提问来源于stack exchange,提问作者Cydadel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:39:54