如何统计Python卡牌游戏中各玩家手牌的A(Ace)数量
Python卡牌游戏Ace统计解决方案
现有代码问题
- 两个玩家发牌函数仅做打印输出,没有返回存储手牌,后续无法统计牌面信息
- player1函数中循环取牌时直接remove牌组元素会触发索引错位,导致跳牌取牌的逻辑错误
修改后完整可运行代码
import random import itertools # 生成52张标准牌组并洗牌 carddeck = list(itertools.product(['A','2','3','4','5','6','7','8','9','10','J','Q','K'], ['Spade', 'Club', 'Diamond', 'Heart'])) random.shuffle(carddeck) # 通用发牌函数:返回n张手牌,自动从牌组移除已发的牌 def deal_hand(n): hand = [] for _ in range(n): # 从牌堆顶部取牌 card = carddeck.pop(0) hand.append(card) return hand # 给玩家1发牌并打印 print('Player 1 Hand') player_1_hand = deal_hand(5) for card in player_1_hand: print('Player 1:', card[0], card[1]) print('\n\nPlayer 2 Hand') # 给玩家2发牌并打印 player_2_hand = deal_hand(5) for card in player_2_hand: print('Player 2:', card[0], card[1]) # 统计玩家1的Ace数量 player1_ace_count = sum(1 for card in player_1_hand if card[0] == 'A') # 统计玩家2的Ace数量 player2_ace_count = sum(1 for card in player_2_hand if card[0] == 'A') # 输出统计结果 print(f'\nPlayer1持有的Ace数量:{player1_ace_count}') print(f'Player2持有的Ace数量:{player2_ace_count}')
核心逻辑说明
- 新增通用发牌函数
deal_hand,通过pop(0)从牌堆顶部取牌,自动处理牌组的元素移除,避免索引错位问题 - 统计Ace时直接遍历玩家手牌列表,匹配牌面第一个元素为
'A'的项计数即可,使用生成器表达式的写法简洁高效
内容的提问来源于stack exchange,提问作者Spice Adams
相关产品推荐
相关产品推荐

