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

如何将随机生成的13张扑克牌按指定规则升序排序?

解决扑克牌按指定规则排序的问题

首先修正原代码里的变量名错误(value被误写为vals),然后通过自定义排序键实现需求的排序规则,完整代码如下:

import itertools
import random

# 定义点数和花色,修正原代码变量名错误
values = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
suits = ['C','D','H','S']

# 构建完整牌堆
deck = list(itertools.product(values, suits))

# 随机抽取13张不重复的牌,贴合需求
selected_cards = random.sample(deck, 13)

# 定义排序权重:按规则指定优先级数值
suit_rank = {'C': 0, 'D': 1, 'H': 2, 'S': 3}  # 花色从低到高:Clubs<Diamonds<Hearts<Spades
value_rank = {v: i for i, v in enumerate(values)}  # 点数从低到高:2到A对应0到12

# 按规则排序:先按花色权重升序,同花色按点数权重升序
sorted_cards = sorted(selected_cards, key=lambda x: (suit_rank[x[1]], value_rank[x[0]]))

# 格式化为示例要求的逗号分隔字符串并输出
print(','.join(f"{val}-{suit}" for val, suit in sorted_cards))

关键逻辑说明:

  • 排序权重映射:通过字典将花色和点数转换为可比较的数值,让sorted()函数能按照自定义规则排序。
  • 排序键设计:用元组(suit_rank[x[1]], value_rank[x[0]])作为排序依据,先比较花色优先级,花色相同时再比较点数优先级,完全匹配需求的升序规则。
  • 随机抽取优化:用random.sample()直接从牌堆抽取13张不重复的牌,比打乱整个牌堆再取前13张更高效直接。

如果要保留原代码的shuffle逻辑,可将抽取部分替换为:

random.shuffle(deck)
selected_cards = deck[:13]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:15:42