Питон покерные комбинации одной пары счетчиков
Я написал программу ниже, чтобы перебрать каждую возможную покерную руку и подсчитать, сколько из этих рук составляют одну пару
рука-это любые 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 ответ:
Проблема в том, что ваша рука также может содержать карты следующего типа -
Тройка и одна пара
Вы на самом деле вычисляете это как единственную пару.
Я изменил код, чтобы считать только количество рук таким образом, что он содержит три вида, а также одну пару вместе. Код -
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
.