为了构建我的扑克游戏,我将“手”抽象为card
个对象的列表
例如,['AC', '3D', '4S', 'KH', 'TC']
表示hand
个对象,列表中的每个项目都是card
个对象。
我想按照它们在游戏中的重要性降序排列牌
即'A' > 'K' > ....(so on)... > '2'
我正在寻找将每张卡的等级映射到相应的值
对于上面的示例,对应关系将为[14, 13, 10, 4, 3]
我有以下功能为我做这件事:
def mapper(ranks):
mapping = {
'2': 2,
'3': 3,
'4': 4,
'5': 5,
'6': 6,
'7': 7,
'8': 8,
'9': 9,
'T': 10,
'J': 11,
'Q': 12,
'K': 13,
'A': 14
}
new_ranks = [mapping[rank] for rank in ranks]
return new_ranks
def card_ranks(cards):
"Return a list of the ranks, sorted with higher first."
ranks = [r for r,s in cards]
return sorted(mapper(ranks), reverse=True)
这些功能运行良好,但我找不到足够的Pythonic
我想知道如何有效地执行此映射(可能使用map
函数)。
答案 0 :(得分:0)
这是我发现更具可读性和Pythonic的方式
def card_ranks(cards):
"Return a list of the ranks, sorted with higher first."
ranks = ['--23456789TJQKA'.index(r) for r,s in cards]
return ranks.sort(reverse=True)
每当我们想要将一个角色映射到int
时,我们都可以使用以下任何一种技术:
dict
并使用键值调用此映射。 index
。 (在这种情况下适用)此外,如果我们想要将大写字符映射到C中对应的整数值,我们可以使用以下内容:
value_of_ch = 'ABCDEFGHIJKLMNOPQRST'.index(ch + 65)