如何将洗牌发牌Python代码与原扑克牌生成代码整合?
扑克牌组生成与洗牌发牌整合方案
需求说明
整合两段代码:先通过原二维列表逻辑生成并输出完整牌组,再基于该牌组洗牌,分发2手各5张牌,避免重复构建牌组数据。
整合后的完整代码
import random # 原牌组生成逻辑 dCardNames = ['2','3','4','5','6','7','8','9','10','J','Q','K','A'] dCardValues = ['2','3','4','5','6','7','8','9','10','11','12','13','14'] dSuits = ["Clubs","Spades","Diamonds","Hearts"] # 构建二维列表存储牌组 aCards = [['' for i in range(52)] for j in range(3)] i = 0 while i < 13: aCards[0][i] = dCardNames[i] aCards[0][i + 13] = dCardNames[i] aCards[0][i + 26] = dCardNames[i] aCards[0][i + 39] = dCardNames[i] aCards[1][i] = dSuits[0] aCards[1][i + 13] = dSuits[1] aCards[1][i + 26] = dSuits[2] aCards[1][i + 39] = dSuits[3] aCards[2][i] = dCardValues[i] aCards[2][i + 13] = dCardValues[i] aCards[2][i + 26] = dCardValues[i] aCards[2][i + 39] = dCardValues[i] i += 1 # 输出原完整牌组 print("原完整牌组:") i = 0 while i < 52: print(f"{aCards[0][i]} {aCards[1][i]} {aCards[2][i]}") i += 1 # 从原二维列表转换为元组列表,方便洗牌和处理 # 每个元素是(牌名, 花色, 数值) deck = [(aCards[0][idx], aCards[1][idx], aCards[2][idx]) for idx in range(52)] # 洗牌 random.shuffle(deck) # 分发2手各5张牌 hands_amt = 2 cards_per_hand = 5 hands = {} for hand_num in range(1, hands_amt + 1): hands[hand_num] = deck[:cards_per_hand] deck = deck[cards_per_hand:] # 格式化输出手牌 print("\n# 随机分发的手牌:") for hand_num, cards in hands.items(): print(f"Hand {hand_num}:") for card in cards: print(f"{card[1]} {card[0]}") print()
关键整合点
- 复用原牌组数据:通过列表推导式将原二维列表
aCards转换为元组列表deck,每个元组存储单张牌的完整信息,无需重新构建牌组。 - 高效洗牌:使用
random.shuffle()直接打乱牌组,比随机选择再删除的方式更高效、稳定。 - 格式化输出:替换原字典打印方式,按照预期排版输出手牌,结果更易读。
输出示例(部分)
原完整牌组: 2 Clubs 2 3 Clubs 3 ... A Hearts 14 # 随机分发的手牌: Hand 1: Hearts K Diamonds 9 Hearts 6 Hearts 5 Clubs 9 Hand 2: Spades Q Diamonds A Clubs 3 Hearts 2 Diamonds 4
内容的提问来源于stack exchange,提问作者William Rivas
相关产品推荐
相关产品推荐

