Booleanos e valores verdade
Esta aula aborda os valores booleanos em Python, incluindo os literais True e False, a avaliação de valores falsy, os operadores lógicos (and, or, not) e o comportamento de curto-circuito. O conteúdo é prático e progressivo, com exemplos de código e exercícios para fixação.
Em Python, os valores booleanos representam dois estados: verdadeiro ou falso. Eles são fundamentais para controle de fluxo, como em condicionais e laços. Nesta aula, vamos explorar os literais True e False, entender como outros valores são interpretados como verdadeiros ou falsos (valores falsy), e aprender a usar operadores lógicos para combinar expressões booleanas. Também veremos o conceito de curto-circuito, que pode otimizar a execução do código.
Vamos começar com o básico e depois mergulhar em detalhes importantes para escrever código Python eficiente e expressivo.
True/False
Em Python, os valores booleanos são representados pelas constantes True e False. Eles são do tipo bool, que é uma subclasse de int: True equivale a 1 e False equivale a 0. Isso permite que operações aritméticas funcionem com booleanos, embora não seja recomendado por questões de clareza.
Você pode obter um valor booleano como resultado de comparações (como ==, !=, >, <, etc.) ou usando a função bool() para converter outros valores. Exemplos:
print(5 > 3) # True
print(10 == 10) # True
print(7 != 7) # False
print(bool(1)) # True
print(bool(0)) # FalseOs valores booleanos são imutáveis e podem ser usados em expressões lógicas, atribuições e como índices (embora raramente).
Valores falsy
Em Python, alguns valores são considerados "falsos" quando avaliados em um contexto booleano, como em um if. Esses são chamados de valores falsy. Os principais são:
NoneFalse- Zero numérico:
0,0.0,0j - Sequências e coleções vazias:
'',(),[],{},set() - Qualquer objeto que implemente
__bool__()ou__len__()retornandoFalseou0.
Todos os outros valores são considerados truthy. Isso é útil para verificar se uma lista está vazia, por exemplo:
lista = []
if lista:
print('lista não vazia')
else:
print('lista vazia') # Isso será executadoEntender valores falsy ajuda a escrever condições mais concisas e legíveis.
Operadores lógicos
Python oferece três operadores lógicos: and, or e not. Eles operam sobre valores booleanos (ou valores que podem ser convertidos para booleano) e retornam um valor booleano ou um dos operandos, dependendo do operador.
and: retornaTrueapenas se ambos os operandos forem verdadeiros. Caso contrário, retornaFalse. Na prática, ele retorna o primeiro valor falso ou o último valor verdadeiro.or: retornaTruese pelo menos um operando for verdadeiro. Retorna o primeiro valor verdadeiro ou o último valor falso.not: retorna o valor booleano inverso do operando (TrueviraFalsee vice-versa).
Exemplos:
a = True
b = False
print(a and b) # False
print(a or b) # True
print(not a) # False
# Com valores não booleanos
print(0 and 10) # 0 (primeiro falso)
print(10 and 20) # 20 (último verdadeiro)
print(0 or 10) # 10 (primeiro verdadeiro)
print(10 or 20) # 10 (primeiro verdadeiro)Observe que os operadores and e or não retornam necessariamente True ou False, mas um dos operandos. Isso é útil para atribuições condicionais.
Curto-circuito
Os operadores and e or usam avaliação de curto-circuito: a expressão é avaliada da esquerda para a direita e a avaliação para assim que o resultado é determinado. Para and, se o primeiro operando for falso, o segundo não é avaliado (pois o resultado já será falso). Para or, se o primeiro operando for verdadeiro, o segundo não é avaliado.
Isso pode ser usado para evitar erros, como acessar atributos de None:
def get_nome(dicionario, chave):
return dicionario.get(chave) or 'Nome padrão'
pessoa = {'nome': 'João'}
print(get_nome(pessoa, 'nome')) # João
print(get_nome(pessoa, 'idade')) # Nome padrão (pois None é falsy)Outro exemplo: verificar se uma lista não é vazia antes de acessar o primeiro elemento:
lista = []
primeiro = lista and lista[0] # Se lista for vazia, retorna [] (falso), sem erro
print(primeiro) # []O curto-circuito também é útil para encadear condições, garantindo que uma condição só seja avaliada se a anterior for verdadeira.
Boas práticas: Use curto-circuito para simplificar verificações, mas evite expressões muito complexas que prejudiquem a legibilidade. Prefira if explícitos quando a lógica não for trivial.
Referências
- Documentação oficial: Boolean Values
- Operações booleanas no Python
- Real Python: Python Booleans
- W3Schools: Python Booleans
- Função bool()
Exercícios
O que será impresso pelo código abaixo? Explique.
x = 0 y = 10 resultado = x and y print(resultado)✓ Resposta: O código imprime0. Comoxé 0 (falsy), o operadorandpara e retorna o primeiro valor falsy, que é 0.Qual é o resultado da expressão
not (10 > 5) or (3 == 3)?✓ Resposta:True. Primeiro,not (10 > 5)énot True=False. Depois,False or (3 == 3)éFalse or True=True.Escreva uma expressão que verifique se uma variável
nomenão é vazia e, se for, atribua 'Visitante' a ela, usando curto-circuito.✓ Resposta:nome = nome or 'Visitante'. Senomefor uma string vazia (falsy), a expressão retorna 'Visitante'. Caso contrário, retorna o próprionome.O que a função
bool()retorna para os valores:[],'False',0.0,None?✓ Resposta:bool([])retornaFalse(lista vazia é falsy).bool('False')retornaTrue(string não vazia é truthy).bool(0.0)retornaFalse.bool(None)retornaFalse.Explique o que acontece na expressão
10 or 0/0e por que não ocorre erro de divisão por zero.✓ Resposta: A expressão retorna10. Como10é truthy, o operadororfaz curto-circuito e não avalia o segundo operando (0/0), evitando assim o erro de divisão por zero.