2017-02-04 2 views
0

Um mein Pokerspiel zu erstellen, abstrahiere ich eine "Hand" als eine Liste von card Objekten.
Zum Beispiel repräsentiert ['AC', '3D', '4S', 'KH', 'TC'] ein Objekt hand und jedes Element der Liste ist ein card Objekt.Zeichenketten zu ganzen Zahlen in Python

Ich möchte die Karten in einer Hand in absteigender Reihenfolge ihrer Bedeutung im Spiel rangieren.
d. H. 'A' > 'K' > ....(so on)... > '2'

Ich bin auf der Suche nach der Zuordnung der Rang jeder Karte auf einen entsprechenden Wert.
Für das obige Beispiel wird die Korrespondenz [14, 13, 10, 4, 3]

sein ich die folgenden Funktionen haben dies für mich zu tun:

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) 

Diese Funktionen arbeiten gut, aber ich sie genug Pythonic nicht finden.
Ich würde gerne wissen, wie kann ich diese Zuordnung effizient durchführen (vielleicht mit map Funktion).

+1

[CodeReview.SE] sein könnte ein besserer Ort dafür. – Ryan

Antwort

0

Dies ist die Art und Weise finde ich besser lesbar und Pythonic sein

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) 

Jedes Mal, wenn wir ein Zeichen einer int abbilden wollen, können wir eine dieser Techniken verwenden:

  • die Definition Mapping als dict und Aufruf dieser Karte mit den Schlüsselwerten.
  • Verwendung von index für ein String-Objekt. (Wie in diesem Fall anwendbar)

Außerdem, wenn wir Großbuchstaben in die entsprechenden ganzzahligen Werte in C abbilden wollen, können wir etwas wie folgt verwenden:

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