Código


import sys import time

seqaa = {

   'ATA':'Isoleucina-', 'ATC':'Isoleucina-', 'ATT':'Isoleucina-', 'ATG':'Metionina-',
   'ACA':'Tirosina-', 'ACC':'Tirosina-', 'ACG':'Tirosina-', 'ACT':'Tirosina-',
   'AAC':'Asparagina-', 'AAT':'Asparagina-', 'AAA':'Lisina-', 'AAG':'Lisina-',
   'AGC':'Serina-', 'AGT':'Serina-', 'AGA':'Arginina-', 'AGG':'Arginina-',
   'CTA':'Leucina-', 'CTC':'Leucina-', 'CTG':'Leucina-', 'CTT':'Leucina-',
   'CCA':'Prolina-', 'CCC':'Prolina-', 'CCG':'Prolina-', 'CCT':'Prolina-',
   'CAC':'Histidina-', 'CAT':'Histidina-', 'CAA':'Glutamina-', 'CAG':'Glutamina-',
   'CGA':'Arginina-', 'CGC':'Arginina-', 'CGG':'Arginina-', 'CGT':'Arginina-',
   'GTA':'Valina-', 'GTC':'Valina-', 'GTG':'Valina-', 'GTT':'Valina-',
   'GCA':'Alanina-', 'GCC':'Alanina-', 'GCG':'Alanina-', 'GCT':'Alanina-',
   'GAC':'Ácido Aspártico-', 'GAT':'Ácido Aspártico-', 'GAA':'Ácido Glutâmico-', 'GAG':'Ácido Glutâmico-',
   'GGA':'Glicina-', 'GGC':'Glicina-', 'GGG':'Glicina-', 'GGT':'Glicina-',
   'TCA':'Serina-', 'TCC':'Serina-', 'TCG':'Serina-', 'TCT':'Serina-',
   'TTC':'Fenilalanina-', 'TTT':'Fenilalanina-', 'TTA':'Leucina-', 'TTG':'Leucina-',
   'TAC':'Tirosina-', 'TAT':'Tirosina-', 'TAA':'Códon de Parada', 'TAG':'Códon de Parada',
   'TGC':'Cisteína-', 'TGT':'Cisteína-', 'TGA':'Códon de Parada', 'TGG':'Triptofano-',
   'A':'Error', 'T':'Error','C':'Error', 'G':'Error', 'AA':'Error', 'AT':'Error', 'AC':'Error', 'AG':'Error',
   'TA':'Error', 'TT':'Error', 'TC':'Error', 'TG':'Error', 'CA':'Error', 'CT':'Error', 'CC':'Error', 'CG':'Error',
   'GA':'Error', 'GT':'Error', 'GC':'Error', 'GG':'Error',
   }

seq_parada = ['TGA','TAA','TAG'] cod_error = ['A', 'T', 'C', 'G', 'AA', 'AT', 'AC', 'AG', 'TA', 'TT', 'TC', 'TG', 'CA', 'CT', 'CC', 'CG', 'GA', 'GT', 'GC', 'GG']

def transcription(seqbruta):

   seqbruta = seqbruta.replace('A', 'Q')
   seqbruta = seqbruta.replace('T', 'A')
   seqbruta = seqbruta.replace('Q', 'T')
   seqbruta = seqbruta.replace('C', 'W')
   seqbruta = seqbruta.replace('G', 'C')
   seqbruta = seqbruta.replace('W', 'G')
   return seqbruta


def translate(seq):

   proteina = "Metionina-"
   codon = ""
   seq = seq.split('ATG',1)[1]
   for i in range(0, len(seq), 3):
       if codon not in seq_parada:
           codon = seq[i : i+3]
           if codon in seqaa:
               proteina += seqaa[codon]
               if codon in cod_error:
                   print(proteina)
                   print("A sequência digitada está errada (O códon não está com o número de nucleotídeos adequado), verifique-a e tente novamente mais tarde. O programa será encerrado.")
                   quit()
           elif codon not in seqaa:
               print("Sua sequência apresenta caracteres indevidos (outros além de 'A','T','G','C').Tente novamente mais tarde após correção. :)\n")
               quit()
       elif codon in seq_parada:
           break
           #codon = seq[i : i+3]
           #proteina += seqaa[codon]
   return proteina


def read_sequencia():

   x = input("Qual sua sequencia? ")
   lista = []
   lista.append(x)
   y = translate(x)
   lista.append(y)
   print(y)
   return lista


def read_file():

   all_lines = ""
   lista = []
   file_name = input("Nome do arquivo (inclua no nome a extensão. Exemplo, se for um arquivo FASTA, redigir '(nomedoarquivo).fasta'): ")
   fd = open(file_name,'r')
   all_lines = fd.read()
   all_lines = all_lines.replace('\n',)
   all_lines = all_lines.replace('\r',)
   lista.append(all_lines)
   y = translate(all_lines)
   lista.append(y)
   fd.close()
   print(y)
   return lista


def read_sequenciaplustranscription():

   x = input("Qual sua sequencia? ")
   lista = []
   lista.append(x)
   z = transcription(x)
   y = translate(z)
   lista.append(y)
   print(y)
   return lista


def read_fileplustranscription():

   all_lines = ""
   lista = []
   file_name = input("Nome do arquivo (inclua no nome a extensão. Exemplo, se for um arquivo FASTA, redigir '(nomedoarquivo).fasta'): ")
   fd = open(file_name,'r')
   all_lines = fd.read()
   all_lines = all_lines.replace('\n',)
   all_lines = all_lines.replace('\r',)
   lista.append(all_lines)
   z = transcription(all_lines)
   y = translate(z)
   lista.append(y)
   fd.close()
   print(y)
   return lista


def arquivo(lista):

       nome_arquivo = input('Nome do arquivo a ser criado (Não é necessário adicionar extensão, será criado um arquivo .txt):\n')
       nome_arquivo += ".txt"
       arquivo = open(nome_arquivo, 'w+')
       texto = """Programa Utilizado: Thousand Translation (T.T), Versão 1.0

--- Requerente: %s --- Espécie Analisada: %s --- Analisado às %s --- Tipo de Sequência Analisada: %s --- Sequência: %s --- Sequência Traduzida: %s""" % (usuario, especie, data, tiposeq, lista[0], lista[1])

       arquivo.write(texto)
       print(texto)
       arquivo.close()
       

print("Bem-vindo ao programa Thousand Translation (T.T), responsável por ler sequências de nucleotídeos e traduzi-las!\nSiga as instruções para continuar a tradução de sua sequência.") print("Observação: Será necessário que sua sequência possua o codificante para Metionina, que é o códon de iniciação. Ou seja, para DNA, é necessário haver TAC. Para RNAm, ATG.") valor = '1'

while valor == '1':

   usuario = input("Nome do requerente: ")
   especie = input("Espécie utilizada: ")
   data = time.strftime("%H:%M:%S do dia %d/%m/%Y")
   while True:
       tiposeq = input("A sequência a ser usada é do tipo (1)DNA ou (2)RNAm? (Digite apenas '1' ou '2')\n")
       conducaoseq = input("Você deseja digitar uma sequência(1) ou ler um arquivo com a sequência(2)?\nÉ importante ressaltar que para ler um arquivo, é necessário tranferí-lo para a pasta do programa.\n(Digite apenas '1' ou '2')\n")
       if tiposeq == '2':
           tiposeq = 'RNAm'
           if conducaoseq == '1':
               y = read_sequencia()
               break
           elif conducaoseq == '2':
               y = read_file()
               break
       elif tiposeq == '1':
           tiposeq = 'DNA'
           if conducaoseq == '1':
               y = read_sequenciaplustranscription()
               break
           elif conducaoseq == '2':
               y = read_fileplustranscription()
               break
   arquivo(y)
   valor = input("Deseja continuar traduzindo sequências? Digite apenas o número '1' para continuar, e qualquer outro caracter para sair.\n")

Alterações para a última versão


  • 1. Obtenção de data a partir do sistema;
  • 2. Invalidação da tradução caso haja caracteres indevidos o usuário do programa.
  • 3. Invalidação da tradução caso haja número incorreto de nucleotídeos na ausência do Códon de Parada seguida de mensagem ao usuário.