Capítulo 14, Básico
Condicionais
Programas úteis tomam decisões. O `if` é a ferramenta, e escrever condições limpas é a habilidade.
Código deste capítulo: basico/cap14_condicionais.py
if, elif e else
O Python testa as condições de cima para baixo e executa somente o primeiro bloco verdadeiro. A indentação define o bloco:
def classificar(nota):
if nota >= 9:
return "excelente"
elif nota >= 7:
return "bom"
elif nota >= 5:
return "regular"
else:
return "insuficiente"
print(classificar(9.5))
print(classificar(7))
print(classificar(5))
print(classificar(2))
excelente
bom
regular
insuficiente
Expressão condicional
Para escolher entre dois valores em uma linha, existe a forma valor_se_verdadeiro if condicao else valor_se_falso:
idade = 20
situacao = "adulto" if idade >= 18 else "menor"
print(situacao)
adulto
match: casamento de padrões
Desde o Python 3.10 existe o match, que é muito mais do que um switch. Ele casa a forma do dado, e pode capturar partes dele:
def responder(comando):
match comando.split():
case ["parar"]:
return "parando"
case ["mover", direcao]:
return f"movendo para {direcao}"
case ["mover", direcao, passos] if passos.isdigit():
return f"movendo {passos} passos para {direcao}"
case _:
return "comando desconhecido"
print(responder("parar"))
print(responder("mover norte"))
print(responder("mover sul 3"))
print(responder("voar"))
parando
movendo para norte
movendo 3 passos para sul
comando desconhecido
O case _ é o caso padrão. Eu uso match quando o dado tem estrutura (comandos, mensagens, árvores). Para comparar um valor com poucas opções simples, if e elif continuam mais diretos.
Idiomas que deixam o código limpo
| Evite | Prefira |
|---|---|
if ativo == True: | if ativo: |
if len(lista) > 0: | if lista: |
if valor == None: | if valor is None: |
ifs aninhados em cascata | Retornos antecipados |
O retorno antecipado (guard clause) trata os casos de saída primeiro e deixa o caminho principal sem indentação extra:
def desconto(preco, cliente_vip):
if preco <= 0:
return 0
if not cliente_vip:
return 0
return preco * 0.1
print(desconto(200, True))
20.0
Exercício 1
Ano bissexto
Escreva eh_bissexto(ano). Um ano é bissexto se for divisível por 4, exceto os divisíveis por 100, a menos que também sejam divisíveis por 400.
Exercício 2
Escada de temperatura
Escreva descrever(temperatura) que devolva "frio" abaixo de 10 graus, "agradável" abaixo de 28 e "quente" a partir daí.