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

如何在Python中检测列表内四张相同卡牌并移除,同时增加积分?

解决方案:检测并移除四张同rank卡牌

核心思路是先统计每个rank的出现次数,再批量处理符合条件的卡牌,具体步骤如下:

1. 统计Rank出现次数

不管卡牌是字典、对象还是单纯的rank字符串,先遍历所有卡牌,统计每个rank的出现次数。这比两两比对的逻辑更高效,也能轻松扩展到检测三张、四张等任意数量的重复。

手动统计(无需导入模块)

rank_counts = {}
for card in player_cards:
    rank = card["rank"]  # 若为对象则用 card.rank
    if rank in rank_counts:
        rank_counts[rank] += 1
    else:
        rank_counts[rank] = 1

用Counter简化统计(Python标准库)

from collections import Counter

rank_counts = Counter(card["rank"] for card in player_cards)

2. 识别凑齐四张的Rank

从统计结果中筛选出出现次数≥4的rank:

four_of_a_kind_ranks = [rank for rank, count in rank_counts.items() if count >= 4]

3. 移除对应卡牌并更新积分

批量过滤掉所有符合条件的rank卡牌(原地修改原列表或生成新列表),然后根据凑齐的rank数量增加积分:

完整函数示例

def process_four_of_a_kind(cards, current_score):
    # 统计rank出现次数
    rank_counts = {}
    for card in cards:
        rank = card["rank"]
        rank_counts[rank] = rank_counts.get(rank, 0) + 1
    
    # 找出凑齐四张的rank
    target_ranks = [r for r, cnt in rank_counts.items() if cnt >= 4]
    
    # 原地移除所有对应rank的卡牌
    cards[:] = [card for card in cards if card["rank"] not in target_ranks]
    
    # 更新积分:每个凑齐的rank加1分
    current_score += len(target_ranks)
    return current_score

# 测试用例
player_cards = [
    {"rank": "A", "suit": "hearts"},
    {"rank": "A", "suit": "diamonds"},
    {"rank": "A", "suit": "clubs"},
    {"rank": "A", "suit": "spades"},
    {"rank": "7", "suit": "hearts"},
    {"rank": "7", "suit": "diamonds"},
    {"rank": "7", "suit": "clubs"},
    {"rank": "7", "suit": "spades"},
    {"rank": "J", "suit": "hearts"}
]
score = 0
score = process_four_of_a_kind(player_cards, score)

print("更新后积分:", score)  # 输出:2
print("剩余卡牌:", player_cards)  # 仅保留J牌

关键细节说明

  • 用cards[:] = ...实现原地修改原列表,避免创建新列表导致引用失效;
  • 若同一rank出现5张及以上,依然全部移除并加1分(符合Go Fish规则);
  • 支持同时处理多个不同rank的四张组合(比如示例中的A和7,积分加2);
  • 统计次数的逻辑比两两比对更高效,尤其是当卡牌数量较多时。

内容的提问来源于stack exchange,提问作者Laoster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:50:20