如何将随机生成的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
相关产品推荐
相关产品推荐

