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
相关产品推荐
相关产品推荐

