最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【ROSALIND】【練Python,學(xué)生信】22 核酸序列剪接

2019-02-18 16:50 作者:未琢  | 我要投稿

如果第一次閱讀本系列文檔請先移步閱讀【ROSALIND】【練Python,學(xué)生信】00 寫在前面 ?謝謝配合~

題目:

序列剪接(RNA Splicing)

Given: A DNA string s (of length at most 1 kbp) and a collection of substrings of s acting as introns. All strings are given in FASTA format.

所給:一條長度不超過1kb的DNA序列s,以及代表內(nèi)含子的一些s子序列。

Return: A protein string resulting from transcribing and translating the exons of s. (Note: Only one solution will exist for the dataset provided.)

需得:由s序列外顯子翻譯得到的一條多肽序列。

?

測試數(shù)據(jù)

>Rosalind_10

ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGGTCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG

>Rosalind_12

ATCGGTCGAA

>Rosalind_15

ATCGGTCGAGCGTGT

測試輸出

MVYIADKQHVASREAYGHMFKVCA

?

背景

真核生物的基因是不連續(xù)的,由外顯子和內(nèi)含子組成。DNA上的內(nèi)含子會被轉(zhuǎn)錄到前體RNA中,但成熟mRNA上內(nèi)含子被剪切掉,外顯子連接在一起,在細(xì)胞中有剪接體催化這個過程的發(fā)生。

?

思路

本題的關(guān)鍵點是刪去一個序列中的一段子序列,再把剩下的序列按原來的順序連接在一起。我的思路是在原序列中查找一個內(nèi)含子序列,把除這個序列以外的其他(兩段)序列按順序存儲為一個新字符串,用新串內(nèi)容代替老串,再查找第二個內(nèi)含子序列,以此類推即可。

將該題拆為幾個小問題:

其一,讀取fasta文件并分別存儲各字符串;

其二,按上面提到的思路,在原序列中查找內(nèi)含子序列,剪接出去內(nèi)含子的成熟序列;

其三,將DNA序列轉(zhuǎn)錄為RNA序列(以‘U’替換‘T’即可);

其四,將RNA序列翻譯為蛋白質(zhì)。

可以看到,除問題二外,其余皆為之前解決過的問題。

?

代碼

codon_table = {

??? 'GCU':'A', 'GCC':'A', 'GCA':'A', 'GCG':'A', 'CGU':'R', 'CGC':'R',

??? 'CGA':'R', 'CGG':'R', 'AGA':'R', 'AGG':'R', 'UCU':'S', 'UCC':'S',

??? 'UCA':'S', 'UCG':'S', 'AGU':'S', 'AGC':'S', 'AUU':'I', 'AUC':'I',

??? 'AUA':'I', 'UUA':'L', 'UUG':'L', 'CUU':'L', 'CUC':'L', 'CUA':'L',

??? 'CUG':'L', 'GGU':'G', 'GGC':'G', 'GGA':'G', 'GGG':'G', 'GUU':'V',

??? 'GUC':'V', 'GUA':'V', 'GUG':'V', 'ACU':'T', 'ACC':'T', 'ACA':'T',

??? 'ACG':'T', 'CCU':'P', 'CCC':'P', 'CCA':'P', 'CCG':'P', 'AAU':'N',

??? 'AAC':'N', 'GAU':'D', 'GAC':'D', 'UGU':'C', 'UGC':'C', 'CAA':'Q',

??? 'CAG':'Q', 'GAA':'E', 'GAG':'E', 'CAU':'H', 'CAC':'H', 'AAA':'K',

??? 'AAG':'K', 'UUU':'F', 'UUC':'F', 'UAU':'Y', 'UAC':'Y', 'AUG':'M',

??? 'UGG':'W',

??? 'UAG':'Stop', 'UGA':'Stop', 'UAA':'Stop'

??? }

?

?

def readfasta(lines):

??? seq = []

??? index = []

??? seqplast = ""

??? numlines = 0

??? for i in lines:

??????? if '>' in i:

??????????? index.append(i.replace("\n", "").replace(">", ""))

??????????? seq.append(seqplast.replace("\n", ""))

??????????? seqplast = ""

??????????? numlines += 1

??????? else:

??????????? seqplast = seqplast + i.replace("\n", "")

??????????? numlines += 1

??????? if numlines == len(lines):

??????????? seq.append(seqplast.replace("\n", ""))

??? seq = seq[1:]

??? return index, seq

?

?

def translation(seq):

'''負(fù)責(zé)翻譯RNA為蛋白質(zhì)的函數(shù)'''

??? i = 0

??? p = ""

??? while i < len(seq)/3 - 1:

??????? n = seq[3 * i] +seq[3*i+1] + seq[3*i+2]

??????? r = codon_table[n]

??????? i += 1

??????? p = p + r

??? return p

?

?

f = open('rosalind_splc.txt', 'r')

lines = f.readlines()

f.close()

?

(index, seq) = readfasta(lines)

totlaseq = seq[0]

introns = seq[1:]? # 將讀取到的原序列和內(nèi)含子序列分別存儲

for line in introns:

??? n = len(line)? # 得到內(nèi)含子的長度

??? i = 0

??? while i < len(totlaseq) - n + 1:

??????? subseq = totlaseq[i:i + n]? # 逐個掃描長度與內(nèi)含子相同的序列

??????? if subseq == line:? # 若找到內(nèi)含子

??????????? newseq = totlaseq[:i] + totlaseq[i + n:]? # 用新字符串存儲去掉內(nèi)含子的部分

??????????? totlaseq = newseq? # 用新串取代老串

??????? i += 1

?

rnaseq = totlaseq.replace('T', 'U')

protein = translation(rnaseq)

print(protein)

?

f = open('output.txt', 'w')

f.write(protein)

f.close()


【ROSALIND】【練Python,學(xué)生信】22 核酸序列剪接的評論 (共 條)

分享到微博請遵守國家法律
甘谷县| 泸定县| 齐河县| 广西| 通化市| 宣武区| 华蓥市| 扬中市| 博爱县| 泗阳县| 宿迁市| 柳林县| 定兴县| 瑞金市| 普兰店市| 鲁甸县| 甘孜| 平江县| 桑植县| 明水县| 汝南县| 乌鲁木齐县| 叙永县| 股票| 马边| 固始县| 亳州市| 公主岭市| 合肥市| 额尔古纳市| 石城县| 家居| 吉隆县| 蓝山县| 门头沟区| 衡南县| 色达县| 石景山区| SHOW| 景泰县| 南宫市|