Seção 4.3 — if dentro de else: combinando condições
Nem sempre nossos programas serão tão simples. Muitas vezes, precisaremos aninhar vários ifs para obter o comportamento desejado. Aninhar, nesse caso, é utilizar um if dentro de outro.
Imagine uma operadora de telefonia com três faixas de preço: até 200 minutos custa R$ 0,20/min; entre 200 e 400 minutos, R$ 0,18/min; acima de 400 minutos, R$ 0,15/min:
Observe que o segundo if está dentro do bloco do primeiro else — por isso ele tem mais recuo. A condição minutos < 400 só será avaliada se a primeira (minutos < 200) for falsa.
💡 O alinhamento do texto é muito importante em Python. Um if dentro de um else precisa ter recuo adicional. Erros de indentação causam comportamento inesperado ou erros de execução.
Vejamos um exemplo com cinco categorias, onde cada uma tem um preço diferente:
| Categoria | Preço |
|---|---|
| 1 | R$ 10,00 |
| 2 | R$ 18,00 |
| 3 | R$ 23,00 |
| 4 | R$ 26,00 |
| 5 | R$ 31,00 |
Note como o programa vai se deslocando cada vez mais para a direita a cada else. Isso é chamado de problema do deslocamento (ou "pirâmide da morte") e torna o código difícil de ler. A próxima aula mostra a solução elegante com elif.
Rastreie o programa da Listagem 4.7. Para cada categoria digitada (1 a 5 e um valor inválido), anote quais linhas do programa serão executadas. Verifique a tabela abaixo:
| Categoria | Linhas executadas |
|---|---|
| 1 | 1, 2, 3, 19 |
| 2 | 1, 2, 4, 5, 6, 19 |
| 3 | 1, 2, 4, 5, 7, 8, 9, 19 |
| 4 | 1, 2, 4, 5, 7, 8, 10, 11, 12, 19 |
| 5 | 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 15, 19 |
| outras | 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 18, 19 |