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.
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 = 5if 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 = 12y = 12if 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 = 100b = 20if 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 = 30z = 22if 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('')) # Falseprint(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) # Falsebool(1) # Truebool(-1) # Truebool(3.3) # Truebool(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 = 15n2 = 30n3 = 15if 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 = 35for 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.