Untitled

 avatar
unknown
python
4 years ago
3.1 kB
5
Indexable
'''
Exercício sobre Funções 2

Uma  fita de RNAm é uma sequência de códons (trincas formadas pela combinação
das bases hidrogenadas U, C, A e G). Sabendo disso e que existe um códon 
de iniciação ("UUG", "CUG", "AUU", "AUG" e "GUG") e de 
terminação ("UAA", "UAG" e "UGA"), escreva uma função em Python que 
a partir de um possível RNAm (parâmetro), retorne True, caso 
seja uma sequência válida, ou False, em caso contrário. 
Usando essa função, codifique um programa no qual o usuário possa 
informar uma sequência e visualizar se é ou não válida para um RNAm. 
Além disso, permita que o usuário teste quantas sequências desejar.

Importante:
* É mais fácil trabalhar com strings.
* O códon de iniciação só deve aparecer no início
* O códon de terminação só aparece no fim.
'''

# global
validos = ('u', 'c' ,'a', 'g')
iniciacao = ('uug', 'cug', 'auu', 'aug', 'gug')
terminacao = ('uaa', 'uag', 'uga')


def fatiar_codons(codons):
    '''
    Cria uma lista onde cada elemento representa um codon.
    '''
    if codons: return [codons[:3]] + fatiar_codons(codons[3:])
    else: return []

def caracteres_invalidos(codons):
    '''
    Verifica por algum caractere INvalido.
    '''
    temp = [caractere for caractere in codons if caractere not in validos]
    return any(temp)

def repete_inicio(fatiado):
    '''
    Verifica se o codon inicial SE REPETE.
    '''
    inicio = fatiado.pop(0)
    return inicio in fatiado

def repete_fim(fatiado):
    '''
    Verifica se o codon final SE REPETE.
    '''
    fim = fatiado.pop()
    return fim in fatiado

def inicio_invalido(fatiado):
    '''
    Verifica se o codon inicial é INvalido.
    '''
    inicio = fatiado.pop(0)
    return inicio not in iniciacao

def fim_invalido(fatiado):
    '''
    Verifica se o codon final e INvalido.
    '''
    fim = fatiado.pop()
    return fim not in terminacao

def verifica_codons(codons):
    '''
    Verifica codons.
    '''
    codons_fatidos = fatiar_codons(codons)
    
    if not codons.strip() or len(codons) % 3 == 1:
        print('Invalido, cada codon deve possuir tres elementos.')
        return False
    
    if caracteres_invalidos(codons):
        print('Invalido, caracteres invalidos foram incontrados.')
        return False
    
    if inicio_invalido(codons_fatidos.copy()):
        print(f'Invalido, codon iniciacao validos {iniciacao}.')
        return False
    
    if fim_invalido(codons_fatidos.copy()):
        print(f'Invalido, codon terminacao validos {terminacao}.')
        return False
    
    if repete_inicio(codons_fatidos.copy()):
        print('Invalido, codon inicial se repete.')
        return False
    
    if repete_fim(codons_fatidos.copy()):
        print('Invalido, codon final se repete.')
        return False
    
    return True

codons = 'uuguuguga'
continuar = 1
while continuar:
    codons = str(input('Informe os codons: '))
    eh_valido = verifica_codons(codons)
    if eh_valido:
        print(f'{codons} é valido!!!')
    continuar = int(input('continuar [0 nao] [1 sim]: '))

Editor is loading...