Питон покерные комбинации одной пары счетчиков


Я написал программу ниже, чтобы перебрать каждую возможную покерную руку и подсчитать, сколько из этих рук составляют одну пару

рука-это любые 5 карт.
Одна пара - это когда две карты одного ранга (числа) и остальные 3 карты всех разных рангов, например:(1,2,1,3,4)

Я представляю колоду карт в виде списка чисел, например
- 1 = туз
- 2 = Два
- 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)
1 2

1 ответ:

Проблема в том, что ваша рука также может содержать карты следующего типа -

Тройка и одна пара

Вы на самом деле вычисляете это как единственную пару.

Я изменил код, чтобы считать только количество рук таким образом, что он содержит три вида, а также одну пару вместе. Код -

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 .