Leider ein Royal Flush ist, Asse können hoch oder niedrig sein, je nachdem, was eine bessere Hand produziert. Ich werde sie anfangs als 14 bewerten, aber mit niedrigen Assen umgehen, wenn ich auf Geraden komme. Erstens, eine Funktion, um eine Karte in eine Zahl umzuwandeln. Ich benutze einen dict
den Wert der Bildkarten zu sehen:
FACE_CARDS = {'T': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14}
def to_number(card):
if card[0].isnumeric():
return int(card[0])
else:
return FACE_CARDS[card[0]]
eine Hand Sortierung ist nun einfach:
hand=['Jc','2h','6d','Th']
hand.sort(key=to_number)
print(hand)
# prints ['2h','6d','Th','Jc']
für einen Flush Überprüfung so einfach ist, den Anzug aller anderen Karten wie dafür, dass Passen Sie den Anzug der ersten Karte:
def is_flush(hand):
test_suit = hand[0][1]
return all(card[1] == test_suit for card in hand)
Nun, mit Geraden zu tun haben. Zuerst überprüfen wir, ob es ein Ass gibt (immer die letzte Karte einer sortierten Hand, da es Wert 14 ist). Wenn es ein Ass gibt und die niedrigste (zuerst, wenn sortiert) Karte der Hand eine Zwei ist, nehmen wir an, dass das Ass niedrig ist (da dies die einzige Möglichkeit ist, eine Straße zu konstruieren) und prüfen, ob die restlichen Karten die Karte vervollständigen Gerade. Ansonsten ist das Ass automatisch hoch, so prüfen wir, dass der Wert jedes Karte ist eine höher als die vorherige:
def is_straight(hand):
hand = sorted(hand, key=to_number)
if hand[-1][0] == "A" and hand[0][0] == "2":
# Check that the remaining cards complete the straight
return list(map(to_number, hand[1:-1])) == list(range(3, len(hand)+1))
# You can skip conversion to lists for Python 2
else:
return all(to_number(hand[i])+1 == to_number(hand[i+1]) for i in range(len(hand)-1))
Nun, da wir das harte Teil getan haben, wir auf der der Royal Flush zu bewegen. Ein Royal Flush ist sowohl ein Straight als auch ein Flush, wobei die höchste Karte ein Ass ist:
Wie kann man eine Straight mit 4 Karten haben? – Signal
@Signal: Es ist ein l̶a̶m̶e̶ Nicht-Pokerspieler Straight. – zondo
Strings sind eine schreckliche Art, Karten darzustellen, wie Sie sehen werden, wenn Sie versuchen, Hände zu erkennen. Vorausgesetzt, dass die "isStraight()" - Funktion zuerst die Hand sortieren muss ... und so, dass "J"> "T", "Q"> "J" und so weiter. Dann müssen Sie auch das Rad (2345A) Sonderfall. –