跳轉到

📚專題:DNA與遺傳編碼


📕 引言


孩子身上會有來自父親或母親的特徵,如血型、眼睛顏色和捲舌的能力,這種生物後代獲得親代的特徵,稱為遺傳。
現代生物遺傳的研究歷程,從孟得爾豌豆實驗建立的遺傳規則(1865),到染色體在細胞減數分裂與有性生殖的重新組合(1902),到去氧核醣核酸(DNA)的遺傳功能確認(1952),到人類基因組序列草圖的發表(2001),至今一直不斷的在發展,廣泛應用在遺傳工程、基因定序、法醫鑑識、疾病防治等,甚至是新冠病毒的相關研究。
dna與花色
(資料來源:1)
染色體 dna模型
(資料來源:2)
資訊科技可以應用在生物遺傳的研究,幫助學習者理解遺傳物質的結構。在此專題中,請實作出遺傳物質DNA及含有遺傳編碼訊息的3D模型
建議先備課程

在學習本專題前,建議先完成 「探索3D空間」 ,在學習概念銜接上會較為平順。





📙 問題


要如何做出DNA的模型呢?我們需要對DNA與遺傳的機制有一定的認識後,才能使用資訊科技來實作出3D模型。
我們需要了解的是:
  • 什麼是DNA?它的作用又是什麼?
  • DNA的分子結構(化學結構)是什麼?
  • 什麼是遺傳編碼?它的種類有哪些?

問題


想一想,還有想到與DNA 3D模型實作相關的問題嗎?





📗 搜尋


利用搜尋引擎,運用「DNA」「遺傳」「染色體」…等關鍵字,可以找到許多相關的資料。
維基百科: DNA
維基百科: 染色體
維基百科: 遺傳密碼
維基百科: 人類基因組
遺傳學基本課程
可汗學院: DNA到RNA到蛋白質

DNA是生物的分子藍圖,它的遺傳編碼會逐步產生蛋白質,而蛋白質是地球上生物體中的必要組成成分。請觀看以下影片來認識什麼是DNA及它的功能。

(4分54秒,可選中文字幕, 資料來源:3)


在生物的細胞核中有染色體,染色體中有雙螺旋結構的DNA。

染色體dna

(資料來源:4)


DNA的兩個螺旋骨架是由數以百萬計的核苷酸分子相連。核苷酸上的鹼基會成對(A-T成對,C-G成對)。化學結構圖如下。

dna化學結構

(資料來源:5)

補充 什麼是核苷酸?
核苷酸是核酸的基本組成單位。核苷酸以一個含氮鹼基為核心,加上一個五碳醣和一個或者多個磷酸基團組成。詳細資料可參考 維基百科: 核苷酸


DNA上的ATCG四種鹼基,經過組合後,會有合成胺基酸(蛋白質基本單位)的訊息,這就是基礎的遺傳編碼。

dna遺傳編碼

(資料來源:6)

補充 DNA遺傳密碼子
標準遺傳密碼是將DNA或mRNA序列以三個核苷酸為一組的「密碼子(codon)」轉譯為蛋白質的胺基酸序列,以用於蛋白質合成。詳細資料可參考 維基百科: 遺傳密碼
本專題為簡化設計,易於中小學生理解資訊科技在生物上的應用,僅使用到最基礎的ATCG編碼。





📒 構思


從分子的化學結構,可以看出DNA非常的複雜。
dna分子
(資料來源:7)
為了讓人能理解並聚焦於DNA的主要結構,模型的設計會簡化,我們使用球體代表核苷酸分子(組成兩個螺旋長條骨架),橢圓體代表鹼基。
dna簡化設計
另外,為表現出DNA模型上的遺傳編碼序列,綠色橢圓代表鹼基A,紅色橢圓代表鹼基T,藍色橢圓代表鹼基C,黃色橢圓代表鹼基G。且依查詢到的資料,A-T需成對, C-G需成對。





📘 實作(4)

波提甜甜圈


我們的目標,是要做出DNA雙螺旋的形狀,可是,要如何做出3D的螺旋形呢?我們可以先把它「壓平」成2D的形狀,如下圖。

螺旋降維

(資料來源:8)


除了壓平後的圓周線,依照設計的構想,還要以球體(核苷酸分子)來組合成圓周。從「圓周」與「球體」這兩個關鍵字,你會聯想到什麼?

甜甜圈

(資料來源:9)

沒錯,要實作螺旋形前,先做出波提甜甜圈吧!


接下來也會使用到在3D入門課程學習到的,物體的親子旋轉關係。

3D物體親子關係
甜甜圈
先做出旋轉中心(白)與核苷酸球體(橘),並建立親子關係。當白色的中心自轉時,橘色的球體會如何?

旋轉30度


利用重複結構的程式,可以做出多個球,你看得出下圖中,橘色球體的變化規則嗎?這樣規則會呈現在迴圈的程式結構中。

樣式辨識


把橘色球體放大,就做出波提甜甜圈了。

波提

請動手寫出程式。

球體(核苷酸)之間的旋轉角度?
在本課程中,球體之間是採用30度的旋轉角度,每繞一圈會有12個球體(核苷酸)。因撰寫之時並沒有查到相關資料,所以30度的由來是約略從圖片模型推估出來的。
後來有收到桃園建國國中郭老師提出的修正建議,「…旋轉角度,實際上大概是36度左右,大約10對鹼基一圈…」,如果有動手寫code的人,可以試試將範例程式的旋轉角度依修正建議改為「36 * i」,並執行看看。在此也一併感謝郭老師提出的的建議。


範例程式 波提甜甜圈 - - - - - - - (專題實作1/4 新檔)

【長度6:24 章節時間如下】

  • 0:00 檔案儲存、模組設定
  • 0:46 波提甜甜圈
from 模擬3D模組 import *

for i in range(12) :
    旋轉中心 = 新增立方體()
    旋轉中心.旋轉z = 30 * i

    核苷酸 = 新增球體()
    核苷酸.顏色 = color.orange
    核苷酸.位置y = 10
    核苷酸.親代 = 旋轉中心
    核苷酸.縮放 = 7.5

模擬主迴圈()





螺旋與自轉


如何讓波提甜甜圈變成立體螺旋呢?其實很簡單,只要使用與「壓平」相反的動作。

從波提到螺旋


從側面觀察螺旋形,你能看出z軸座標的方向上,哪一個物體在做位移?位移的變化規則是什麼?

螺旋側面


另外,為了讓人更能看清楚3D模型,可以讓模型自動旋轉。為了讓每一個球體(核苷酸分子)都自動旋轉,需要在原點位置加上一個物體,並使用「三代親子關係」。

自動旋轉


請動手寫出程式。


範例程式 螺旋與自轉 - - - - - - - (專題實作2/4 接續)

【長度5:15 章節時間如下】

  • 6:30 螺旋與自轉
from 模擬3D模組 import *

原點 = 新增物體()

for i in range(100) :
    旋轉中心 = 新增物體()
    旋轉中心.旋轉z = 30 * i
    旋轉中心.位置z = 5 * i
    旋轉中心.親代 = 原點

    核苷酸 = 新增球體()
    核苷酸.顏色 = color.orange
    核苷酸.位置y = 10
    核苷酸.親代 = 旋轉中心
    核苷酸.縮放 = 7.5

def 當更新時(dt):
    原點.旋轉z  +=  0.2

模擬主迴圈()





雙股螺旋


完成螺旋形後,再來思考如何做出雙螺旋?

雙股螺旋


看得出雙螺旋的「對稱」特性嗎?

請動手寫出程式。


範例程式 雙股螺旋 - - - - - - - (專題實作3/4 接續)

【長度1:23 章節時間如下】

  • 11:48 雙股螺旋
from 模擬3D模組 import *

原點 = 新增物體()

for i in range(100) :
    旋轉中心 = 新增物體()
    旋轉中心.旋轉z = 30 * i
    旋轉中心.位置z = 5 * i
    旋轉中心.親代 = 原點

    核苷酸 = 新增球體()
    核苷酸.顏色 = color.orange
    核苷酸.位置y = 10
    核苷酸.親代 = 旋轉中心
    核苷酸.縮放 = 7.5

    核苷酸2 = 新增球體()
    核苷酸2.位置y = -10
    核苷酸2.親代 = 旋轉中心
    核苷酸2.縮放 = 7.5

def 當更新時(dt):
    原點.旋轉z  +=  0.2

模擬主迴圈()





成對鹼基


鹼基的做法與核苷酸類似,只是把球體換成橢圓體。

鹼基


成對鹼基與雙螺旋雷同,使用「對稱」的概念。

請動手寫出程式。

範例程式 成對鹼基 - - - - - - - (專題實作4/4 接續)

【長度3:14 章節時間如下】

  • 13:14 成對鹼基
from 模擬3D模組 import *

原點 = 新增物體()

for i in range(100) :
    旋轉中心 = 新增物體()
    旋轉中心.旋轉z = 30 * i
    旋轉中心.位置z = 5 * i
    旋轉中心.親代 = 原點

    核苷酸 = 新增球體()
    核苷酸.顏色 = color.orange
    核苷酸.位置y = 10
    核苷酸.親代 = 旋轉中心
    核苷酸.縮放 = 7.5

    鹼基 = 新增球體()
    鹼基.顏色 = color.orange
    鹼基.位置y = 5
    鹼基.親代 = 旋轉中心
    鹼基.縮放y = 10

    核苷酸2 = 新增球體()
    核苷酸2.位置y = -10
    核苷酸2.親代 = 旋轉中心
    核苷酸2.縮放 = 7.5

    鹼基2 = 新增球體()
    鹼基2.位置y = -5
    鹼基2.親代 = 旋轉中心
    鹼基2.縮放y = 10

def 當更新時(dt):
    原點.旋轉z  +=  0.2

模擬主迴圈()





📙 擴展(2)

編碼字串


接下來是讓ATCG四種鹼基的顏色,按照原本的構想。

dna簡化設計


將DNA序列的資料(鹼基種類)存放在字串中。因原本的重複迴圈結構就需要索引值(i),後續判斷顏色時,也需要取得鹼基編碼值。在此使用Python內建的enumerate函式,可以從群集中同時取得索引值及資料內容。

enumerate內建函式


在判斷每次的鹼基編碼文字時,會利用選擇結構,來決定顏色,流程圖如下:

選擇結構流程圖


請動手寫出程式。


範例程式 編碼字串 - - - - - - - (專題擴展1/2 接續)

【長度8:06 章節時間如下】

  • 16:33 編碼字串
from 模擬3D模組 import *

原點 = 新增物體()
DNA序列 = 'AAAATTTTCCCCGGGGAAAATTTTCCCCGGGG'

for i, 編碼 in enumerate(DNA序列) :
    旋轉中心 = 新增物體()
    旋轉中心.旋轉z = 30 * i
    旋轉中心.位置z = 5 * i
    旋轉中心.親代 = 原點

    核苷酸 = 新增球體()
    核苷酸.顏色 = color.orange
    核苷酸.位置y = 10
    核苷酸.親代 = 旋轉中心
    核苷酸.縮放 = 7.5

    鹼基 = 新增球體()
    鹼基.顏色 = color.orange
    鹼基.位置y = 5
    鹼基.親代 = 旋轉中心
    鹼基.縮放y = 10

    核苷酸2 = 新增球體()
    核苷酸2.位置y = -10
    核苷酸2.親代 = 旋轉中心
    核苷酸2.縮放 = 7.5

    鹼基2 = 新增球體()
    鹼基2.位置y = -5
    鹼基2.親代 = 旋轉中心
    鹼基2.縮放y = 10

    if 編碼 == 'A' :
        鹼基.顏色 = color.green
        鹼基2.顏色 = color.red
    elif 編碼 == 'T' :
        鹼基.顏色 = color.red
        鹼基2.顏色 = color.green
    elif 編碼 == 'C' :
        鹼基.顏色 = color.blue
        鹼基2.顏色 = color.yellow
    elif 編碼 == 'G' :
        鹼基.顏色 = color.yellow
        鹼基2.顏色 = color.blue
    else :
        pass

def 當更新時(dt):
    原點.旋轉z  +=  0.2

模擬主迴圈()





人類DNA序列


人類基因組計劃是一項跨國跨學科的科學探索巨型工程,為了要測定組成人類染色體中所包含的六十億對組成的核苷酸序列,從而繪製人類基因組圖譜。2001年人類基因組工作草圖的發表被認為是人類基因組計劃成功的里程碑。大多數政府資助的測序是在美國,英國,日本,法國,德國和中國的20所大學和研究中心進行。

人類基因組計劃

(資料來源:)


我們也可以在網站中查詢到部分人類的DNA序列資料,如臺灣人體生物資料庫的網站。

臺灣人體生物資料庫


人類基因組含有約30億個DNA鹼基對,而X染色體約有1.5億個鹼基對。X染色體是決定性別的染色體之一,但它也可能會造成隱性遺傳疾病的發生。讓我們來查查看人類X染色體的一小段序列(位置10022~10122),查詢到的鹼基序列如下圖:

人類X染色體的序列片段


從網站下載的範例DNA序列資料如下(字串形式):

DNA序列 = 'ACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATGTGGGTGGGAGCAGATTAGAGAATAAAAGCAGACTGCCTGAGCCAGCAGTGGCAACCCA'


有了這些資料,就可以做出人類x染色體的DNA片段模型。

請動手寫出程式。


範例程式 人類DNA序列 - - - - - - - (專題擴展2/2 接續)

【長度1:45 章節時間如下】

  • 24:42 人類DNA序列
from 模擬3D模組 import *    

原點 = 新增物體()
DNA序列 = 'ACCCTAACCCTAACCCTCTGAAAGTGGACCTATCAGCAGGATGTGGGTGGGAGCAGATTAGAGAATAAAAGCAGACTGCCTGAGCCAGCAGTGGCAACCCA'

for i, 編碼 in enumerate(DNA序列) :
    旋轉中心 = 新增物體()
    旋轉中心.旋轉z = 30 * i
    旋轉中心.位置z = 5 * i
    旋轉中心.親代 = 原點

    核苷酸 = 新增球體()
    核苷酸.顏色 = color.orange
    核苷酸.位置y = 10
    核苷酸.親代 = 旋轉中心
    核苷酸.縮放 = 7.5

    鹼基 = 新增球體()
    鹼基.顏色 = color.orange
    鹼基.位置y = 5
    鹼基.親代 = 旋轉中心
    鹼基.縮放y = 10

    核苷酸2 = 新增球體()
    核苷酸2.位置y = -10
    核苷酸2.親代 = 旋轉中心
    核苷酸2.縮放 = 7.5

    鹼基2 = 新增球體()
    鹼基2.位置y = -5
    鹼基2.親代 = 旋轉中心
    鹼基2.縮放y = 10

    if 編碼 == 'A' :
        鹼基.顏色 = color.green
        鹼基2.顏色 = color.red
    elif 編碼 == 'T' :
        鹼基.顏色 = color.red
        鹼基2.顏色 = color.green
    elif 編碼 == 'C' :
        鹼基.顏色 = color.blue
        鹼基2.顏色 = color.yellow
    elif 編碼 == 'G' :
        鹼基.顏色 = color.yellow
        鹼基2.顏色 = color.blue
    else :
        pass

def 當更新時(dt):
    原點.旋轉z  +=  0.2    

模擬主迴圈()





📒 結語


經過了這個專題,你是否感受到資訊科技應用的廣泛,居然在生物領域也派得上用場呢!

想一想,在平日學習的科目中,還有什麼可以結合資訊科技呢?如果你找到有趣的題目,也可以搜尋、構思並動手寫出解決問題的程式哦。

我們下次再會。




  1. 花色基因 可汗學院連結 

  2. 染色體 , 維基百科連結 ; DNA結構模型複製品,科學博物館-倫敦 

  3. 什麼是DNA?DNA如何發揮功能?, by Stated Clearly , youtube連結 

  4. 染色體 , 維基百科連結 

  5. DNA , 維基百科連結 

  6. 什麼是DNA?DNA如何發揮功能?, by Stated Clearly , youtube連結 

  7. 去氧核糖核酸, 維基百科連結 

  8. 螺旋, 維基百科連結 

  9. 甜甜圈, 維基百科連結