Programing/Python programming

Python - DNA sequence로부터 protein 서열 구하기

sosal 2015. 6. 3. 16:18
반응형

 

/*

 http://sosal.kr/
 * made by so_Sal
 */

 


table = {
'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S',
'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y',
'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L',
'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P',
'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q',
'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I',
'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T',
'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K',
'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R',
'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A',
'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D',
'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G',
'GGG': 'G'}
stop_codons = [ 'TAA', 'TAG', 'TGA']

 

 

기본적으로 61개의 codon과 3개의 stop codon이 주어져 있습니다.

 

조건:

1. 사용자 입력으로부터 DNA Sequence를 입력받고, start codon은 고려하지 않은 채, 처음부터 protein 서열로 바꾼다.

2. Stop codon이 나오면 그 이후의 모든 sequence는 '*'로 표시한다.

3. 마지막 부분에 남는 1개 or 2개의 nucleotide는 표현하지 않고 무시한다.

 

 

__author__ = "sosal"

#Codon Table Key DNA codon이며, value Amino acid 실제 값입니다.
table = {
'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S',
'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y',
'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L',
'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P',
'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q',
'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I',
'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T',
'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K',
'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R',
'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A',
'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D',
'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G',
'GGG': 'G'}
# Extra data in case you want it.
stop_codons = [ 'TAA', 'TAG', 'TGA']


if __name__ == "__main__":
for i in stop_codons:
table[i] = '*' # table에서 stop codon 자체를 '*'로 바꿔줍니다.

seq = input("Input DNA sequence to translate into protein: ")
protein = [] # protein이 저장될 list입니다. append 되며 점점 converting 될것입니다.
ch_finish = False # stop codon이 나왔느냐 안나왔느냐에 대한 check 루틴입니다.

for codon in range(0,len(seq)-len(seq)%3, 3): # 3개씩 이어나갈 코돈에서 혹시 남을 1개 혹은 2개의 nucleotide에 대해 처리해줍니다.
if ch_finish==False: # Stop codon이 나오지 않은 경우 protein으로 계속 번역합니다.
protein.append(table[seq[codon:codon+3]])
if table[seq[codon:codon+3]] == '*':
ch_finish = True
else: # stop codon이 한번 나오면 나머지 codon은 모두 * 처리합니다.
protein.append('*')

print("".join(protein)) # list 형태의 amino acid 변수를 구분자 없이 연결해주면서 출력합니다.

 

 

 

 

결과: CCCAATCACCCTTAGATCCCG -> PNHP***

중간에 있는 stop codon인 TAG 때문에 뒷부분이 모두 ***로 나온 걸 볼 수 있습니다.