Eine reine Python-Pokerhand-Bewertungsbibliothek
[ 3 ❤ ] , [ 3 ♠ ]
$ pip install treys
Treys ist eine Python-3-Portierung von Deuces. Die meiste Arbeit wird von Msaindons Gabel übernommen.
Treys (ursprünglich Deuces) wurde von Will Drevo für den MIT Pokerbots-Wettbewerb geschrieben. Es ist leicht und schnell. Alle Suchvorgänge werden mit Bitarithmetik und Wörterbuch-Suchvorgängen durchgeführt. Allerdings ist Treys einer C-Implementierung nicht überlegen (~250.000 Auswertungen/s), aber es ist nützlich für Situationen, in denen Python erforderlich ist oder Bots eine angemessene Denkzeit (menschliche Zeitskala) zugeteilt wird.
Treys kümmert sich um die Suche nach Handkarten mit 5, 6 und 7 Karten. Die Suche nach 6 und 7 Karten erfolgt durch kombinatorische Auswertung der 5 Kartenauswahlmöglichkeiten.
Treys ist einfach einzurichten und zu verwenden.
>> > from treys import Card
>> > card = Card . new ( 'Qh' )
Kartenobjekte werden als ganze Zahlen dargestellt, um Treys leistungsfähig und leichtgewichtig zu halten.
Jetzt erstellen wir das Spielbrett und eine Beispielhand für Texas Hold'em:
>> > board = [
>> > Card . new ( 'Ah' ),
>> > Card . new ( 'Kd' ),
>> > Card . new ( 'Jc' )
>> > ]
>> > hand = [
>> > Card . new ( 'Qs' ),
>> > Card . new ( 'Th' )
>> > ]
Hübsches Drucken von Karten-Ganzzahlen an das Terminal:
>>> Card.print_pretty_cards(board + hand)
[ A ❤ ] , [ K ♦ ] , [ J ♣ ] , [ Q ♠ ] , [ T ❤ ]
Wenn Sie termacolor
installiert haben, werden diese ebenfalls eingefärbt.
Andernfalls gehen Sie direkt zur Bewertung Ihrer Handstärke über:
>> > from treys import Evaluator
>> > evaluator = Evaluator ()
>> > print ( evaluator . evaluate ( board , hand ))
1600
Die Handstärke wird auf einer Skala von 1 bis 7462 bewertet, wobei 1 ein Royal Flush und 7462 ein ungeeignetes 7-5-4-3-2 ist, da es beim Poker nur 7642 Hände mit eindeutigem Rang gibt. Eine mathematisch umfassendere Erklärung, warum das so ist, finden Sie noch einmal in meinem Blogbeitrag.
Wenn Sie zufällig Karten aus einem Stapel austeilen möchten, können Sie dies auch mit Treys tun:
>> > from treys import Deck
>> > deck = Deck ()
>> > board = deck . draw ( 5 )
>> > player1_hand = deck . draw ( 2 )
>> > player2_hand = deck . draw ( 2 )
und drucke sie aus:
>>> Card.print_pretty_cards(board)
[ 4 ♣ ] , [ A ♠ ] , [ 5 ♦ ] , [ K ♣ ] , [ 2 ♠ ]
>>> Card.print_pretty_cards(player1_hand)
[ 6 ♣ ] , [ 7 ❤ ]
>>> Card.print_pretty_cards(player2_hand)
[ A ♣ ] , [ 3 ❤ ]
Lassen Sie uns die Stärke beider Hände bewerten und sie dann in Klassen einteilen, eine für jeden Handtyp (hohe Karte, Paar usw.).
>> > p1_score = evaluator . evaluate ( board , player1_hand )
>> > p2_score = evaluator . evaluate ( board , player2_hand )
>> > p1_class = evaluator . get_rank_class ( p1_score )
>> > p2_class = evaluator . get_rank_class ( p2_score )
oder besorgen Sie sich eine benutzerfreundliche Zeichenfolge, um die Partitur zu beschreiben,
>>> print("Player 1 hand rank = %d (%s)n" % (p1_score, evaluator.class_to_string(p1_class)))
Player 1 hand rank = 6330 (High Card)
>>> print("Player 2 hand rank = %d (%s)n" % (p2_score, evaluator.class_to_string(p2_class)))
Player 2 hand rank = 1609 (Straight)
Oder, was das Coolste ist, erhalten Sie eine detaillierte Analyse der Spielphasen in Bezug auf die Handstärke:
>>> hands = [player1_hand, player2_hand]
>>> evaluator.hand_summary(board, hands)
========== FLOP ==========
Player 1 hand = High Card, percentage rank among all hands = 0.893192
Player 2 hand = Pair, percentage rank among all hands = 0.474672
Player 2 hand is currently winning.
========== TURN ==========
Player 1 hand = High Card, percentage rank among all hands = 0.848298
Player 2 hand = Pair, percentage rank among all hands = 0.452292
Player 2 hand is currently winning.
========== RIVER ==========
Player 1 hand = High Card, percentage rank among all hands = 0.848298
Player 2 hand = Straight, percentage rank among all hands = 0.215626
========== HAND OVER ==========
Player 2 is the winner with a Straight
Copyright (c) 2013 Will Drevo
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-INHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.