2017-02-04 6 views
0

Для создания моей игры в покер я отрисую «Руку» как список объектов card.
Например, ['AC', '3D', '4S', 'KH', 'TC'] представляет объект hand, и каждый элемент списка является объектом card.Сопоставление строк с целыми числами в Python

Я хочу ранжировать карты в руке в порядке убывания их важности в игре.
i.e '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).

+1

[CodeReview.SE] может быть лучшее место для этого. – Ryan

ответ

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 на объекте String. (Как это применимо в данном случае)

Кроме того, если мы хотим, чтобы отобразить символы верхнего регистра в соответствующие целочисленные значения в C, мы можем использовать что-то вроде этого:

value_of_ch = 'ABCDEFGHIJKLMNOPQRST'.index(ch + 65) 
Смежные вопросы