Python Iluminado

If... Else

A tomada de decisão é necessária quando queremos executar um código apenas se uma determinada condição for satisfeita.

As instruções if, elif e else são usadas em Python para nos auxiliar na tomada de decisões.

img

A tomada de decisão é um conceito muito importante da programação e representa a capacidade de executarmos determinados comandos apenas se condições especificadas forem satisfeitas.

Lembrando que Python é capaz de suportar as condições lógicas tradicionais da matemática:

  • Igualdade: x == y
  • Diferente de: x != y
  • Menor que: x < y
  • Menor que ou igual a: x <= y
  • Maior que: x > y
  • Maior que ou igual a: x >= y

Essas condições podem ser usadas de várias maneiras, e são comumente utilizadas em instruções if e loops.

A sintaxe para construirmos uma estrutura de tomada de decisão funciona então da seguinte forma:

if <expressão>:
<comandos>
elif <expressão>:
<comandos>
else:
<comandos>

Neste exemplo, o programa executa a primeira linha if <expressão>, se a <expressão> for avaliada como True, os <comandos> dentro do bloco if serão executados.

Caso a <expressão> da primeira linha if <expressão> seja avaliada como False, nosso programa irá pular para a linha elif <expressão> e irá testar a nova <expressão>:

  • Se ela for avaliada como True os comandos do bloco elif serão executados.
  • Se ela for avaliada como False os comandos do bloco else serão executados.

Exemplos

Vamos agora construir exemplos práticos para compreender melhor a ideia de tomada de decisão em nossos códigos.

num = 5
if num > 0:
print("O número é positivo")
print("Esse valor é sempre impresso, pois está fora do bloco if")

Nesse caso podemos perceber que a expressão dentro do bloco if será executa, uma vez que o valor de num é maior que 0, sendo assim, positivo.

Também podemos usar a palavra-chave elif para testarmos outras possibilidades, uma vez que nem sempre a primeira pode ser atendida.

x = 12
y = 12
if x > y:
print("x é maior do que y")
elif x == y:
print("x e y são iguais")

Nesse exemplo a primeira condição não é satisfeita, então pulamos para o elif e fazemos o teste, como os valores de x e y são iguais, temos nossa expressão "x e y são iguais" executada.

Além do if e elif, temos o else que preencherá qualquer situação que o if e elif não sejam capazes de executar.

a = 100
b = 20
if b > a:
print("b é maior do que a")
elif b == a:
print("b e a são iguais")
else:
print("a é maior do que b")

Veja que nesse caso o primeiro if será avaliado como False, pulamos então para o elif que também será avaliado como False, nos deixando apenas com a execução do else.

Lembrando que é possível utilizarmos o else sem o elif.

k = 30
z = 22
if z > k:
print("z é maior do que k")
else:
print("k é maior do que z")

Podemos também encadear multiplos if, elif e else.

Nesse programa vamos pedir para o usuário entrar com um número, avaliaremos se ele é positivo, negativo ou zero e mostraremos ao usuário a mensagem apropriada.

num = int(input("Digite um número: "))
if num >= 0:
if num == 0:
print("Zero")
else:
print("Número positivo")
else:
print("Número negativo")

Imagine agora que temos uma string chamada de senha e queremos avaliar se ela foi digitada ou não, podemos neste caso usar a palavra-chave not que indica a negação de uma expressão, alterando assim seu estado. Por exemplo:

senha = ''
if not senha:
print('Senha inexistente!')
else:
print('Senha existe!')
# Senha inexistente!

Neste caso específico, o comando print('Senha inexistente!') será executado, uma vez que qualquer string vazia é avaliada como False, e nesse caso, usamos o not para trocar o False para True.

Podemos confirmar essa ideia com o seguinte experimento:

print(bool('')) # False
print(bool('75966231325')) # True

Isso quer dizer que se adicionarmos uma senha, o bloco else será executado, pois dessa vez temos uma string preenchida, que será avalida como True e a palavra-chave not irá transformar o True em False.

senha = '75966231325'
if not senha:
print('Senha inexistente!')
else:
print('Senha existe!')
# Senha existe!

No caso de números, o que ocorre é que o número 0 é avaliado como False e quaisquer outros números são considerados True:

bool(0) # False
bool(1) # True
bool(-1) # True
bool(3.3) # True
bool(3+1j) # True

Operadores Lógicos

Anteriormente vimos os operadores lógicos, eles também podem ser utilizados em conjunto com if para construirmos testes mais elaborados.

A palavra-chave and é um operador lógico e é usado para combinar declarações condicionais:

n1 = 15
n2 = 30
n3 = 15
if n1 < n2 and n3 == n1:
print("Ambas as condições são verdadeiras")

Neste exemplo o comando print() será executado, pois ambas as condições se concretizam como True (n1 é menor que n2 e n3 é igual a n1).

A palavra-chave or é um operador lógico e é usada para combinar declarações condicionais:

if n1 > n2 or n1 == n3:
print("Pelo menos uma condição é verdadeira")

Neste exemplo o comando print() será executado, mesmo a primeira expressão não sendo avaliada como True, a segunda é avaliada, o que é o suficiente para termos nosso comando print() executado.

O Desafio FizzBuzz

Imagine que temos um número n. Temos que exibir uma representação em string de todos os números de 1 até n, mas existem algumas restrições:

  • Se o número n for divisível por 3, imprimir "Fizz" ao invés do número.
  • Se o número n for divisível por 5, imprimir "Buzz" ao invés do número.
  • Se o número n for divisível por 3 e 5, imprimir "FizzBuzz" ao invés do número

Em outras palavras, para múltiplos de três vamos imprimir "Fizz" em vez do número e para múltiplos de cinco vamos imprimir "Buzz". Para números que são múltiplos de três e cinco, imprimir "FizzBuzz".

Para resolvermos este problema, precisaremos de um for loop e uma série de testes com if, elif e else. Vejamos como podemos fazer:

n = 35
for n in range(1,n):
if n % 3 is 0 and n % 5 is 0:
print("FizzBuzz")
elif n % 3 is 0:
print("Fizz")
elif n % 5 is 0:
print("Buzz")
else:
print(n)

Observe que estamos usando o operador de resto de divisão (%) e também a palavra-chave is, para verificarmos se o resto de divisão é igual a 0.

  • No primeiro bloco if testamos se o número é divisível por 3 e 5.
  • No segundo bloco elif testamos se o número é divisível por 3.
  • No terceiro bloco elif testamos se o número é divisível por 5.
  • Finalmente, se todas os testes anteriores forem False, iremos imprimir o próprio número n.

É importante fixarmos bastante a parte de tomada de decisão, pois ela nos dará uma base sólida para construirmos nossos programas, lembre sempre de fazer experimentos.