豹子概率大还是顺金概率大?99%的人都搞错的问题

一副去掉大小王的扑克牌.从中任意取三张牌.
豹子的概率高还是顺金的概率高?

(豹子:扎金花术语,例如3个K,称K豹子)

(顺金:扎金花术语,3张牌的同花顺)

 

答案:豹子概率大.

本人也曾用概率的公式计算过,也能计算出结果,过程不复杂.但是很快就忘了,而且没办法给不懂概率的牌友说清楚.他们都说顺金概率大,我就琢磨了一个容易理解的方法.

1 52张牌任意取3张. 总共有 n 种牌.  n = C52/3 是多少就不算了,反正肯定一个常数.
2 豹子的牌这样算. A豹子有4种牌,K豹子也有4种牌..... 豹子一共有13x4 = 52种
3 顺金的牌这样算. 黑桃顺金一共13-1种,(要去掉k,1,2因为这不算顺金),所以计算4种花色顺金一共 12x4 = 48种
4 豹子的概率  52/n   顺金概率48/n

5 所以豹子和顺金比是 52:48   也就是 13:12. 出13个豹子才会出12个顺金.

好的,以下是实现发牌、比大小判断输赢的 Python 代码: ```python import random # 生成一副完整的扑克牌 poker = [] for i in range(1, 14): for j in ['♠', '♥', '♣', '♦']: if i == 1: poker.append('A' + j) elif i == 11: poker.append('J' + j) elif i == 12: poker.append('Q' + j) elif i == 13: poker.append('K' + j) else: poker.append(str(i) + j) # 定义比较大小的函数 def compare(cards): if cards[0][0] == cards[1][0] == cards[2][0]: return '豹子' elif cards[0][1] == cards[1][1] == cards[2][1]: nums = [int(cards[0][0]), int(cards[1][0]), int(cards[2][0])] nums.sort() if nums[2] - nums[1] == 1 and nums[1] - nums[0] == 1: return '顺金' else: return '同花' else: nums = [int(cards[0][0]), int(cards[1][0]), int(cards[2][0])] nums.sort() if nums[2] - nums[1] == 1 and nums[1] - nums[0] == 1: return '顺子' elif nums[0] == nums[1] or nums[1] == nums[2]: return '对子' else: return '单张' # 随机给5个玩家发牌 players = [] for i in range(5): player = [] for j in range(3): card = random.choice(poker) poker.remove(card) player.append(card) players.append(player) # 输出每个玩家的牌 for i in range(5): print('玩家', i+1, '的牌是:', players[i]) # 比较大小,输出赢家 winner = 1 max_card = players[0][:] for i in range(1, 5): result1 = compare(max_card) result2 = compare(players[i]) if result2 == '豹子': winner = i+1 break elif result2 == '顺金' and result1 != '豹子': winner = i+1 max_card = players[i][:] elif result2 == '顺子' and result1 != '豹子' and result1 != '顺金': winner = i+1 max_card = players[i][:] elif result2 == '对子' and result1 != '豹子' and result1 != '顺金' and result1 != '顺子': winner = i+1 max_card = players[i][:] elif result2 == '单张' and result1 != '豹子' and result1 != '顺金' and result1 != '顺子' and result1 != '对子': nums1 = [int(max_card[0][0]), int(max_card[1][0]), int(max_card[2][0])] nums2 = [int(players[i][0][0]), int(players[i][1][0]), int(players[i][2][0])] nums1.sort() nums2.sort() if nums2[2] > nums1[2]: winner = i+1 max_card = players[i][:] print('赢家是玩家', winner, ',其牌是:', max_card) ``` 注意:为了方便比较大小,我们在牌面前加上了数字,如'A♠'表示A,'K♠'表示K,以此类推。输出结果中也是带有数字的牌面,如'玩家 1 的牌是: ['A♠', 'J♠', '6♦']'。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值