Tutorial Python para Bioinformática (parte III): Estruturas lógicas

Frederico Schmitt Kremer
omixdata
Published in
4 min readJun 23, 2021

Olá pessoal! Nesta semana damos continuidade à série de posts “Tutorial Python para Bioinformática”. Nos posts anteriores vimos um pouco sobre o ambiente do Google Colab (parte I) e sobre os conceitos de comentários, variáveis e estruturas de dados (parte II). Agora, abordaremos as estruturas lógicas disponíveis na linguagem, incluindo o desvio condicional e as estruturas de repetição.

Desvio condicional

O desvio condicional é utilizando quando queremos que um certo conjunto de operações sejam executados apenas quando uma determinada condição seja satisfeita (Ex: “SE o nome do organismo é Escherichia coli, ENTÃO …”). Em Python utilizamos a palavra reservada if para isso, seguida de uma expressão que retorna um valor True ou False, ou cujo valor possa ser convertido para algum destes valores (ex: o número 0 é interpretado como False , enquanto que outros números são tratados como True).

Para criarmos expressões lógicas, podes utilizar operações de comparação e operações booleanas. Uma operação de comparação irá comparar dois valores e retornará booleano.

  • ==: retorna True quando os valores comparados são iguais, caso contrário retornará False.
  • != : retorna True quando os valores comparados são diferentes, caso contrário retornará False.
  • >: retorna True quando o valor à esquerda na expressão é maior que o valor da direita, caso contrário retornará False.
  • >=: retorna True quando o valor à esquerda na expressão é maior ou igual ao valor da direita, caso contrário retornará False.
  • <: retorna True quando o valor à esquerda na expressão é menor que o valor da direita, caso contrário retornará False.
  • <=: retorna True quando o valor à esquerda na expressão é menor ou igual ao valor da direita, caso contrário retornará False.

No exemplo abaixo, verificamos se o valor da variável organism é igual ao texto Escherichia coli , e caso seja, mostraremos a mensagem it's a bacteria.

if organism == "Escherichia coli":
print("it's a bacteria")

Já as operações booleanas será realizadas entre os valores booleanos para se verificar a veracidade de um conjunto de afirmações lógicas.

  • and: retorna True apenas se ambos os valores forem verdadeiros.
  • or: retorna True se algum dos valores for verdadeiro, ou ambos.
  • not: retorna True se o valor for False e False se o valor for True. Podemos chamar este operação de negação.

Para ilustrar o uso dos conectores lógicos, considere o exemplo abaixo. Nele temos 2 variáveis, organism e host, e utilizamos as operações de comparação para verificar se cada uma destas é igual a um certo valor. Cada comparação retorna um valor booleano, e combinamos estes valores com o operador and para verificar se ambos são verdadeiros. Caso sejam, a frase Human infected by L. interrogans é mostrada.

organism = "Leptospira interrogans"
host = "Homo sapiens"
if organism == "Leptospira interrogans" and host == "Homo sapiens":
print("Human infected by L. interrogans")

Podemos ainda criar condições adicionais caso a primeira não seja verdadeira com uso do elif. Neste caso, se a condição passada no if seja falsa, o Python avaliará se acondição definida no elif é verdadeira, e é possível criar vários elifs abaixo de uma instrução if.

organism = "Leptospira interrogans"
host = "Homo sapiens"
if organism == "Leptospira interrogans" and host == "Homo sapiens":
print("Human infected by L. interrogans")
elif organism == "Leptospira santarosai" and host == "Homo sapiens":
print("Human infected by L. santarosai")

Caso nenhuma das condições definidas nas expressões deif /elif seja satisfeita, é possível definir uma instrução else. Neste caso, vamos mostrar uma mensagem Unable to process caso o bloco nem doif nem o elif sejam executados.

organism = "Leptospira interrogans"
host = "Homo sapiens"
if organism == "Leptospira interrogans" and host == "Homo sapiens":
print("Human infected by L. interrogans")
elif organism == "Leptospira santarosai" and host == "Homo sapiens":
print("Human infected by L. santarosai")
else:
print("Unable to process")

Estruturas de repetição (“laço”)

Uma estrutura de repetição irá repetir um mesmo conjunto de operações até que uma determinada condição de parada seja atingida. Na linguagem Python temos duas estruturas de repetição diferentes: for e while. O for é utilizado quando queremos aplicar um conjunto de instruções para cada valor retornado por um objeto do tipo iterator, que pode ser uma lista (list), dicionário, conjunto, tupla, string, dentre outros.

codons = []for codon in codons:
if codon == "ATG":
print("start codon found")

Já o while é utilizando quando queremos repetir um conjunto de operações enquanto uma certa condição for verdadeira. No exemplo abaixo, passaremos por cada posição no genoma (cujo tamanho é definido com a variável genome_size), armazenando o valor da posição na variável genome_position. Esta varíavel é iniciada com o valor 1 e a cada “volta” do while incrementaremos o seu valor em 1. O while será executado enquanto o valor da posição do genoma for menor ou igual ao tamanho do genoma.

genome_size = 1000
genome_position = 1
while genome_position <= genome_size:
print(f"At base {genome_position} of the genome")
genome_position = genome_position + 1

Em alguma situações pode ser necessário interromper a execução de um loop (seja while ou for) abruptamente, e para isso podemos utilizar a instrução break. No exemplo abaixo, o código mostrará na tela (usando a função print) cada um dos codons da lista codons até chegar ao TAA, onde interromperá a execução do loop usando o break. Com isso, o codon AAA não será mostrado.

codons = ['ATG','GGG','CCC','TAA','AAA']
for codon in codons:
print(codon)
if codon == 'TAA':
print('A stop codon was found')
break

No caso do for é possível se executar um operação apenas quando o loop não for interrompido por um break, utilizando-se para isso a palavra reservada else.

codons = ['ATG','GGG','CCC','TAA','AAA']
for codon in codons:
print(codon)
if codon == 'TAA':
print('A stop codon was found')
break
else:
print('No stop codon was found')

Próximos passos

Podemos também combinar as estruturas lógicas e as estruturas de dados para produzir algoritmos mais complexos (veremos isso em posts futuros) 😃

--

--