2016-11-14 17 views
1

Я пытаюсь создать программу, которая переводит последовательность ДНК, введенную пользователем 3 альтернативной последовательности белка с помощью следующего словаря (кодоны ключей, аминокислоты являются значением):ДНК с последовательностью белка

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

Я хочу просто использовать отображение, а не биотоп. Таким образом, когда программа запущена она должна выглядеть следующим образом:

Please enter a DNA sequence: GCTgttaagactatgaaaagaataagcaacaccatcaat 

Frame 1 is AVKTMKRISNTIN 

Frame 2 is LLRL*KE*ATPS 

Frame 3 is C*DYEKNKQHHQ 

Я создал этот словарь из файла, но я не уверен, как начать отсюда. Любая помощь будет принята с благодарностью. Благодаря!

ответ

1

Объявите словарь:

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

Slice строка для кусков 3-х символов:

def chunks (arr, size = 1, frame = 1): 
    return [arr[i: i+size] for i in range(frame - 1, len(arr), size)] 
dna = input('Enter DNA: ').upper() 

Затем карта для prot_match значения текущей последовательности (использование get для обеспечения безопасности в случае, если вы не имеют такой последовательности):

frames = 3 
for frame in range(frames): 
    chunked_dna = chunks(dna, 3, frame + 1) 
    prot_seq = map(lambda seq: prot_match.get(seq, '0'), chunked_dna) 

Окончание LY, используйте join, чтобы получить последовательность белка в виде строки из карты:

prot_seq = ''.join(prot_seq) 
    print('Protein sequence number', frame + 1, ':', prot_seq) 

Пример (эти фрагменты вместе в файле):

Enter DNA: GCTgttaagactatgaaaagaataagcaacaccatcaat 
Protein sequence number 1 : AVKTMKRISNTIN 
Protein sequence number 2 : LLRL*KE*ATPS0 
Protein sequence number 3 : C*DYEKNKQHHQ0 
+0

Спасибо так много для быстрого ответа! Это отлично работает для кадра 1, поэтому я предполагаю, что для других кадров я должен отредактировать return [arr [i: i + size] для i в диапазоне (0, len (arr), размер)] до диапазон (1, len (обр.), размер)? – zmoores1

+0

@ zmoores1 Я не уверен, как вы определяете другие кадры. есть ли у вас другие словари? не знакомы с белками. – Uriel

+0

Рамка 1 начинается с символа 1 в последовательности Рамка 2 должна начинаться со 2-го символа, а кадр 3 от третьего символа Игнорировать весь аспект протеина/дна и просто посмотреть на него со словарного отображения. – zmoores1