7张牌中的顺子检测

时间:2019-03-02 04:36:16

标签: python poker

以下代码检查五张牌中的所有顺子(5高除外,我将其添加为小数)

def straight(values,vset):
    if (max(vset) - min(vset) == 4) and numpair(values) == False and detset(values) == False and quads(values) == False:
#STRAIGHT DETECTED

Vset只是一个包含值的集合。问题是,我无法找出一种方法来修改此代码来评估7张牌的扑克牌。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

@JohnGordon的解决方案可以有效地为每个等级值重复迭代5次。

一种更有效的方法是将等级从2迭代到14,并简单地使用计数器来跟踪到目前为止该等级在卡中连续存在的次数,如果不存在连续等级,重置计数器。如果计数器达到5,则确定有一条直线。要考虑一个事实(假设此处的A等级为14)可被认为是1,从而也可以形成具有2、3、4和5的直线,您可以将14设置为2到14的范围以进行迭代:

count = 0
for rank in (14, *range(2, 15)):
    if rank in vset:
        count += 1
        if count == 5:
            print('Straight found')
            break
    else:
        count = 0
else:
    print('Straight not found')

答案 1 :(得分:0)

我不知道代码现在如何工作,因为您没有向我们展示numpair()detset()quads()的代码。

但是,从干净的地方开始,这就是我要这样做的方式:

# assume rank values are numeric 2-10, J=11, Q=12, K=13, A=14
# iterate over each rank 2 thru 10
for rank in range(2, 11):
    # if rank+0, rank+1, rank+2, rank+3, and rank+4 are all present, we have a straight
    if all(rank+n in vset for n in range(0,5)):
        print 'we have a straight'
        break
# if we never broke out of the loop, we never found a straight
else:
    print 'we do not have a straight'