Pular para o conteúdo

    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:

    basico/cap14_condicionais.pylinhas 10 a 24
    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))
    
    Saída
    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:

    basico/cap14_condicionais.pylinhas 29 a 31
    idade = 20
    situacao = "adulto" if idade >= 18 else "menor"
    print(situacao)
    
    Saída
    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:

    basico/cap14_condicionais.pylinhas 36 a 51
    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"))
    
    Saída
    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

    EvitePrefira
    if ativo == True:if ativo:
    if len(lista) > 0:if lista:
    if valor == None:if valor is None:
    ifs aninhados em cascataRetornos antecipados

    O retorno antecipado (guard clause) trata os casos de saída primeiro e deixa o caminho principal sem indentação extra:

    basico/cap14_condicionais.pylinhas 56 a 64
    def desconto(preco, cliente_vip):
        if preco <= 0:
            return 0
        if not cliente_vip:
            return 0
        return preco * 0.1
    
    
    print(desconto(200, True))
    
    Saída
    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í.