为了账号安全,请及时绑定邮箱和手机立即绑定

检测 7 张牌手牌中的顺子

检测 7 张牌手牌中的顺子

阿晨1998 2021-11-23 19:55:40
以下代码检查五张牌中的所有顺子(除了 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 DETECTEDVset 只是一个包含值的集合。问题是,我无法想出一种方法来调整此代码来评估 7 张扑克牌手牌。有什么建议吗?
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

更有效的方法是将排名从 2 迭代到 14 并简单地使用计数器来跟踪到目前为止该排名连续出现在卡片中的次数,如果连续排名不存在,则重置计数器. 如果计数器达到 5,则确定存在顺子。为了说明 Ace(假设它的点数在此处为 14)可以被视为 1 以与 2、3、4 和 5 形成顺子这一事实,您可以在 2 到 14 的范围内添加 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')


查看完整回答
反对 回复 2021-11-23
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信