Python Booleanos (True e False)

Muitas perguntas que um programa faz têm só duas respostas possíveis: a padaria está aberta? Ainda tem pão? A aluna passou de ano? A senha está certa? Para guardar essas respostas, o Python tem um tipo próprio, o bool (os booleanos), com apenas dois valores: True (verdadeiro) e False (falso). Eles parecem simples, e são, mas é com eles que o programa toma decisões. Nesta aula você também vai conhecer uma ideia muito usada em Python: todo valor, até um número ou um texto, pode ser tratado como verdadeiro ou falso.

Você vai aprender
  • Os dois valores booleanos, True e False, e como escrevê-los (com maiúscula!).
  • Que toda comparação (idade >= 18) responde com um booleano.
  • A guardar a resposta de uma pergunta numa variável, como pode_votar.
  • O que é truthy e falsy: por que 0 e "" contam como falso.
  • Por que True + True dá 2, e como isso ajuda a contar.
  • A diferença entre o valor True e o texto "True".
  • Os erros reais: true minúsculo e True = 1.

Os programas desta aula rodaram no Python 3.14 da máquina da Ana (usuária ana, computador notebook), e podem ser repetidos no editor do guia.


A ideia: o interruptor de luz

Um interruptor só tem duas posições: ligado ou desligado. Não existe "meio ligado". A plaquinha na porta da padaria também: ou está virada para "ABERTO", ou para "FECHADO".

Um booleano é isso: um valor que só pode ser True ou False. O nome vem de George Boole, um matemático inglês do século XIX que estudou as contas com "verdadeiro" e "falso", que hoje são a base de todos os computadores.

ValorQuer dizerPense em
TrueVerdadeiro, simInterruptor ligado, plaquinha "ABERTO"
FalseFalso, nãoInterruptor desligado, plaquinha "FECHADO"

1. Os valores True e False

Você escreve um booleano direto no código, como escreve um número. A Ana anota a situação da padaria:

aberta = True
tem_sonho = False
print(aberta)
print(tem_sonho)
print(type(aberta))
$ python3 padaria.py
True
False
<class 'bool'>
aberta = True
Guarda o valor verdadeiro na variável aberta.
True
Com T maiúsculo e sem aspas. Não é um texto, nem um nome de variável: é uma palavra reservada do Python, um valor pronto.
tem_sonho = False
O sonho (o doce) acabou: falso. Também com maiúscula, F.
<class 'bool'>
O tipo dos booleanos se chama bool.
Nomes que soam como pergunta

Repare nos nomes: aberta, tem_sonho, pode_votar, esta_pago. Para variáveis booleanas, o costume é escolher um nome que responda bem a "sim" ou "não". Assim, quem lê tem_sonho = False entende na hora: "não tem sonho".


2. Perguntas que respondem True ou False

Na maioria das vezes, você não escreve True ou False à mão: eles aparecem como resposta de uma pergunta. Toda comparação é uma pergunta de sim ou não:

idade = 17
estoque = 0
print(idade >= 18)
print(estoque == 0)
pode_votar = idade >= 16
print(pode_votar)
$ python3 perguntas.py
False
True
True
idade >= 18
"A idade é maior ou igual a 18?" Com 17, não: False.
estoque == 0
"O estoque é igual a zero?" (dois sinais de igual: é uma pergunta; um só guarda um valor). Sim: True.
pode_votar = idade >= 16
O Python primeiro responde a pergunta da direita (True) e depois guarda a resposta na variável. No Brasil, o voto é permitido a partir dos 16 anos.

Todos os sinais de comparação (==, !=, <, >, <=, >=) estão na aula Comparações, e o jeito de juntar perguntas ("tem pão e está aberta?") está em and, or e not.

Para que serve: tomar decisões

O booleano é o combustível do if ("se"), que você vai aprender na aula if. Só para matar a curiosidade, a ideia é esta:

aberta = True
if aberta:
    print("Pode entrar!")
$ python3 exemplo_if.py
Pode entrar!

"Se aberta for verdadeiro, mostre 'Pode entrar!'". Sem booleanos, o programa faria sempre a mesma coisa; com eles, ele escolhe.


3. Truthy e falsy: todo valor tem um lado

Aqui vem uma ideia muito usada em Python. Qualquer valor, e não só True e False, pode ser usado onde se espera um "sim" ou "não". Para saber qual dos dois um valor representa, pergunte ao bool() (aula Conversão de Tipos):

$ python3 -q
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool("")
False
>>> bool([])
False
>>> bool(None)
False
>>> bool(" ")
True
>>> bool(42)
True
>>> bool(-0.5)
True
>>> bool("Ana")
True
>>> bool([0])
True

A regra é: o que é "nada" conta como falso; o resto conta como verdadeiro. Os programadores usam duas palavras em inglês para isso: os valores que contam como verdadeiro são truthy ("verdadeiro-ish", algo como "com cara de verdadeiro"), e os que contam como falso são falsy.

TipoFalsy (conta como False)Truthy (conta como True)
BooleanoFalseTrue
Número0 e 0.0Qualquer outro: 42, -1, -0.5
Texto"" (vazio)Qualquer texto com algo dentro, até " " (um espaço), "0" e "False"
Lista[] (vazia)Qualquer lista com itens, até [0]
O "nada"None (aula O Valor None)—

Repare em três pegadinhas da lista: " ", com um espaço, não está vazio (tem o espaço dentro), então é truthy. [0] é uma lista com um item (o zero), então também é truthy. E números negativos não são "nada": -0.5 é truthy.

Para que serve

Para escrever perguntas curtas, como "a pessoa digitou alguma coisa?". Em vez de comparar o texto com "", basta usar o próprio texto:

nome = input("Seu nome: ")
if nome:
    print("Olá,", nome)
else:
    print("Você não digitou nada.")
$ python3 se_nome.py
Seu nome: Ana
Olá, Ana
$ python3 se_nome.py
Seu nome:
Você não digitou nada.

Na segunda vez, a Ana só apertou Enter. O input() devolveu "", que é falsy, e o programa foi para o else ("senão"). O if e o else têm aulas próprias (if e if e else); por enquanto, guarde a ideia: texto vazio conta como falso.


4. Por baixo do pano, True é 1 e False é 0

Uma curiosidade que vira truque útil: para o Python, o bool é um tipo especial de inteiro. True vale 1 e False vale 0, e dá até para fazer conta com eles:

$ python3 -q
>>> True + True
2
>>> True == 1
True
>>> False == 0
True
>>> True * 10
10

Para que isso serve? Para contar quantas respostas foram "sim". Somando os booleanos, cada True conta 1 e cada False conta 0:

ana_passou = True
bia_passou = False
caio_passou = True
aprovados = ana_passou + bia_passou + caio_passou
print("Aprovados:", aprovados)
$ python3 aprovados.py
Aprovados: 2

Missão: na turma da tarde, Davi, Eva e Fábio passaram de ano. Troque o valor que está errado e faça o programa somar os três booleanos, para mostrar Aprovados: 3.

davi_passou = True
eva_passou = False
fabio_passou = True
aprovados = 0
print("Aprovados:", aprovados)
davi_passou = True
eva_passou = True
fabio_passou = True
aprovados = davi_passou + eva_passou + fabio_passou
print("Aprovados:", aprovados)

5. O valor True e o texto "True"

Com aspas, deixa de ser booleano. "True" é um texto de quatro letras, que por acaso formam a palavra "True":

aberta = "True"
print(aberta)
print(type(aberta))
print(aberta == True)
$ python3 texto_true.py
True
<class 'str'>
False

O print mostra os dois do mesmo jeito, o que engana. Mas o type denuncia: é str. E a pergunta aberta == True responde False: um texto nunca é igual a um booleano.

Esse problema aparece de verdade quando a resposta vem do teclado. O input() sempre devolve texto, e o bool() de qualquer texto não vazio é True, mesmo que a pessoa tenha digitado "n":

resposta = input("A padaria está aberta? (s/n) ")
aberta = bool(resposta)
print("Aberta:", aberta)
$ python3 aberta_input.py
A padaria está aberta? (s/n) n
Aberta: True

A Ana disse "não", e o programa entendeu "sim"! O bool() não lê o que está escrito; ele só vê que o texto "n" não está vazio. O jeito certo é comparar a resposta com o texto que quer dizer "sim":

resposta = input("A padaria está aberta? (s/n) ")
aberta = resposta == "s"
print("Aberta:", aberta)
$ python3 aberta_certo.py
A padaria está aberta? (s/n) n
Aberta: False
$ python3 aberta_certo.py
A padaria está aberta? (s/n) s
Aberta: True

resposta == "s" pergunta "a resposta é o texto s?", e a resposta dessa pergunta é o booleano certo.


Formas diferentes de obter um booleano

FormaExemploQuando usar
Escrever o valoraberta = TrueQuando você já sabe a resposta (um valor inicial, uma configuração)
Uma comparaçãopode_votar = idade >= 16O mais comum: a resposta depende de outro valor
Comparar um textoaberta = resposta == "s"Para transformar uma resposta digitada em booleano
bool(valor)tem_estoque = bool(estoque)Para saber se o valor é truthy; raro, porque o if já faz isso sozinho
notfechada = not abertaPara inverter: not True é False (aula and, or e not)

Quando dá errado

true com letra minúscula: NameError

Em muitas outras linguagens (JavaScript, Java, C), o verdadeiro se escreve true, com minúscula. No Python, não:

aberta = true
print(aberta)
$ python3 minusculo.py
Traceback (most recent call last):
  File "/home/ana/minusculo.py", line 1, in <module>
    aberta = true
             ^^^^
NameError: name 'true' is not defined. Did you mean: 'True'?
line 1
O erro está na linha 1.
^^^^
Os chapeuzinhos marcam a palavra true.
NameError
"Erro de nome": o Python procurou alguma coisa chamada true e não achou. Sem maiúscula, true não é o valor verdadeiro; parece o nome de uma variável que ninguém criou.
name 'true' is not defined
"O nome 'true' não está definido".
Did you mean: 'True'?
"Você quis dizer 'True'?". O próprio Python sugere o conserto.

Com tudo em maiúsculas, TRUE, acontece o mesmo: NameError: name 'TRUE' is not defined. Did you mean: 'True'?. Como consertar: True e False, só a primeira letra maiúscula.

Tentar guardar algo em True: SyntaxError
True = 1
$ python3 atribuir_true.py
  File "/home/ana/atribuir_true.py", line 1
    True = 1
    ^^^^
SyntaxError: cannot assign to True

"Não é possível atribuir a True". True e False são palavras reservadas, valores fixos: não dá para usá-los como nome de variável. Como é um erro de escrita (SyntaxError), o programa nem começa; por isso não aparece a palavra Traceback. Como consertar: escolha um nome de verdade, como aberta = True.

"True" entre aspas, ou bool() numa resposta digitada

Não dá mensagem de erro: o programa roda e responde errado, como você viu na seção 5. Se um "sim" e um "não" dão o mesmo resultado, desconfie de um texto no lugar do booleano. Como consertar: escreva True sem aspas; para respostas digitadas, compare: resposta == "s".

Missão: o programa para com NameError. Conserte o valor booleano.

tem_pao = true
print(tem_pao)
tem_pao = True
print(tem_pao)

Referência rápida

EscritaResultadoObservação
True, Falsetipo boolMaiúscula na primeira letra, sem aspas
idade >= 18True ou FalseToda comparação devolve um booleano
bool(0), bool(""), bool([]), bool(None)False"Nada" é falsy
bool(42), bool("Ana"), bool(" "), bool("0")TrueO resto é truthy
True + True2True vale 1, False vale 0
not TrueFalseInverte
"True" == TrueFalseTexto não é booleano
SintomaCausa provável
NameError: name 'true' is not defined. Did you mean: 'True'?true ou TRUE: o certo é True
SyntaxError: cannot assign to TrueTentou usar True como nome de variável
"Não" e "sim" dão o mesmo resultadoUm texto no lugar do booleano, ou bool() numa resposta digitada

Exercícios

1. Verdadeiro ou falso?

Escreva o que o bool() devolve (True ou False):

bool(0) → bool(-3) → bool("") → bool("False") →

2. A conta dos booleanos

Quanto vale a soma?

True + False + True + True →

3. Qual linha guarda o valor verdadeiro numa variável?

4. A pessoa digitou n em resposta = input("Aberta? (s/n) "). Quanto vale bool(resposta)?

5. Qual destes valores é falsy?

Missão final: a plaquinha da padaria

Missão: o editor vai responder n (não), mas o programa mostra Aberta: True. Troque o bool(resposta) por uma comparação que só dá True quando a resposta for "s".

resposta = input("A padaria está aberta? (s/n) ")
aberta = bool(resposta)
print("Aberta:", aberta)
resposta = input("A padaria está aberta? (s/n) ")
aberta = resposta == "s"
print("Aberta:", aberta)

Resumo

  • O tipo bool tem só dois valores: True (verdadeiro) e False (falso), com a primeira letra maiúscula e sem aspas.
  • Toda comparação responde com um booleano: idade >= 18 é True ou False. Dá para guardar a resposta: pode_votar = idade >= 16.
  • Todo valor tem um lado: zero, texto vazio, lista vazia e None são falsy; o resto é truthy, até " ", "0" e "False".
  • True vale 1 e False vale 0: somar booleanos conta os "sim".
  • "True" com aspas é texto. Para transformar uma resposta digitada em booleano, compare: resposta == "s", nunca bool(resposta).
  • true minúsculo dá NameError (com a dica Did you mean: 'True'?); True = 1 dá SyntaxError.