猿问

检测 7 张牌手牌中的顺子

以下代码检查五张牌中的所有顺子(除了 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 张扑克牌手牌。有什么建议吗?


阿晨1998
浏览 344回答 2
2回答

繁花如伊

更有效的方法是将排名从 2 迭代到 14 并简单地使用计数器来跟踪到目前为止该排名连续出现在卡片中的次数,如果连续排名不存在,则重置计数器. 如果计数器达到 5,则确定存在顺子。为了说明 Ace(假设它的点数在此处为 14)可以被视为 1 以与 2、3、4 和 5 形成顺子这一事实,您可以在 2 到 14 的范围内添加 14 以进行迭代:count = 0for rank in (14, *range(2, 15)):    if rank in vset:        count += 1        if count == 5:            print('Straight found')            break    else:        count = 0else:    print('Straight not found')

慕码人8056858

我不知道代码现在如何工作,因为您还没有向我们展示numpair(),detset()和的代码quads()。但是,从头开始工作,这就是我的做法:# assume rank values are numeric 2-10, J=11, Q=12, K=13, A=14# iterate over each rank 2 thru 10for 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 straightelse:    print 'we do not have a straight'
随时随地看视频慕课网APP

相关分类

Python
我要回答