Operadores lógicos com truthy e falsy

Como os operadores lógicos em Python interagem com valores truthy e falsy

Valores truthy e falsy

Na lição anterior, aprendemos sobre os operadores lógicos. Mas você se lembra que quando falamos sobre Booleanos, vimos que alguns valores são considerados como verdadeiros ou falsos para o Python, mesmo sem serem do tipo bool?

Agora vamos retomar essa ideia com mais clareza:

O que é valor truthy?

Os valores que vimos que são considerados como True são chamados de truthy. Lembre-se de alguns deles:

  • Números diferentes de zero: 1, 2.5, -3
  • Strings não vazias: "Python", "0"
  • Coleções com pelo menos um elemento: [1], { "a": 1 }

O que é falsy?

Já os valores que são considerados como False são chamados de falsy. Reveja quais são:

  • O número zero: 0
  • String vazia: ""
  • Coleções vazias ([], {}, ())

None

Existe um valor especial que ainda não vimos, o None. Ele representa a falta de um valor e é do tipo NoneType. Da mesma forma que podemos criar variáveis com strings vazias, também podemos criar variáveis sem valor nenhum atribuído usando o None:

1x = None 2 3print(x) 4print(type(x)) 5 6# Saída: 7# None 8# <class 'NoneType'>

Não precisa se preocupar com ele agora, basta saber que ele também é considerado como falsy.

1x = None 2print(bool(x)) 3 4# Saída: 5# False

Operadores lógicos com truthy e falsy

Agora que você já sabe que vários valores podem se comportar como True ou False, é importante entender como os operadores lógicos lidam com eles. O Python não converte automaticamente tudo para booleano. Na verdade, ele usa os valores truthy e falsy diretamente.

O and com valores truthy e falsy

O operador and retorna o primeiro valor falsy encontrado. Se todos forem truthy, retorna o último valor.

1print(0 and 5) # 0 é falsy 2print(3 and 7) # ambos são truthy 3 4# Saída: 5# 0 6# 7 7

Uma aplicação do and com valores truthy e falsy é quando queremos garantir que um arquivo existe E possui conteúdo antes de usá‑lo. Imagine que você está recebendo o nome de um arquivo e também o conteúdo dele. Só faz sentido processar o arquivo se ambos existirem:

1nome_arquivo = "relatorio.txt" # truthy 2conteudo_arquivo = "Dados do relatório" # truthy 3 4resultado = nome_arquivo and conteudo_arquivo 5print(resultado) 6 7# Saída: 8# Dados do relatório

Se qualquer dos valores for falsy (nome vazio e/ou conteúdo vazio), o and devolve esse valor, indicando que falta algo. Se ambos forem truthy, o and devolve o último valor: o conteúdo.

O or com valores truthy e falsy

O operador or retorna o primeiro valor truthy encontrado. Se todos forem falsy, retorna o último.

1print("" or "Python") # string vazia é falsy 2print(0 or 5) # 0 é falsy, 5 é truthy 3 4# Saída: 5# Python 6# 5

Esses comportamentos tornam expressões como esta muito naturais em Python:

1nome = input("Digite seu nome: ") or "Visitante" 2print(f"Olá, {nome}!")

Aqui, se o usuário não digitar nada, input retorna uma string vazia (falsy). O operador or então devolve "Visitante". Se o usuário digitar algo, esse valor (truthy) é retornado.

O not com valores truthy e falsy

Já o not continua invertendo o valor booleano do que vem depois dele. Se um valor é truthy, ele vira False. Se ele é falsy, vira True:

1texto = "" 2print(not texto) # string vazia é falsy 3 4# Saída: 5# True