我在下面编写了程序,以遍历所有可能的扑克手,并计算其中有几手是一对

一手是任意5张牌。
一对是指两张相同等级(数字)的牌和其他三张不同等级的卡片,例如(1,2,1,3,4)

我将纸牌表示为数字列表,例如
-1 = ACE
-2 = 2
-3 = 3
 ...
-11 =杰克
-12 =女王...

该程序似乎可以工作,但是,
发现的单手对数= 1101984

但是根据多个消息来源,正确答案是1098240。

谁能看到我的代码中的错误在哪里?

from itertools import combinations
# Generating the deck
deck = []
for i in range(52):
    deck.append(i%13 + 1)

def pairCount(hand):
    paircount = 0
    for i in hand:
        count = 0
        for x in hand:
            if x == i:
                count += 1
        if count == 2:
            paircount += .5 #Adding 0.5 because each pair is counted twice

    return paircount

count = 0
for i in combinations(deck, 5): # loop through all combinations of 5
    if pairCount(i) == 1:
        count += 1

print(count)

最佳答案

问题是您的手也可以包含以下类型的卡-


  一对三和一对


您实际上也将其作为一对计算。

我修改了代码以仅计算手的数量,以使其包含同一类型的三只和三对。代码-

deck = []
for i in range(52):
    deck.append((i//13 + 1, i%13 + 1))

def pairCount(hand):
    paircount = 0
    threecount = 0
    for i in hand:
        count = 0
        for x in hand:
            if x[1] == i[1]:
                count += 1
        if count == 2:
            paircount += .5 #Adding 0.5 because each pair is counted twice
        if count == 3:
            threecount += 0.33333333
    return (round(paircount, 0) , round(threecount, 0))

count = 0
for i in combinations(deck, 5):
    if pairCount(i) == (1.0, 1.0):
        count += 1


这将数字计为-3744

现在,如果我们从得到的数字中减去该数字-1101984-得到的期望数字-1098240

关于python - Python Poker手单对计数器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31381901/

10-12 22:04