簡體   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