一个纯Python的扑克手牌评估库
[ 3 ❤ ] , [ 3 ♠ ]
$ pip install treys
Treys 是 Deuces 的 Python 3 移植版。大部分工作都取自 msaindon 的 fork。
Treys(最初为 Deuces)是 Will Drevo 为麻省理工学院扑克机器人大赛编写的。它重量轻且速度快。所有查找都是通过位算术和字典查找完成的。也就是说,Treys 不会击败 C 实现(~250k eval/s),但它对于需要 Python 或机器人分配合理思考时间(人类时间尺度)的情况很有用。
Treys 处理 5、6 和 7 张牌的查找。 6 和 7 卡查找是通过组合评估 5 张卡选择来完成的。
Treys 易于设置和使用。
>> > from treys import Card
>> > card = Card . new ( 'Qh' )
Card 对象被表示为整数,以保持 Trey 的高性能和轻量级。
现在让我们创建棋盘和德州扑克手牌示例:
>> > board = [
>> > Card . new ( 'Ah' ),
>> > Card . new ( 'Kd' ),
>> > Card . new ( 'Jc' )
>> > ]
>> > hand = [
>> > Card . new ( 'Qs' ),
>> > Card . new ( 'Th' )
>> > ]
将卡整数漂亮地打印到终端:
>>> Card.print_pretty_cards(board + hand)
[ A ❤ ] , [ K ♦ ] , [ J ♣ ] , [ Q ♠ ] , [ T ❤ ]
如果您安装了termacolor
,它们也会被着色。
否则直接评估你的牌力:
>> > from treys import Evaluator
>> > evaluator = Evaluator ()
>> > print ( evaluator . evaluate ( board , hand ))
1600
手牌强度的评估范围为 1 到 7462,其中 1 是皇家同花顺,7462 是非同花 7-5-4-3-2,因为扑克中只有 7642 手明显排名的手牌。再次,请参阅我的博客文章,以从数学角度更完整地解释为什么会出现这种情况。
如果你想从一副牌中随机发牌,你也可以使用 Treys 来做到这一点:
>> > from treys import Deck
>> > deck = Deck ()
>> > board = deck . draw ( 5 )
>> > player1_hand = deck . draw ( 2 )
>> > player2_hand = deck . draw ( 2 )
并打印它们:
>>> 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 ❤ ]
让我们评估双手的强度,然后将它们分为几类,每种手牌类型(高牌、对子等)
>> > 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 )
或者获取一个人类友好的字符串来描述分数,
>>> 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)
或者,最酷的是,获得与手牌强度相关的游戏阶段的详细分析:
>>> 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
版权所有 (c) 2013 威尔·德雷沃
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地使用本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或销售软件的副本,并允许向其提供软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有者均不对因本软件或本软件中的使用或其他交易而产生或与之相关的任何索赔、损害或其他责任负责,无论是合同、侵权行为还是其他行为。软件。