programandoai

Comparações, and/or/not e a verdade pythônica das coisas vazias

Python tem um jeito próprio, bem elegante, de tratar listas vazias, textos vazios e o número zero como 'falso' automaticamente, sem escrever nenhuma comparação extra.

Estudar esta lição interativa →

Muitas decisões reais dependem de mais de uma condição ao mesmo tempo: liberar um cadastro só se o nome não estiver vazio e a idade for maior que zero; mostrar um aviso se o carrinho estiver vazio ou o cliente não estiver logado. Python combina condições com as palavras and (e), or (ou) e not (negação), escritas por extenso, sem símbolos especiais como && de outras linguagens.

idade = 25
tem_ingresso = True

if idade >= 18 and tem_ingresso:
    print("Pode entrar.")

if idade < 18 or not tem_ingresso:
    print("Não pode entrar.")

Agora um recurso bem característico do Python: qualquer valor pode ser avaliado como verdadeiro (truthy) ou falso (falsy) dentro de um if, mesmo sem ser um bool de verdade. Uma lista vazia [], uma string vazia "", o número 0 e o valor especial None são todos falsy; qualquer coisa preenchida (uma lista com itens, um texto não vazio, um número diferente de zero) é truthy. Isso permite um estilo de código bem mais enxuto:

carrinho = []

if len(carrinho) == 0:
    print("Carrinho vazio (checagem com len).")

if not carrinho:
    print("Carrinho vazio (checagem pythônica).")

As duas condições fazem exatamente a mesma checagem.

Pense numa caixa de correio: perguntar "a caixa tem alguma carta dentro?" e perguntar "o número de cartas na caixa é maior que zero?" chegam na mesma resposta, mas a primeira pergunta é mais direta, mais próxima de como uma pessoa realmente pensaria o problema. if not lista: é o "a caixa está vazia?" direto; if len(lista) == 0: é o caminho mais longo até a mesma resposta.

Vindo do JavaScript?

Cuidado com a diferença: em JavaScript, uma lista vazia [] e um objeto vazio {} contam como verdadeiros. Em Python, [], {}, "", 0 e None são todos falsos. E o texto "0", que não está vazio, é verdadeiro nas duas linguagens.

Use is None para checar ausência de valor

Para checar especificamente se algo é None (o "nenhum valor" do Python), a convenção da comunidade é if variavel is None:, não if variavel == None:. As duas costumam funcionar, mas is None é o padrão recomendado, e vai aparecer o tempo todo em código Python real. A razão: == pergunta se dois valores são iguais, e is pergunta se são o mesmo objeto. Como o None existe uma única vez no programa, is None é a pergunta exata.

Comparar tipos incompatíveis com < ou > quebra o programa

Diferente de == (que funciona entre tipos diferentes, quase sempre devolvendo False, com exceções como 1 == 1.0, que é True), comparar ordem entre tipos incompatíveis gera erro. Tente "5" > 5: o Python não sabe comparar um texto com um número dessa forma, e devolve TypeError: '>' not supported between instances of 'str' and 'int'. É outro lembrete de que vale checar o tipo de um valor (com type(...) ou, melhor, isinstance(valor, int)) antes de comparar, principalmente quando o valor vem de fora do seu controle, como uma entrada de usuário.

carrinho = ["Caneta", "Caderno"]

if len(carrinho) == 0:
    print("Carrinho vazio.")
else:
    print(f"Carrinho tem {len(carrinho)} item(ns).")

Troque a condição para o estilo not carrinho.

Complete a classificação de três notas diferentes (nota1 = 8.5, nota2 = 5.0, nota3 = 2.0) usando if/elif/else: nota maior ou igual a 7 é "aprovado"; entre 3 (inclusive) e 7 (exclusive) é "recuperação"; abaixo de 3 é "reprovado". Guarde o resultado de cada uma em resultado1, resultado2 e resultado3.
nota1 = 8.5
nota2 = 5.0
nota3 = 2.0

# repita a mesma lógica de classificação para as três notas
resultado1 = ""
resultado2 = ""
resultado3 = ""

🧩 Este é um exercício com correção automática — abra no app para completá-lo e verificar.

← Voltar ao índice do curso