題目連結:https://rosalind.info/problems/rna/
給一段DNA序列,要轉成RNA序列
其中,DNA在轉錄(transcription, 抄錄)成RNA時,ATCG會被抄寫成AUCG
(DNA to RNA)
A => A
T => U
C => C
G => G
抄寫的過程仰賴RNA聚合酶(RNA polymerase),他是把DNA拷貝成RNA的抄寫機,只是抄寫機的鍵盤上沒有T
這個按鍵,於是拿U
來代替。
不過要注意:DNA是雙股螺旋;RNA是單股的沒有固定形狀、比較脆弱
(雖然此處知識點跟題目無關就是了 xd)
DNA(Deoxyribonucleic acid, 去氧核糖核酸)是雙股螺旋,
A-T、C-G
,左右形成兩兩一對,結構穩定。
RNA(Ribonucleic acid, 核糖核酸)是單股不規則形狀(不是單股螺旋),會自己跟自己形成鍵結而成特殊形狀,未來有機會再詳談。RNA只有單股,所以結構相對不穩定,容易被降解。
輸入:
GATGGAACTTGACTACGTAAATT
輸出:
GAUGGAACUUGACUACGUAAAUU
程式作法有非常多種,可以直接疊代一次轉換
程式碼:
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(參數一, [[參數二], 參數三])
至少要填入第一個參數,
至於參數二、參數三則是可選的
傳入一個字典,但此字典的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!!
傳入字串的話,就是一個字元對另一個字元的取代
限制比較多,能做的轉換比方法一還少
傳入的兩個字串(參數一、參數二)必須等長
table = str.maketrans(',.!', ',。!') # 字符全形轉換
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天,天氣真好。啊!忽然下雨了。。。
只刪除特定字元
table = str.maketrans('', '', ',.!') # 不執行取代,而是把所有標點符號去除
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天天氣真好啊忽然下雨了
取代並刪除字元
table = str.maketrans('真', '不', ',.!') # 天氣:真好 => 不好
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天天氣不好啊忽然下雨了
取代並刪除字元(可以觀察到,是先做完取代,然後再刪除字元)
table = str.maketrans(',.!', ',。!','.') # 字符全形轉換,最後再刪除句號
s = "今天,天氣真好.啊!忽然下雨了..."
print(s.translate(table)) # 今天,天氣真好啊!忽然下雨了