給一段DNA序列,要轉成RNA序列

RNA vs DNA
DNA在轉錄(transcription)成RNA時,ATCG會被抄寫成AUCG
抄寫的過程仰賴:RNA聚合酶(RNA polymerase),他是把DNA拷貝成RNA的抄寫機,只是抄寫機的鍵盤上沒有"T"這個按鍵,於是拿"U"來代替。
不過要注意:DNA是雙股螺旋;RNA是單股的沒有固定形狀、比較脆弱
雖然跟題目無關就是了
程式作法有非常多種,可以直接迭代一次轉換
s = "GATGGAACTTGACTACGTAAATT"
for base in s:
match base:
case 'T':
print('U', end='')
case _:
print(base, end='')
# for base in s:
# print('U' if base == 'T' else base, end='')
或者,使用正規表達式
import re
s = "GATGGAACTTGACTACGTAAATT"
rna = re.sub('T', 'U', s) # 替換(substitute)
print(rna)
或者,用字串取代
s = "GATGGAACTTGACTACGTAAATT"
# print(s.replace('T', 'U'))
def transcribe_dna_to_rna(dna):
return dna.replace('T', 'U')
print(transcribe_dna_to_rna(s))
str.replace() 一次只能處理一種字串/字元
或者,使用str.translate() 則可處理多種字串/字元
建立轉換表
s = "GATGGAACTTGACTACGTAAATT"
trans_table = str.maketrans('T', 'U')
rna = s.translate(trans_table)
print(rna)
---
str.translate() 的幾種用法:
str.maketrans(參數一, [[參數二], 參數三])
至少要填入一個參數,至於參數二、參數三則是可選的
1:只傳入一個參數:使用字典
傳入一個字典,但此字典的key只能是字元(字串的長度只能是1)
table = str.maketrans({
'a': 'alpha',
'b': 'bet',
'c': '', # 代表刪除'c'
'!': '!',
# '!!': '!!!' # 這行會出錯,key只能是字元
})
s = "abc!"
print(s.translate(table)) # alphabet!
print("I b U!!".translate(table)) # I bet U!!
2:傳入兩個參數:兩個等長字串
傳入字串的話,就是一個字元對另一個字元的取代
限制比較多,能做的轉換比方法一還少
傳入的兩個字串(參數一、參數二)必須等長
- 參數一:要被替換的原字元
- 參數二:要換成的新字元
table = str.maketrans(',.!', ',。!') # 字符全形轉換
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天,天氣真好。啊!忽然下雨了。。。
3:傳入三個參數:方法二+刪除字元
- 參數一:要被替換的原字元
- 參數二:要換成的新字元
- 參數三:要刪除的字元
只刪除特定字元
table = str.maketrans('', '', ',.!') # 不執行取代,而是把所有標點符號去除
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天天氣真好啊忽然下雨了
取代並刪除字元
table = str.maketrans('真', '不', ',.!') # 天氣:真好 => 不好
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天天氣不好啊忽然下雨了
取代並刪除字元(可以觀察到,是先做完取代,然後再刪除字元)
table = str.maketrans(',.!', ',。!','.') # 字符全形轉換,最後再刪除句號
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天,天氣真好啊!忽然下雨了