投擲骰子的祕密,怎麼樣猜概率最高?python告訴你!

骰子大家都玩過,那麼怎麼樣才能夠儘可能的高概率猜中呢???
三歲帶你一起來看看裏面的祕密吧

· 看看這裏面的小祕密

一個六面骰子100 000次結果統計
在這裏插入圖片描述
emmm 根據都差不多,區別不是很大如果次數足夠多在理論上是一樣的。
那我們接下來看一下兩個六面骰子的結果
在這裏插入圖片描述
咦這個的區別就這麼大了,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, 1, 6, 2, 3, 5, 5, 4, 1, 1, 5, 5, 3, 5, 6, 6, 6, 3, 2, 1, 4, 2, 1, 6, 2, 5, 2, 4, 1, 5, 4, 6, 6, 3, 5, 2, 6, 1, 2, 6, 1, 4, 4, 6, 6, 5, 5, 3, 6, 3, 4, 1, 4, 3, 4, 6, 2, 6, 3, 3, 3, 2, 3, 3, 1, 4, 4, 1, 5, 3, 1, 2, 6]

目前爲止沒有問題

統計分析結果

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 就得到了結果在這裏插入圖片描述

兩個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')

這樣子就可以得到下圖了
在這裏插入圖片描述
那麼問題來了,能不能自己定義次數,讓次數再多一點,同時直接修改名字
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)即可,記得修改下標呦!
其他的小祕密還得靠你自己去探索呦

一天一個禿頭小技巧,大家都是禿頭小寶貝,奧利給!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章