居然已經是十二年前的事情了,當時寫了一個小程式來模擬Aa x Aa生很多子代時,顯隱性的比例如何-【 遺傳小程式-來生個孩子吧】
今年動腦筋用別種方式呈現,由於學生都學過了積木式編寫程式,如microbit的makecode或是scratch,我想讓學生知道怎麼去編寫程式模擬這個過程,同時也要藉由這個程式來做模擬實驗。
課程中我是採用microbit的線上介面來讓學生使用,但是課程結束之後我才想起,其實用scratch更好用,因為不用另外顯示變數執行結果,畫面即可呈現,可以讓程式短一點。
課程進行方式是先將程式畫面印出給學生看,提問討論讓學生理解各個程式區塊代表的意義,然後就讓學生自己修改程式的執行迴圈數,進行模擬實驗並紀錄在表格裡,看看子代數和顯隱性比值之間的關係。
最後提問一些例子,像是如果要模擬 XY x XX 或是 Aa x aa,要怎麼修改程式,
Scratch的線上連結,按下綠旗即可執行,可以拖動滑桿改變子代數,看結果如何。
https://scratch.mit.edu/projects/296249507/
scratch的積木程式頁面
============================================================
以下是microbit的
貼在makecode的java script
let Aa = 0
let 小孩 = 0
let _2BigA = 0
let 卵子 = 0
let 精子 = 0
function 生小孩() {
精子 = Math.randomRange(0, 1)
卵子 = Math.randomRange(0, 1)
小孩 = 精子 + 卵子
}
input.onButtonPressed(Button.A, function () {
basic.clearScreen()
_2BigA = 0
Aa = 0
_2smallA = 0
for (let i = 0; i < 10; i++) {
生小孩()
if (小孩 == 0) {
_2smallA += 1
} else if (小孩 == 1) {
Aa += 1
} else {
_2BigA += 1
}
}
basic.showString("AA:Aa:aa =")
basic.showString("" + _2BigA + ":" + Aa + ":" + _2smallA)
basic.showString("R=")
basic.showNumber((_2BigA + Aa) / _2smallA)
})