直接在7张牌的扑克手上检测

2024-09-30 05:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码检查五张牌中的所有直杆(除了5-high,我将其作为elif添加)

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-card holdem手。有什么建议吗?你知道吗


Tags: and代码falseifdefminmaxvalues
2条回答

当@JohnGordon的解决方案工作时,它为每个秩值重复5次是浪费的。你知道吗

一个更有效的方法是将等级从2迭代到14,并简单地使用计数器来跟踪到目前为止等级连续存在于卡中的次数,如果连续的等级不存在,则重置计数器。如果计数器达到5,则确定存在直线。考虑到Ace(此处假设其秩为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')

我现在不知道代码是如何工作的,因为您还没有向我们展示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'

相关问题 更多 >

    热门问题