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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:06:03