天天看點

Python-計算抛硬币出現連續10次正面朝上的機率的仿真實驗前言最後的一些話

計算抛硬币出現連續10次正面朝上的機率的仿真實驗

  • 前言
    • 1.問題重述
    • 2.問題分析
    • 3.問題的求解
    • 4.代碼
    • 5.關于抛硬币的一點注釋
  • 最後的一些話

前言

本人是大一剛入學沒多久的新生,第一次寫部落格可能某些方面不太好望大家多多諒解!您覺得寫得不好的地方,歡迎加大力度開口噴/滑稽~

1.問題重述

抛硬币100次,問出現10次連續正面朝上的機率為多少?

2.問題分析

針對問題,在python上大緻可以分為兩種方法實作:

1)仿真實驗

2)數學公式的遞歸計算

本文使用的是仿真實驗計算,仿真實驗的實驗次數越多,計算得到的結果越精準。

3.問題的求解

首先,記硬币的正面為1,反面為0,在python裡面引用random庫的randint()函數生成隻有一百萬個0或1的清單,然後使用for循環周遊清單,統計0或1重複出現的次數并進行累加,在循環語句中添加條件隻為正面,即清單的第i個元素是1且第i+1個元素也是1;在循環語句的最後再判斷這個重複出現的次數是否等于10,如果等于10,就累加給另外一個變量,最終将這個變量除于10000就可以得到抛硬币100次,出現10次連續正面朝上的機率。

4.代碼

import random as rd
row = [rd.randint(0,1) for i in range(1000000)]#緊湊格式的生成1000000個元素清單
a,sum1 = 1,0
for i in range(len(row)-1):
    if row[i] == 1 and row[i] == row[i+1]:#判斷第i個元素是否為1且第i個跟第i+1個元素是否相同
        a += 1
    else:
        a = 1
    if a == 10:
        sum1 += 1
print(sum1/10000)
           

5.關于抛硬币的一點注釋

首先關于最終輸出結果為什麼要除于10000,我們仿真實驗生成的是1000000個隻有0或1的清單,而問題是求抛硬币100次出現10次正面連續朝上的機率,是以這裡的1000000個元素的清單實際上10000次抛硬币100次的仿真結果。

最後的一些話

本人第一次寫部落格,某些地方不足請大家多多包涵,哪裡不足請大力提出意見,就算是祖安文科狀元也沒事,别滿腹金文憋在心中,這多委屈/滑稽,最後謝謝大家!