节日回家,都会约上亲朋好友聚聚会,会上经常会打麻将,斗地主,斗牛。在这些游戏中,斗牛是最受欢迎的,因为可以很多人一起玩,而且没有技术含量,都是看运气(专业术语是概率)。
斗牛的玩法是:

  1. 把牌中的JQK都拿出来
  2. 每个人发5张牌
  3. 如果5张牌中任意三张加在一起是10的 倍数,就是有牛。剩下两张牌的和的10的余数就是牛数。

牌的大小:

4条 > 3条 > 牛十 > 牛九 > …… > 牛一 >没有牛

而这些牌出现的概率是有多少呢?

由于只有四十张牌,所以采用了既简单,又有效率的方法枚举来计算。
计算的结果:

所有牌的组合数:658008 出现四条的组合数:360,概率 :0.05% 出现三条的组合数:25200,概率 :3.83% 出现牛十的组合数:42432,概率 :6.45% 出现牛九或牛八的组合数:87296,概率 :13.27% 出现牛一到牛七的组合数:306112,概率 :46.52% 出现没有牛的组合数:196608,概率 :29.88%

Python源代码:

# encoding=utf-8
__author__ = 'kevinlu1010@qq.com'
import os
import cPicklefrom copy import copy
from collections import Counter
import itertools
'''
计算斗牛游戏的概率
'''class Poker():'''一张牌'''def __init__(self, num, type):self.num = num  # 牌数self.type = type  # 花色class GamePoker():'''一手牌,即5张Poker'''COMMON_NIU = 1  # 普通的牛,即牛一-牛七NO_NIU = 0  # 没有牛EIGHT_NINE_NIU = 2  # 牛九或牛八TEN_NIU = 3  # 牛十THREE_SAME = 4  # 三条FOUR_SAME = 5  # 四条def __init__(self, pokers):assert len(pokers) == 5self.pokers = pokersself.num_pokers = [p.num for p in self.pokers]# self.weight = None  # 牌的权重,权重大的牌胜# self.money_weight = None  # 如果该牌赢,赢钱的权重self.result = self.sumary()def is_niu(self):'''是否有牛:return:'''# if self.is_three_same():# return 0for three in itertools.combinations(self.num_pokers, 3):if sum(three) % 10 == 0:left = copy(self.num_pokers)for item in three:left.remove(item)point = sum(left) % 10return 10 if point == 0 else pointreturn 0def is_three_same(self):'''是否3条:return:'''# if self.is_four_same():# return 0count = Counter([p.num for p in self.pokers])for num in count:if count[num] == 3:return numreturn 0def is_four_same(self):'''是否4条:return:'''count = Counter([p.num for p in self.pokers])for num in count:if count[num] == 4:return numreturn 0def sumary(self):'''计算牌'''if self.is_four_same():return GamePoker.FOUR_SAMEif self.is_three_same():return GamePoker.THREE_SAMEniu_point = self.is_niu()if niu_point in (8, 9):return GamePoker.EIGHT_NINE_NIUelif niu_point == 10:return GamePoker.TEN_NIUelif niu_point > 0:return GamePoker.COMMON_NIUelse:return GamePoker.NO_NIUdef get_all_pokers():'''生成所有的Poker,共四十个:return:'''pokers = []for i in range(1, 11):for j in ('A', 'B', 'C', 'D'):pokers.append(Poker(i, j))return pokersdef get_all_game_poker(is_new=0):'''生成所有game_poker:param pokers::return:'''pokers = get_all_pokers()game_pokers = []if not is_new and os.path.exists('game_pokers'):with open('game_pokers', 'r') as f:return cPickle.loads(f.read())for pokers in itertools.combinations(pokers, 5):  # 5代表五张牌game_pokers.append(GamePoker(pokers))with open('game_pokers', 'w') as f:f.write(cPickle.dumps(game_pokers))return game_pokersdef print_rate(game_pokers):total_num = float(len(game_pokers))four_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.FOUR_SAME])three_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.THREE_SAME])ten_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.TEN_NIU])eight_nine_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.EIGHT_NINE_NIU])common_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.COMMON_NIU])no_num = len([game_poker for game_poker in game_pokers if game_poker.result == GamePoker.NO_NIU])print '所有牌的组合数:%d' % total_numprint '出现四条的组合数:%d,概率 :%.2f%%' % (four_num, four_num * 100 / total_num)print '出现三条的组合数:%d,概率 :%.2f%%' % (three_num, three_num * 100 / total_num)print '出现牛十的组合数:%d,概率 :%.2f%%' % (ten_num, ten_num * 100 / total_num)print '出现牛九或牛八的组合数:%d,概率 :%.2f%%' % (eight_nine_num, eight_nine_num * 100 / total_num)print '出现牛一到牛七的组合数:%d,概率 :%.2f%%' % (common_num, common_num * 100 / total_num)print '出现没有牛的组合数:%d,概率 :%.2f%%' % (no_num, no_num * 100 / total_num)def main():game_pokers = get_all_game_poker()  # 658008种print_rate(game_pokers)main()

最后上一个简陋的界面

三张手牌

斗牛(牛牛)概率计算器相关推荐

  1. 如何用计算机计算概率,概率计算器与阶乘方程

    我必须做一个代码,计算中奖彩票的概率,给定的数量可供选择的数量以及您必须选择多少.我必须在代码中使用阶乘方程(n!)/(k!*(n-k)!).代码本身工作正常,但公式不会编译.概率计算器与阶乘方程 / ...

  2. 抽卡计算机在线,《闪耀暖暖》抽卡概率计算器

    今天为大家带来的是闪耀暖暖抽卡概率计算器,抽卡概率是多少?这里有位大佬用自己的账号测试了抽卡概率,感兴趣的朋友一起来看看吧. 抽卡概率计算器 我自己买了12个初始号,抽了480抽,出了5个闪耀奇,其中 ...

  3. 欧冠16强抽签概率计算器

    一时心起,随便写了一个欧冠16强抽签概率计算器,计算各支球队可能抽到的对手和对应的概率,考虑同国回避和同组回避原则. 当然,花的时间少,写的很烂,能用就行,输出直接搞命令行,性能不考虑,直接全排列简单 ...

  4. 变异系数在线计算机,数理统计在线计算器

    样本标准偏差在线计算器相关系数计算器变异系数计算器几何平均值在线计算器线性回归方程计算器算术平均值计算器效应量计算器信噪比计算器阶乘计算器在线标准误差计算器调和平均数在线计算器加权平均值计算器均方根计 ...

  5. vb 彩牛概率统计for Excel

    彩牛统计牛牛概率 主要计算牛一到牛牛和炸弹无牛在excel表中统计列举的牌型概率.代码如下,顺便了解了下vb这门古老的语言.唯一感想就是自动对其功能很强.突然吹使我再温习下代码之美,要把代码写好,写规 ...

  6. java jsr_分叉并加入Java 7 – JSR 166并发实用程序

    java jsr Java 7最有趣的改进之一是对并发的更好支持. 借助JSR 166并发实用程序,我们获得了一些非常有用的并发改进. 在我看来,fork-join库在软件工程中具有很高的实际应用潜力 ...

  7. 分叉并加入Java 7 – JSR 166并发实用程序

    Java 7最有趣的改进之一是对并发的更好支持. 使用JSR 166并发实用程序,我们可以对并发进行一些非常有用的改进. 在我看来,fork-join库在软件工程中具有很高的实际应用潜力. Fork ...

  8. Dew Lab Studio 2020 VCL软件包,很好的RAD(快速软件开发)工具

    Dew Lab Studio 2020 VCL软件包,很好的RAD(快速软件开发)工具 Dew Lab Studio是一个软件包,在一个安装程序中包括一组MtxVec,DSP,Statistics和D ...

  9. Dew Lab Studio

    Dew Lab Studio是一个程序包,包含一组MtxVec.DSP.统计和数据挖掘产品.Dew的研究为开发人员提供了一个很好的RAD工具,它加速了许多科学和工程领域软件订单的开发.该系统作为软件开 ...

  10. 信息大爆炸时代的生存指南(2):我们的基本信息素养

    大家好,欢迎来到认真想的批判性思维与通识教育系列课程.想要提升信息素养,我们就要学会辨别信息的质量,不让垃圾信息污染自己的头脑.换句话说,我们要学会选择什么东西是值得相信的,什么东西是值得相信的,而这 ...

最新文章

  1. 【AI初识境】什么是深度学习成功的开始?参数初始化
  2. 【ArcGIS Pro微课1000例】0010:ArcGIS Pro导入ArcMap样式符号库——以国土三调样式为例
  3. 小米登录协议分析_小米温湿度传感器协议分析
  4. 使用indexOf()算出长字符串中包含多少个短字符串
  5. vscode创建代码截图_如何在VSCode中创建代码配置文件
  6. Java:节点流和处理流的理解
  7. RocketMQ事务消息从生产到消费原理详解(包括回查过程)
  8. android不是内部或外部命令,也不是可执行的程序或批处理文件
  9. python面向对象(特征,原则)01
  10. 离散数学大作业代码及感想
  11. 大一线性代数知识点总结
  12. linux 内核migration任务,[转]linux内核线程migration_thread和kthreadd的创建
  13. python查看cpu温度_Python如何读取CPU和GPU的温度?
  14. 在c#中using和new这两个关键字有什么意义
  15. AI时代——人工智能技术图谱,它来啦(机器学习+深度学习学习路线)
  16. vue3使用tinymce编辑器
  17. 新概念二册 Lesson 6 Percy Buttons泊西·巴顿斯 (冠词)
  18. 平衡家庭和事业,如何用RPA化解职场女性的痛
  19. itext7——通过html模板生成pdf
  20. Proxmox VE退出集群模式

热门文章

  1. 电脑版微信多开显示网络代理服务器,电脑版微信多开办法,超级简单,一看就会...
  2. 创业19年的湖南竞网如何拥抱数字化转型,按下成长加速键?
  3. 计算机组成原理平均cpi怎么算_计算机组成原理-计算机的性能指标及计算题
  4. Vivado中各个文件的含义
  5. 水晶报表java_JAVA水晶报表从环境搭建到创建动态水晶报表
  6. 计算机桌面文件删除不掉是怎么了,如何解决电脑桌面文件无法删除问题
  7. iphone7p配置参数详情_iPhone12系列最全的详细参数,参数党可以看看
  8. VBA单元格、工作表、工作簿
  9. python处理一段话,使他只存在英文,和数字
  10. Shashlik Cooking(思维)