2017-02-04 45 views
0

爲了構建我的撲克遊戲,我抽象出一個「手」作爲card對象的列表。
例如,['AC', '3D', '4S', 'KH', 'TC']代表hand對象,並且列表中的每個項目都是card對象。將字符串映射爲Python中的整數

我想按照遊戲中重要性的降序排列牌。
'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) 

這些功能很好地工作,但我不覺得他們足夠的Python的。
我想知道如何有效地執行此映射(可能使用map函數)。

+1

[CodeReview.SE]可能是這是一個更好的地方。 – Ryan

回答

0

這是我覺得是更具可讀性的方式和Python的

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)