programandoai

if, elif, else: fazendo o programa escolher um caminho

Todo programa útil precisa se comportar diferente dependendo dos dados. Um sistema de frete não cobra o mesmo valor para qualquer pedido.

Estudar esta lição interativa →

Um sistema de frete de loja online não cobra o mesmo valor para qualquer pedido: pedidos leves pagam pouco, pedidos pesados pagam mais, e talvez pedidos muito grandes nem sejam aceitos por transporte comum. Para um programa tomar esse tipo de decisão, ele precisa de uma estrutura que rode um trecho de código ou outro, nunca os dois, dependendo de uma condição. É isso que if (se), elif (senão se) e else (senão) fazem.

peso_kg = 4

if peso_kg <= 1:
    print("Frete: R$ 8,00")
elif peso_kg <= 5:
    print("Frete: R$ 15,00")
else:
    print("Frete: R$ 30,00")

Troque o valor de peso_kg e rode de novo para ver outra faixa sendo escolhida.

O Python testa as condições na ordem em que aparecem, de cima para baixo, e roda o bloco do primeiro if ou elif que for verdadeiro (True), ignorando todo o resto, até chegar num else opcional no final, que roda só se nenhuma condição anterior bateu. Repare também que cada bloco (o que roda dentro de um if) fica recuado em relação ao if (por convenção, com 4 espaços): essa indentação não é estética, ela é a própria sintaxe do Python para dizer "isto pertence a este bloco".

Pense num porteiro de balada com uma lista de regras, testadas em ordem: "menor de idade? Barra a entrada. Sem convite e a lista já fechou? Barra também. Nenhuma das duas coisas? Pode entrar." Ele para de checar assim que a primeira regra bate, exatamente como o elif encadeado do Python.

elif encadeado vs vários if separados

Repare que elif e uma sequência de if soltos não são a mesma coisa: com elif, só um bloco roda, o primeiro que bater. Com vários if independentes (sem elif), o Python testa todos, e mais de um bloco pode rodar ao mesmo tempo se mais de uma condição for verdadeira. Use elif quando as opções são mutuamente exclusivas, como faixas de frete.

A indentação errada quebra o programa antes mesmo de rodar

Diferente de linguagens que usam chaves { } para marcar blocos, o Python usa só a indentação. Se uma linha que deveria estar recuada não estiver, o erro é IndentationError: expected an indented block after 'if' statement on line N, apontando exatamente a linha do if cujo corpo ficou sem recuo. A correção é sempre a mesma: garantir que o bloco inteiro tenha o mesmo recuo (o padrão é 4 espaços), alinhado por baixo do if que o abriu.

nota = 6.5

if nota >= 7:
    print("aprovado")
elif nota >= 3:
    print("recuperação")
else:
print("reprovado")

Corrija a indentação da linha marcada e rode.

← Voltar ao índice do curso