繁体   English   中英

在Python中将字符串映射为整数

[英]Mapping strings to integers in Python

为了构建我的扑克游戏,我将“手”抽象为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功能)。

这是我发现更具可读性和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并使用键值调用此映射。
  • 在String对象上使用index (在这种情况下适用)

此外,如果要在C中将大写字符映射到其对应的整数值,则可以使用如下代码:

value_of_ch = 'ABCDEFGHIJKLMNOPQRST'.index(ch + 65)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM