Estruturas condicionais
Como tomar decisões no código com if, elif e else
Chegou a hora de dar um passo importante: fazer nosso código tomar decisões.
É aqui que entram as estruturas condicionais, construídas em cima dos valores booleanos (True e False) e dos operadores que você já viu. Em Python, elas giram principalmente em torno de três palavras-chave:
ifelifelse
A estrutura básica do if
O if equivale à palavra SE que usamos em português para falar sobre uma condição, como quando falamos: "Se fizer sol, eu vou à praia".
Ele é a estrutura condicional mais simples. Sua função é testar uma condição e executar um bloco de código apenas se essa condição for verdadeira:
1clima = "Ensolarado" 2 3if clima == "Ensolarado": 4 print("Vou à praia") # este código é executado 5 6# Saída: 7# Vou à praia
Nesse caso, a expressão clima == "Ensolarado" vai ter True ou False como resultado. Se o resultado for True, o bloco logo abaixo do if é executado.
Se for False, o Python ignora o bloco e continua executando as linhas do programa fora dele se houver:
1clima = "Chuvoso" 2 3if clima == "Ensolarado": 4 print("Vou à praia") # este código NÃO é executado 5 6# Saída: 7# (nada é impresso)
Como o Python sabe o que pertence ao if
Em muitas linguagens, blocos de código são delimitados com chaves ({}). Em Python, quem manda é a indentação, lembra dela? Como vimos na lição "Sintaxe Básica", a indentação são os espaços ou tabulações no começo de uma linha de código.
Logo abaixo do if, tudo que estiver mais à direita está indentado e faz parte do bloco condicional. Se você tirar a indentação, o Python entende que a linha não faz parte do if:
1condicao = True 2 3if condicao == True: 4 print("Esta linha está DENTRO do if.") # com indentação 5 print("Esta linha também está DENTRO do if.") # com indentação 6print("Esta linha está FORA do if.") # sem indentação 7 8# Saída: 9# Esta linha está DENTRO do if. 10# Esta linha também está DENTRO do if. 11# Esta linha está FORA do if.
No exemplo aqui em cima, o último print() realmente deveria estar fora do if, mas se você esquecer de indentar uma linha que queria indentar, você pode ter dois tipos de problemas:
- Se o código não indentado só fizer sentido pro Python dentro do bloco do
if, você vai receber um erro do tipoIndentationError; - Se o código não indentado até fizer sentido fora do bloco, mas deveria estar dentro dele para funcionar conforme o esperado, seu código vai se comportar da forma errada.
Dica: no terminal, o próprio Python já coloca a indentação para você quando você começa um bloco
if. Mas quando você usar outros programas feitos para escrever código, fique de olho. Ah, e depois de escolher se vai usar espaços ou tab, mantenha sempre o mesmo padrão dentro do bloco. Nada de misturar os dois!
If e else: o que fazer quando o caso False também é importante
Quando o resultado falso também exigir que a gente faça algo a partir dele, usamos a dupla if + else.
Se a condição do if não for verdadeira, o código vai obrigatoriamente entrar no else. Ele equivale à palavra SENÃO que usamos em português para falar sobre uma condição, como quando dizemos: "Se fizer sol, eu vou à praia. Senão, vou ao shopping".
É importante entender que o if cobre o caso verdadeiro. Já o else fica responsável por todos os outros casos exceto o que aparece no if. Pensando na frase acima, Ou seja, ele cobre todo o resto: qualquer situação que não seja sol, como estar chovendo, nublado ou até nevando, leva a pessoa ao shopping.
Veja um exemplo real:
1idade = 15 2 3if idade >= 18: 4 print("Maior de idade") 5else: 6 print("Menor de idade") 7 8# Saída: 9# Menor de idade
if, elif e else: escolhendo entre vários caminhos
O if e o else são excelentes para testarmos uma condição, dizendo o que fazer se ela for verdadeira e o que fazer se ela for falsa. Mas às vezes você precisa escolher entre mais de duas opções.
É aí que entra em cena o elif, que é uma abreviação de "else if". Em português, ele equivale à expressão "SENÃO, SE": "SE fizer sol, eu vou à praia. SENÃO, SE estiver chovendo, vou ficar em casa. SENÃO, vou no shopping".
Juntos, eles funcionam da seguinte maneira no código:
if: testa a primeira condição;elif: testa outras condições, caso as anteriores sejam falsas;else: testa o último caso, quando nenhuma condição anterior é verdadeira.
Observe:
1nota = 75 2 3if nota >= 90: # testa a 1ª condição 4 print("Nota A") 5elif nota >= 60: # se a 1ª for falsa, testa esta condição 6 print("Nota B") 7else: # se todas as anteriores forem falsas, entra aqui 8 print("Nota C ou menor") 9 10# Saída: 11# Nota B
Um ponto importante é que apenas o primeiro bloco com condição verdadeira é executado. Se o aluno do exemplo acima tivesse tirado 95, as duas primeiras condições seriam verdadeiras, mas o código só entraria na condição if nota >= 90 e somente "Nota A" seria impresso. Todo o resto seria ignorado.
1nota = 95 2 3if nota >= 90: # a 1ª condição é verdadeira 4 print("Nota A") 5elif nota >= 60: # não testa esta condição 6 print("Nota B") 7else: # não testa esta condição 8 print("Nota C ou menor") 9 10# Saída: 11# Nota A
Veja outro possível uso. O código abaixo testa três condições diferentes e apenas a última é verdadeira, então ele entra no bloco dela e imprime a mensagem correspondente:
1dia_da_semana = "sábado" 2 3if dia_da_semana == "segunda": 4 print("Boa semana para você!") 5elif dia_da_semana == "quarta": 6 print("Estamos no meio da semana!") 7elif dia_da_semana == "sábado" or dia_da_semana == "domingo": 8 print("Aproveite o final de semana!") 9 10# Saída 11# Aproveite o final de semana!
Perceba que não há um else. Com isso, nada é impresso caso o dia da semana não seja segunda, quarta, sábado ou domingo.
Se acrescentarmos o else, ele dirá o que deve ser feito quando o dia da semana for terça, quinta ou sexta:
1dia_da_semana = "quinta" 2 3if dia_da_semana == "segunda": 4 print("Boa semana para você!") 5elif dia_da_semana == "quarta": 6 print("Estamos no meio da semana!") 7elif dia_da_semana == "sábado" or dia_da_semana == "domingo": 8 print("Aproveite o final de semana!") 9else 10 print("Tenha um bom dia!") 11 12# Saída 13# Tenha um bom dia!
Tudo que não é coberto pelas condições do
ifeelif, entra no bloco doelse. Ou seja, no código acima,elseequivaleria a verificarelif dia_da_semana == "terça" or dia_da_semana == "quinta" or dia_da_semana == "sexta", que são todos os casos não abordados pelas condições anteriores nesse exemplo.
Consolidando as regras do if, elif e else
Agora que você já viu como eles funcionam, é importante entender e reforçar suas regras.
Onde cada palavra-chave pode aparecer:
- O
ifsempre inicia a estrutura. - O
elifsó pode aparecer depois de umif. - O
elsedeve aparecer por último, depois doife todos oselif.
Quantas vezes cada uma pode ser usada:
- O
ifsó pode ser usado uma vez. - O
elifpode ser usado quantas vezes você quiser, mas o uso dele é opcional - O
elsepode ser usado uma vez, no máximo. O uso dele é opcional.
O que causa erro:
- Usar
elifsem uma condição, comoelif:. - Colocar uma condição no
else, comoelse nota >= 60. - Tentar colocar um bloco condicional depois do
else.
Como o fluxo é avaliado:
- O Python testa as condições de cima para baixo.
- Ele executa apenas o primeiro bloco cuja condição seja verdadeira.
- Depois do primeiro bloco verdadeiro, todos os outros são ignorados, mesmo que suas condições também sejam verdadeiras.
Quando são opcionais:
- O
ifnunca é opcional. - O
elifé opcional. Só precisamos dele se quisermos testar condições específicas que não seriam atendidas peloif. - O
elsesó é necessário se algo precisa ser feito caso todas as outras condições sejam falsas. Se nada precisar ser feito para elas, não use oelse.
Não se preocupe se parecer que são muitas informações. Vamos continuar vendo estruturas condicionais na próxima lição. Quanto mais você estudar esse assunto, mais fácil ele vai ficar!