Decisões: if, elif e else
O if faz o programa escolher um caminho. Existem quatro formas de montar essa escolha, e escolher a forma certa é metade da questão.
Nesta lição0 de 4 vistas
As quatro formas
if, if/else, if/elif/else e if dentro de ifif sozinho
saldo = -20if saldo < 0:print('ATENCAO')print('fim')
Faz algo só se a condição for verdadeira; se não for, simplesmente segue. Usado em: um aviso opcional, um contador que só aumenta às vezes.
if / else
n = 7if n % 2 == 0:print('PAR')else:print('IMPAR')
Dois caminhos opostos: sempre entra em exatamente um. Usado em: par ou ímpar, concedido ou negado, capicua ou não.
if / elif / else
n = -3if n > 0:print('POSITIVO')elif n < 0:print('NEGATIVO')else:print('NULO')
Vários caminhos que se excluem: entra no primeiro verdadeiro e pula o resto. Usado em: faixas (salário, IMC, idade), classificações.
if dentro de if
a, b, c = 3, 3, 3if a < b + c and b < a + c and c < a + b:if a == b == c:print('EQUILATERO')else:print('OUTRO')else:print('NAO FORMA')
Uma segunda pergunta que só faz sentido se a primeira for verdadeira. Usado em: triângulo, situação do aluno (falta antes da nota).
Como escolher: quantos caminhos existem e eles se excluem? Dois opostos: if/else. Três ou mais que se excluem: if/elif/else. Testes independentes, que podem valer juntos: ifs soltos. Uma pergunta que depende de outra: if dentro de if.
elif ou ifs soltos?
Veja a diferença rodandoNum encadeamento com elif, assim que uma condição é verdadeira, as outras nem são testadas. Com ifs soltos, todos são testados sempre, e mais de um pode imprimir. Mude a nota:
nota = float(input())if nota >= 7:print('APROVADO')elif nota >= 5:print('RECUPERACAO')else:print('REPROVADO')
nota = float(input())if nota >= 7:print('APROVADO')if nota >= 5:print('RECUPERACAO')else:print('REPROVADO')
Com nota 8, o primeiro exibe só APROVADO. O segundo exibe APROVADO e também RECUPERACAO, porque o segundo if é testado mesmo depois do primeiro dar verdadeiro.
A ordem das faixas importa
A primeira condição verdadeira venceCom elif, a primeira condição verdadeira vence. Se a faixa mais larga vier antes, as de baixo nunca são alcançadas.
nota = float(input())if nota >= 7:print('APROVADO')elif nota >= 5:print('RECUPERACAO')else:print('REPROVADO')
nota = float(input())if nota >= 5:print('RECUPERACAO')elif nota >= 7:print('APROVADO')else:print('REPROVADO')
A regra: em faixas crescentes, teste do limite mais alto para o mais baixo (ou do mais baixo para o mais alto, testando só o limite de cima de cada faixa, como no salário). Nunca uma condição que engole as de baixo.
Quando aninhar
A segunda pergunta faz sentido se a primeira for falsa?Se não faz, ela mora dentro da primeira. No triângulo, só dá para perguntar o tipo de algo que é triângulo. Na situação do aluno, só vale olhar a média de quem não reprovou por falta.
freq = 80media = 6.5if freq < 75:print('REPROVADO POR FALTA')else:if media >= 7:print('APROVADO')else:print('REPROVADO')
Cada nível de aninhamento recua mais 4 espaços, e é a indentação que diz a qual if cada else pertence.
Erros que mais aparecem na prova
6 errosFaltou os dois-pontos
if n > 0 sem : no fim. Vale para if, elif, else, while e for.
else com condição
else n < 0: não existe. O else pega tudo que sobrou; condição nova é elif.
elif desalinhado
if, elif e else ficam na mesma coluna. Um espaço a mais e o Python não acha o if do elif.
Conta dentro de cada ramo
Se a mesma conta aparece em todos os ramos, ela vai antes ou depois do if. Dentro, guarde só o que muda (como o percentual).
ifs soltos em faixas
Faixas se excluem: com ifs soltos, um valor pode cair em duas e o programa imprime duas respostas. Use elif.
Caso geral antes do específico
No triângulo, testar isósceles antes de equilátero faz o equilátero nunca aparecer. O caso mais específico vem primeiro.