Swift Playgrounds原來還能幫你驗證數學作業

Swift精進第004天-運用Playgrounds來計算驗證機率問題

Photo by John Moeses Bauan on Unsplash

想必大家在高中都有過這段「難忘」的回憶

如果箱中有五顆球,大小重量都相同,每次抓球後要放回打亂,五顆球得分不同,各為:20分、10分、10分、0分、0分
問:如果抓五次球,那得到50分的機率有多高?
問:其它分數的機率各有多少?

以前都只能用機率的方法來計算,但是只要自己有一點點想錯方向,答案就會差個十萬八千里…
尤其在不知道正確解答的時候,這樣子就更危險了
不過既然現在已經會用Playgrounds了,不如就試著來實際跑看看結果如何?

let answer_hitScore = 20 //設定球為20分
let answer_nearScore = 10 //設定球為10分
let answer_wrongScore = 0 //設定球0分
//為了要計數,先列一個11位的陣列,把內容全塡為0
var scoreCount:[Int] = Array(repeating: 0, count: 11)
//設定執行100萬次
for _ in 1...1000000 {
//重複開始時,先將計分歸零
var gameScore = 0
//用for in loop執行5次,亂數取1~5的整數
for _ in 1...5 {
switch Int.random(in: 1...5) {
case 1: //當為1時表示得到20分的球
gameScore += answer_hitScore
case 2,3: //當為2或3時表示得到10分的球
gameScore += answer_nearScore
case 4,5: //當為4或5時表示得到0分的球
gameScore += answer_wrongScore
default: //一定要列預設值,隨便給個東西進去
gameScore += 0
}
}
//使用switch case來把各種分數計入陣列。
//這邊一定有更簡潔的寫法,不過我懶得想就土法煉剛了 (唉嘿~)
switch gameScore {
case 0:
scoreCount[0] += 1
case 10:
scoreCount[1] += 1
case 20:
scoreCount[2] += 1
case 30:
scoreCount[3] += 1
case 40:
scoreCount[4] += 1
case 50:
scoreCount[5] += 1
case 60:
scoreCount[6] += 1
case 70:
scoreCount[7] += 1
case 80:
scoreCount[8] += 1
case 90:
scoreCount[9] += 1
case 100:
scoreCount[10] += 1
default:
print(gameScore) //同上,預設值只是隨便列的,看看到底是什麼狀況會計不了數
}
}
//跑完後,把計數print出來看結果
print(scoreCount)

以上,其實陣列也可以用Library來寫,過程會差不多,而且結果列出來時會更清楚許多。用陣列跑出來結果如下:

[10404, 50895, 128077, 204583, 229694, 189836, 115630, 51288, 16076, 3183, 334]

然後我努力的把我所剩無幾的高中數學機率公式套出來,計算的結果如下:
上下相對比一下,可以發現結果相當一致 ~ 那就表示我所寫的答案應該八九不離十啦 ~

--

--

賽思Sethought
彼得潘的 Swift iOS / Flutter App 開發教室

一隻co-founder但不太懂分工,涉足研發.採購.製程.業務.設計.行銷;一位工程師但不學無術,略懂cad.cam.PS.IL.PR.swift.db。內向.喜思考.樂遊戲.愛動漫.重健康,只是位功不成名不就的小小貨色