我在下面编写了程序,以遍历所有可能的扑克手,并计算其中有几手是一对
一手是任意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/