和朋友赌骰子如何赢 - Python,数据分析及绘图,pygal

pygal 是非常不错的 python 可视化包,它可以生成矢量图,从而在不同尺寸的屏幕上都可以获得良好的显示效果。具体安装使用请参考官方文档。今天小狼举个投骰子的栗子,看一下不同点数的概率分布情况。源码请移步小狼 GitHub 下的 roll_dice_pygal 文件夹。

最常见的骰子是 6 个面的,点数分别从 1 至 6, 玩法上可以只投一个骰子,同时投两个骰子或者更多,在这里我们分别计算投一个,投两个和投三个的情况。

1. 投一个骰子的点数分布

每次投掷骰子的点数可以用 random 中的 randint 来实现,然后写两个函数方便待会儿复用:roll_dice() 用来模拟每次投掷骰子的点数,frequencies() 用来计算每个点数的频率。

from random import randint

def roll_dice():
    results = []
    for num in range(times):
        result = randint(1, sides)
        results.append(result)
    return results

def frequencies(x):
    results = []
    for num in range(1, sides+1):
        result = x.count(num)
        results.append(result)
    return results

设置骰子的面数为 6,投掷次数为 100 次:

sides = 6
times = 100

存储投掷结果(不放心的话可以 print 出来检查一下代码),计算每个点数的频率,把频率打印出来:

roll_results = roll_dice()
frequencies = frequencies(roll_results)
print(frequencies)

运行一下代码,得到频率的结果:

[17, 19, 15, 16, 13, 20]

上面的列表返回的分别是骰子 1 - 6 的频率结果,例如投掷 100 次,点数为 1 的次数共计是 17 次。看上去没什么问题,是时候该 pygal 上场了!

import pygal

freq_visual = pygal.Bar()

我们导入了 pygal,然后决定用柱状图来显示结果。接下来我们顺便对即将显示的图表做一些优化,让它更易读:

freq_visual.title = 'Rolling Results of 100 times'
freq_visual.x_labels = [str(x) for x in range(1, 7)]
freq_visual.x_title = 'Results'
freq_visual.y_title = 'Frequency'

接下来导入参数并且绘制图表:

freq_visual.add('6-side Dice', frequencies)
freq_visual.render_to_file('dice.svg')

我们得到了一个 .svg 格式的图,可以用浏览器打开查看,该格式也可以用 Adobe Illustrator 打开编辑。

dice_100.png

你和朋友玩了 100 次,你朋友赌 6 赢了 20 次,你赌 5 赢了 13 次,乍看下去似乎不是等概率事件?其实是因为投掷的次数太少了!你再和他玩个一万次,一百万次看看:

dice_10000.png
dice_1000000.png

呵呵,呵呵呵。

2. 两个骰子的点数分布

现在我们同时投掷两个骰子,每次的结果等于两个骰子点数之和,稍稍修改一下计算频率的函数:

def frequencies(x):
    results = []
    for num in range(2, sides*2+1):
        result = x.count(num)
        results.append(result)
    return results

把第二个骰子的点数纳入到结果中:

roll_results_1 = roll_dice()
roll_results_2 = roll_dice()
roll_results = [roll_results_1[i]+roll_results_2[i] for i in range(times)]

记得改一下 x 轴坐标:

freq_visual.x_labels = [str(x) for x in range(2, 13)]

来看看模拟投掷 100 次,10,000 次和 1,000,000 次的结果:

dice_two_100.png
dcie_two_10000.png
dice_two_1000000.png

额,看来还是赌 7 是王道,但是前 100 次的输赢就看你的人品了。。。

3. 三个骰子的点数分布

现在我们同时投掷三个骰子,每次的结果等于三个骰子点数之和,再稍稍修改一下计算频率的函数:

def frequencies(x):
    results = []
    for num in range(3, sides*3+1):
        result = x.count(num)
        results.append(result)
    return results

把第三个骰子的点数纳入到结果中:

roll_results_1 = roll_dice()
roll_results_2 = roll_dice()
roll_results_3 = roll_dice()
roll_results = [roll_results_1[i]+roll_results_2[i]+roll_results_3[i] for i in range(times)]

最后记得改一下 x 轴坐标:

freq_visual.x_labels = [str(x) for x in range(3, 19)]

模拟投掷 100 次,10,000 次和 1,000,000 次的结果:

dice_three_100.png
dice_three_10000.png
dice_three_1000000.png

总之,相信你赌 10 和 11 在多数情况下都是能够完胜你那个赌 1 和 18 的朋友的。不过,小赌怡情,大赌伤身哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容