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.
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
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.
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.