Condicionais avançadas
Aprofunde o uso das estruturas condicionais em Python.
Na lição anterior, aprendemos o básico sobre estruturas condicionais com o if, elif e else. Aqui, vamos nos aprofundar ainda mais nesse assunto e aprimorar o raciocínio por trás das decisões no código.
O operador and e condições aninhadas
Às vezes, uma decisão depende de outra. Para saber se uma pessoa pode dirigir no Brasil, por exemplo, precisamos verificar duas coisas: se ela tem pelo menos 18 anos e se já possui carteira de motorista. Existem diferentes maneiras de representar isso no código.
Você pode usar o operador and:
1idade = 25 2tem_carteira = True 3 4if idade >= 18 and tem_carteira == True: 5 print("Pode dirigir") 6elif idade >= 18 and tem_carteira == False: 7 print("Precisa tirar a carteira") 8else: 9 print("Ainda não tem idade para dirigir") 10 11# Saída: 12# Pode dirigir
Uma alternativa seria usar o aninhamento de um if dentro de outro if. Isso evita repetições desnecessárias. Primeiro verificamos se a pessoa tem idade para dirigir e só se essa condição for verdadeira que conferimos se ela possui carteira:
1idade = 15 2tem_carteira = False 3 4if idade >= 18: 5 if tem_carteira: 6 print("Pode dirigir") 7 else: 8 print("Precisa tirar a carteira") 9else: 10 print("Ainda não tem idade para dirigir") 11 12# Saída: 13# Ainda não tem idade para dirigir
Se a idade for menor que 18, o código já segue para o else, pois não faz sentido verificar a parte da carteira. Uma pessoa menor de idade não poderia dirigir mesmo se tivesse a carteira e a carteira só pode ser tirada por quem já tem 18 anos ou mais.
Versões compactas
Para situações bem simples, o Python permite formas reduzidas das condicionais.
if em uma linha
Se um if tiver apenas uma instrução, você pode colocá-lo na mesma linha do comando que será executado quando a condição for verdadeira:
1idade = 18 2if idade >= 18: print("Pode entrar") 3 4# Saída: 5# Pode entrar
Funciona, mas use com cuidado. A legibilidade do código sempre vem primeiro. Se estiver ficando confuso com tudo em uma só linha, é melhor criar o bloco e indentar o que vem dentro dele.
Expressão condicional
A expressão condicional do Python funciona de forma similar ao ternário de outras linguagens. Quando você quer escolher um valor com base em uma condição, pode usar a expressão:
1valor_se_verdadeiro if condicao else valor_se_falso
Por exemplo:
1idade = 20 2print("adulto" if idade >= 18 else "menor de idade") 3 4# Saída: 5# adulto
No exemplo acima, se idade >= 18 for verdadeira, imprimimos "adulto". Caso contrário, imprimimos "menor de idade".
Atribuindo valores com if/else em uma linha
O formato reduzido também serve para decidir rapidamente qual valor guardar na variável:
1a = 10 2b = 20 3maior = a if a > b else b 4 5print("O maior valor é", maior) 6 7# Saída: 8# O maior valor é 20
Esse padrão é comum em situações em que você quer decidir rapidamente entre dois valores sem escrever um bloco if completo.
Importante: As versões compactas são excelentes em casos mais curtos e simples. Para lógicas mais complexas ou com muitos passos, prefira o
ifnormal com blocos em múltiplas linhas. Na programação, a legibilidade e o fácil entendimento costumam ser mais importantes que a concisão.
Usando variáveis booleanas
Vimos o quanto os operadores lógicos e de comparação são úteis aqui, mas você não precisa comparar tudo o tempo todo. Se já tiver uma variável booleana, pode usá-la diretamente no if.
Na vida real, você diria: "Se tenho ingresso, eu entro", em vez de: "Se tenho ingresso é igual a verdadeiro, eu entro". No código, vale a mesma lógica, ou seja, if condicao equivale a if condicao == True caso o valor de condicao seja True:
1tem_ingresso = True 2 3if tem_ingresso: 4 print("Pode entrar no evento!") 5 6# Saída: 7# Pode entrar no evento!
Isso também vale para valores truthy e falsy. Lembra que usamos a função input() para pedir pro usuário digitar um valor que vamos guardar em uma variável? Veja o que acontece aqui quando o usuário não digita nenhum nome e só aperta a teclar Enter:
1nome = input("Insira seu nome de usuário: ") # o usuário não digita nada 2print(nome) # nome é uma string vazia ("") 3 4if nome: 5 print(f"Olá, {nome}!") 6else: 7 print("Nome não pode ser vazio.") 8 9# Saída: 10# (nada é impresso) 11# Nome não pode ser vazio.
Como nenhum valor é inserido pelo usuário e o input() sempre retorna valores do tipo string, uma string vazia é atribuída à variável nome.
Vimos em lições anteriores que strings vazias são falsy, ou seja, consideradas como False. Dessa forma, quando o Python avaliar o if nome, essa condição terá o resultado False. Com isso, o código não entra no bloco do if, ele entra no else e diz: "Nome não pode ser vazio."
Você está percebendo como as peças que estamos aprendendo estão se encaixando? Esse último código que vimos acima combina tantos conceitos!
Ele usa o que aprendemos sobre variáveis, strings e formatação delas, tipo booleano, truthy e falsy, operadores de atribuição e de comparação, e as próprias estruturas condicionais.
O mais empolgante é que estamos só no começo. Cada novo conceito abre portas para criar coisas ainda mais interessantes. Então, continue evoluindo: o que você pode construir daqui pra frente não tem limite!