Python 5卡直入7卡扑克手部检测与列表理解

Python 5卡直入7卡扑克手部检测与列表理解,python,list,list-comprehension,poker,Python,List,List Comprehension,Poker,我正在编写一个用于学习目的的7张牌扑克手评估脚本。 目前正在编程直接检测 虽然我已经找到了一个有效的解决方案,但它不是很“pythonic”,因为它检查是否有a-5直道,然后在另一个声明中检查其余的直道。瘸子 我已经创建了一个可能的直道列表: #01=平手,13=王牌 直线=[已排序([13,*范围(1,14)][n:n+5]),用于范围(0,10)中的n] 这包括讨厌的A-5直道 现在我要做的是将我的手与这些列表相交,看看这个相交的长度是否大于5 如果我这样做: 如果len([13,1,2,

我正在编写一个用于学习目的的7张牌扑克手评估脚本。 目前正在编程直接检测

虽然我已经找到了一个有效的解决方案,但它不是很“pythonic”,因为它检查是否有a-5直道,然后在另一个声明中检查其余的直道。瘸子

我已经创建了一个可能的直道列表:

#01=平手,13=王牌
直线=[已排序([13,*范围(1,14)][n:n+5]),用于范围(0,10)中的n]
这包括讨厌的A-5直道

现在我要做的是将我的手与这些列表相交,看看这个相交的长度是否大于5

如果我这样做:

如果len([13,1,2,3,4]中的项目为手头项目)大于等于5
它就像一个符咒。但是如果我在硬编码的列表上点击直人列表,它就不起作用了。为什么

如果len([如果项目在直道中,则项目在手)大于等于5

其他:

我假设你的
手上也有一个整数列表

if max([len(set(hand).intersection(set(s))) for s in STRAIGHTS]) >=5

在<代码>[如果直截了当的项目在手的项目]
中,直截了当是一个列表-因此,只有当项目也是一个列表时,这种列表理解才会像我认为的那样起作用(我假设不是这样,所以它不起作用)你可以使用列表差异来检查直线,而不必硬编码所有可能的直线。看起来有很多直线的可能性,但只有10种可能性,我们可以用单个列表理解来“硬编码”。任何简单的扑克手评估算法(也就是说,没有一个具有大查找表的花哨算法)必须为轮子设置一个丑陋的特例。除非你将ACE设置得很低,否则百老汇将有一个丑陋的特例。没有办法解决。事实上@Simon使用直行查找表的解决方案非常有效,同样的说法适用于轮子和其他直行:)