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
Validar
00:17:33idade_strcom.isdigit()antes deint()input()sempre devolvestring, entãoidade_strchega como texto.isdigit()devolveTruesó se o texto for inteiro maior ou igual a zero, como"10", e devolveFalsepara"Doritos","10.7"e"-10". Só se forTrueo código converte comint()e calcula, senão mostra mensagem amigável em vez de quebrar com erro.idade_str = "10" print(idade_str.isdigit()) print("10.7".isdigit()) print("Doritos".isdigit()) print("-10".isdigit())Saída
True False False False
Aninhar
00:29:33ifdentro deifgera efeito HadoukenCondicional aninhada é um
if/elsedentro de outroif/else, o bloco de dentro só roda se entrar no de fora. No exemplo da idade, primeiro testa seidade >= 0e só dentro testaidade < 12para criança. Cada nível empurra o código para a direita e cria o efeito Hadouken, que deixa a leitura difícil.idade = 8 if idade >= 0: if idade < 12: print("criança") else: print("não criança")Saída
criança
Trocar aninhada por
00:39:02elifcomelsefinalelifsignifica ou se e testa outra condição só quando oifanterior falhou, sem abrir outro nível. Testando da menor para a maior faixa, quem tem 8 anos já cai no primeiroelife o resto é ignorado. Oelsefinal pega o que sobrou, como idade inválida, para o programa sempre responder alguma coisa.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
Indentação com espaços define bloco e dá
00:44:32IndentationErrorNo 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á
IndentationErrore nem roda. Em Bash o bloco fecha comfie em JavaScript abre e fecha com{e}, lá indentação é só organização.if 10 > 5: print("maior") else: print("menor")Saída
maior
Comparação encadeada tipo
00:58:560 < idade <= 12Em vez de
0 < idade and idade <= 12, dá para escrever0 < idade <= 12, que funciona igual. Só o primeiroifouelifverdadeiro executa e ignora o resto, se nenhum for verdadeiro cai noelse. Por isso a ordem importa: do menor para o maior evita cair no ramo errado e deixa até omitir parte da checagem.idade = 8 print(0 < idade <= 12) print(0 < idade and idade <= 12)Saída
True True
Bolsas com
01:21:48and,or,note parêntesesAs regras da bolsa combinam
and,orenot, com parênteses para deixar a ordem explícita. Comparar comresposta.lower() == "sim"aceitaSimesimsem diferença. Guardar cada regra em variável e escrever o plano em comentários antes de codar deixa oiflegível e o programa à prova de usuário, sempre com alguma mensagem.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
- Seleção com `if`, `else` e operadores lógicosPython · trilha, etapa 5
- `elif` e seleção aninhadaPython · trilha, etapa 6
- Variáveis, operadores aritméticos e conversão de tempoPython · trilha, etapa 2