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

Python入门者求助:Blackjack游戏中如何获取卡牌数值并求和

解决Blackjack卡牌求和问题

你的核心问题是当前函数没有返回卡牌的数值,而且抽到Ace时的逻辑存在错误——原代码里抽到Ace后会重新随机选一张牌,等于直接放弃了Ace,完全不符合游戏规则。另外print()函数的返回值是None,所以你把它赋值给变量也得不到有效卡牌数值。

修正后的函数实现

先调整函数逻辑,让它返回卡牌的数值,同时正确处理Ace的选择:

import random

# 定义卡牌和花色列表(可根据实际需求调整)
CARDS = ['ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'jack', 'queen', 'king']
HOUSES = ['方块', '梅花', '黑桃', '红桃']

def random_card_pick():
    card = random.choice(CARDS)
    # 转换卡牌为对应数值
    if card == 'ace':
        # 保留Ace,让用户选择对应数值,增加输入验证避免无效值
        while True:
            try:
                ace_value = int(input('你抽到了Ace,请选择它的值:1 或 11?'))
                if ace_value in (1, 11):
                    card_value = ace_value
                    break
                else:
                    print('请输入1或11!')
            except ValueError:
                print('请输入有效的数字!')
    elif card in ['jack', 'queen', 'king']:
        # J/Q/K统一按10计算
        card_value = 10
    else:
        # 数字牌直接转成整数
        card_value = int(card)
    
    # 打印卡牌信息
    house = random.choice(HOUSES)
    print(f"{card} of {house}")
    
    # 返回卡牌数值,用于后续求和
    return card_value

调用函数并计算总和

现在调用两次函数,拿到两张牌的数值后直接相加即可:

# 发第一张牌并获取数值
card1_value = random_card_pick()
# 发第二张牌并获取数值
card2_value = random_card_pick()

# 计算手牌总和
total = card1_value + card2_value
print(f"你的手牌总和是:{total}")

关键错误修正说明

  • 去掉了原函数中抽到Ace后重新抽牌的代码,这会丢失Ace的选择机会,完全不符合游戏逻辑。
  • 用return语句替代print赋值,print仅用于展示卡牌信息,真正的数值通过return传递给调用方。
  • 增加输入验证,避免用户输入非1/11的无效内容,提升程序稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:55:09