Python卡牌游戏开发:如何识别并移除扑克牌列表中符合规则的对子
实现思路
- 先定义花色和颜色的映射关系:
{'♠': '黑', '♣': '黑', '♡': '红', '♢': '红'},和你给出的对子定义匹配。 - 拆分卡牌:每张牌的最后一位是花色,剩余字符为点数,可兼容
10这类双字符点数。 - 按
(点数, 颜色)对所有卡牌分组,每组每满2张就移除1对,若组内总数量为奇数则保留1张。 - 最后打乱剩余卡牌顺序返回。
完整代码
import random from collections import defaultdict def remove_pairs(cards): color_map = {'♠': '黑', '♣': '黑', '♡': '红', '♢': '红'} # 按点数+颜色分组存储卡牌 card_groups = defaultdict(list) for card in cards: suit = card[-1] rank = card[:-1] card_key = (rank, color_map[suit]) card_groups[card_key].append(card) result = [] for group in card_groups.values(): # 每2张消去1对,奇数张则保留1张 if len(group) % 2 == 1: # 可任选组内一张保留,这里取第一张即可 result.append(group[0]) # 打乱结果顺序 random.shuffle(result) return result # 测试调用 input_cards = ['9♠', '5♠', 'K♢', 'A♣', 'K♣', 'K♡', '2♠', 'Q♠', 'K♠', 'Q♢', 'J♠', 'A♡', '4♣', '5♣', '7♡', 'A♠', '10♣', 'Q♡', '8♡', '9♢', '10♢', 'J♡', '10♡', 'J♣', '3♡'] print(remove_pairs(input_cards))
说明
你给出的预期输出可能仅为顺序参考,因为代码最后会执行随机打乱,最终返回的列表元素顺序不固定,只要符合规则即可。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

