Aulas do bloco

← Aulas

PythonAula 1021/08/20261h35

If-elif-else, isdigit e operadores lógicos

Retoma if/else com input(), comparação com == e lógicos and, or e not com in e lower(). Destrava elif para mais de dois caminhos nas faixas etárias, validação com isdigit() antes de int() e indentação como sintaxe. Introduz aninhada com efeito Hadouken, comparação encadeada e combinação com parênteses no exemplo das bolsas.

O que foi falado

  1. Validar idade_str com .isdigit() antes de int()

    00:17:33

    input() sempre devolve string, então idade_str chega como texto. isdigit() devolve True só se o texto for inteiro maior ou igual a zero, como "10", e devolve False para "Doritos", "10.7" e "-10". Só se for True o código converte com int() e calcula, senão mostra mensagem amigável em vez de quebrar com erro.

    Python
    idade_str = "10"
    print(idade_str.isdigit())
    print("10.7".isdigit())
    print("Doritos".isdigit())
    print("-10".isdigit())

    Saída

    True
    False
    False
    False
  2. Aninhar if dentro de if gera efeito Hadouken

    00:29:33

    Condicional aninhada é um if/else dentro de outro if/else, o bloco de dentro só roda se entrar no de fora. No exemplo da idade, primeiro testa se idade >= 0 e só dentro testa idade < 12 para criança. Cada nível empurra o código para a direita e cria o efeito Hadouken, que deixa a leitura difícil.

    Python
    idade = 8
    if idade >= 0:
        if idade < 12:
            print("criança")
        else:
            print("não criança")

    Saída

    criança
  3. Trocar aninhada por elif com else final

    00:39:02

    elif significa ou se e testa outra condição só quando o if anterior falhou, sem abrir outro nível. Testando da menor para a maior faixa, quem tem 8 anos já cai no primeiro elif e o resto é ignorado. O else final pega o que sobrou, como idade inválida, para o programa sempre responder alguma coisa.

    Python
    idade = 15
    if idade < 0:
        print("inválida")
    elif idade < 12:
        print("criança")
    elif idade < 18:
        print("adolescente")
    else:
        print("adulto")

    Saída

    adolescente
  4. Indentação com espaços define bloco e dá IndentationError

    00:44:32

    No Python os espaços do início da linha dizem a que bloco cada linha pertence, não é só estilo. Precisa ser consistente, no Deep Note Tab vira quatro espaços, senão dá IndentationError e nem roda. Em Bash o bloco fecha com fi e em JavaScript abre e fecha com { e }, lá indentação é só organização.

    Python
    if 10 > 5:
        print("maior")
    else:
        print("menor")

    Saída

    maior
  5. Comparação encadeada tipo 0 < idade <= 12

    00:58:56

    Em vez de 0 < idade and idade <= 12, dá para escrever 0 < idade <= 12, que funciona igual. Só o primeiro if ou elif verdadeiro executa e ignora o resto, se nenhum for verdadeiro cai no else. Por isso a ordem importa: do menor para o maior evita cair no ramo errado e deixa até omitir parte da checagem.

    Python
    idade = 8
    print(0 < idade <= 12)
    print(0 < idade and idade <= 12)

    Saída

    True
    True
  6. Bolsas com and, or, not e parênteses

    01:21:48

    As regras da bolsa combinam and, or e not, com parênteses para deixar a ordem explícita. Comparar com resposta.lower() == "sim" aceita Sim e sim sem diferença. Guardar cada regra em variável e escrever o plano em comentários antes de codar deixa o if legível e o programa à prova de usuário, sempre com alguma mensagem.

    Python
    resposta = "Sim"
    renda_baixa = True
    nota_alta = False
    if resposta.lower() == "sim" and (renda_baixa or nota_alta):
        print("bolsa")
    else:
        print("sem bolsa")

    Saída

    bolsa

Perguntas que valem a pena

Para que servem os espaços no início da linha?00:44:22

É a indentação, obrigatória no Python e precisa ser consistente, senão dá IndentationError.

Precisa checar idade > 12 e idade > 18 separado?00:46:22

Não, testando em ordem da menor para a maior quem é criança já cai no primeiro if, o resto é clareza.

O que acontece se tirar o else final?00:49:04

Funciona, mas vira um erro silencioso sem resposta para idade inválida, o else é validação extra.

Como if, elif e else funcionam juntos?00:56:24

A primeira condição verdadeira executa e ignora o resto, se nenhuma for verdadeira cai no else.

Por que testar idade_str com isdigit() antes de converter?00:57:08

isdigit() devolve True se o texto for dígito válido, aí entra no if e converte com int() sem falhar.

Conceitos da aula

  • if/else
  • elif
  • validação de entrada
  • isdigit()
  • condicional aninhada
  • efeito Hadouken
  • indentação
  • IndentationError
  • comparação encadeada
  • and
  • or
  • not

Reforce este assunto

10 exercíciosComeçar →