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

Python实现21点游戏时J/Q/K字符串转数值求和报错求助

21点游戏类型错误修复方案

错误原因

  • 遍历deck修改牌面值的循环仅修改了临时循环变量,没有更新deck列表的原始值,牌堆中始终存在J/Q/K字符串类型的元素
  • 直接对存储字符串牌面的手牌列表调用sum()计算总点数,整数和字符串相加触发类型错误
  • 抽牌时对A的赋值也仅修改了临时变量,没有更新到手牌列表中,A的点数逻辑不会生效

修复思路

不要直接修改牌堆的原始牌面,单独封装点数转换函数,满足显示用字符串、计算转对应数值的需求,同时兼容A的1/11点灵活判定。

可运行修正代码

import random

jugador = []
dealer = []
# 牌堆保留原始字符串牌面,方便后续打印显示
deck = ['A' ,2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'K', 'Q']

# 单独封装计算手牌总点数的函数
def calcular_puntos(mano):
    puntos = 0
    aces = 0
    # 先统计所有非A的牌点数,以及A的数量
    for card in mano:
        if card in ['J', 'Q', 'K']:
            puntos += 10
        elif card == 'A':
            aces += 1
        else:
            puntos += card
    # 处理A的点数:优先算11,超过21就改成1
    for _ in range(aces):
        if puntos + 11 <= 21:
            puntos += 11
        else:
            puntos += 1
    return puntos

# 发初始2张牌给玩家
while len(jugador) != 2:
    card = random.choice(deck)
    jugador.append(card)
    # 打印原始手牌,J/Q/K/A都会正常显示字符串
    print("当前手牌:", jugador)
    total = calcular_puntos(jugador)
    if total > 11:
        print("Hola")

效果说明

  • 打印手牌时会直接显示A/J/Q/K的字符串形式,符合显示需求
  • 计算点数时会自动把J/Q/K转成10,A可以根据总点数灵活切换1/11,符合21点的规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:51:00