投掷骰子的秘密,怎么样猜概率最高?python告诉你!

简介: 投掷骰子的秘密,怎么样猜概率最高?python告诉你!

骰子大家都玩过,那么怎么样才能够尽可能的高概率猜中呢???

三岁带你一起来看看里面的秘密吧


· 看看这里面的小秘密



一个六面骰子100 000次结果统计


20200409132037184.jpg


emmm 根据都差不多,区别不是很大如果次数足够多在理论上是一样的。

那我们接下来看一下两个六面骰子的结果


20200409132252642.jpg


咦这个的区别就这么大了,emmm,这个里面的结果大家也懂了。

记得细品,细细品。


看看怎么样查看其他的结果



安装pygal画廊


在DOS中输入 pip install pygal 即可,如果安装不了等情况请留言或私聊


创建骰子的类


#die.py
from random import randint
#导入随机函数
class Die():
      ''' 表示一个骰子的类 '''
      def __init__(self, num_sides = 6):
            ''' 默认骰子6个面 '''
            self.num_sides = num_sides
      def roll(self):
            ''' 返回一个位于1和骰子面之间的随机值 '''
            return randint(1, self.num_sides)


打印结果查看


#die_visual.py 
from die import Die 
#导入骰子类 
# 创建一个D6  
die = Die() 
# 掷几次骰子,并将结果存储在一个列表中 
results = [] 
for roll_num in range(100):     
    result = die.roll()     
    results.append(result)      
    print(results) 


测试


[6, 2, 3, 3, 6, 3, 5, 2, 5, 2, 4, 5, 1, 3, 2, 4, 1, 2, 3, 4, 1, 2, 1, 5, 5, 2, 2, 5,


目前为止没有问题


统计分析结果


frequencies = []
for value in range(1, die.num_sides+1):
      frequency = results.count(value)
      frequencies.append(frequency)
print(frequencies)


测试


[16, 18, 18, 14, 17, 17]


绘制图形,进行可视化操作


import pygal 
#导入pygal库
……
# 对结果进行可视化
hist = pygal.Bar() 
hist.title = "Results of rolling one D6 1000 times." 
#图形标题
hist.x_labels = ['1', '2', '3', '4', '5', '6'] 
#图形底标
hist.x_title = "Result" hist.y_title = "Frequency of Result" 
#图形横轴与纵轴
hist.add('D6', frequencies) #图例
hist.render_to_file('die_visual.svg') 


我们把上面的测试次数加大一点加到100 000 就得到了结果


20200409133732274.jpg


两个D6 骰子



再添加一个骰子,然后把结果值,底标及名字进行修改即可


#two_die_visual.py
from die import Die
import pygal
#创建两个D6
die_1 = Die()
die_2 = Die()
#多次投几次骰子,并将结果存储列表中
results = []
for roll_num in range(100000):
      result = die_1.roll() + die_2.roll()
      results.append(result)
#print(results)#输出投掷骰子结果
#分析结果
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(1, max_result+1):
      frequency = results.count(value)
      frequencies.append(frequency)
#print(frequencies)
#进行结果比对
hist = pygal.Bar()
#name = ''
hist.title = 'Results of rolling two D6 100000 times.'
hist.x_labels = ['1', '2', '3', '4', '5','6', '7', '8', '9',
                 '10', '11', '12']
hist.x_title = 'Result'
hist.y_title = 'Frequency of Result'
hist.add('D6 + D6', frequencies)
hist.render_to_file('two_die_visual1.svg')


这样子就可以得到下图了


20200409134222210.jpg


那么问题来了,能不能自己定义次数,让次数再多一点,同时直接修改名字

ok


搞他


修改,完善


#two_die_visual.py
from die import Die
import pygal
#创建一个D6
die_1 = Die()
die_2 = Die()
#多次投几次骰子,并将结果存储列表中
results = []
time = int(input('请输入测试次数'))
for roll_num in range(time):
      result = die_1.roll() + die_2.roll()
      results.append(result)
#print(results)#输出投掷骰子结果
#分析结果
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(1, max_result+1):
      frequency = results.count(value)
      frequencies.append(frequency)
#print(frequencies)
#进行结果比对
hist = pygal.Bar()
#name = ''
hist.title = f'Results of rolling two D6 {time} times.'
#必须使用python3.7以上版本才可以使用该语句,不然会报错
#3.7以下使用下面语句
#hist.title = 'Results of rolling two D6 {} times.'.format(time)
hist.x_labels = ['1', '2', '3', '4', '5','6', '7', '8', '9',
                 '10', '11', '12']
hist.x_title = 'Result'
hist.y_title = 'Frequency of Result'
hist.add('D6 + D6', frequencies)
hist.render_to_file('two_die_visual1.svg')


其他的类型都可以自己设计了


如果添加D8 就用 Die(8)即可,记得修改下标呦!

其他的小秘密还得靠你自己去探索呦

一天一个秃头小技巧,大家都是秃头小宝贝,奥利给!!!


目录
相关文章
|
1月前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
1月前
|
存储 人工智能 算法
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
|
19天前
|
SQL 算法 数据可视化
【贪心算法】发饼干问题详解python
【贪心算法】发饼干问题详解python
|
1月前
|
机器学习/深度学习 Python
Python随机点名
Python随机点名
|
10月前
|
otter Python
【Python】Python 实现猜单词游戏——挑战你的智力和运气!
【Python】Python 实现猜单词游戏——挑战你的智力和运气!
236 0
|
存储 小程序 Python
Python|随机函数——纸牌游戏的发牌机制
Python|随机函数——纸牌游戏的发牌机制
119 1
|
11月前
|
数据处理 Python
Python:1037 在霍格沃茨找零钱_最后一个测试点
Python:1037 在霍格沃茨找零钱_最后一个测试点
59 0
|
Python
Python|找出井字棋的获胜者
Python|找出井字棋的获胜者
62 0