Menu

Números e booleanos em Python: int, float, bool e aritmética

Como o Python lida com inteiros, números de ponto flutuante e booleanos — aritmética, conversão e os casos de borda que derrubam as pessoas.

Esta página tem editores executáveis — edite, execute e veja a saída na hora.

Dois tipos de números, um tipo de verdade

Os tipos numéricos que você vai usar no dia a dia são int e float, mais bool para valores verdadeiro/falso. Eles dão conta de quase toda a aritmética e lógica que um programa Python normal precisa.

O Python às vezes chama booleanos de subtipo de inteiros — True é literalmente 1 e False é literalmente 0 — o que abre alguns truques úteis mais à frente.

Aritmética com inteiros

Inteiros em Python nunca estouram. Parece pouco importante até você escrever sua primeira função fatorial e perceber que a maioria das outras linguagens já teria virado silenciosamente para um número negativo.

Os dois produzem respostas exatas, não importa quão grandes. A memória é o único teto.

Os operadores aritméticos são os que você esperaria, mais alguns:

Três coisas dessa lista que vale guardar:

  • / sempre retorna um float no Python 3, mesmo quando os dois lados são inteiros. 10 / 2 te dá 5.0, não 5. Se quer um inteiro, use //.
  • // arredonda na direção do infinito negativo, então -7 // 2 é -4, não -3. Incomum, mas consistente.
  • % dá o resto, e é útil para "este número é par?" (n % 2 == 0) e para dar a volta num intervalo fixo.

Floats e sua armadilha famosa

Floats são imperfeitos por design. São guardados em binário, que não consegue representar a maioria das frações decimais exatamente. O exemplo clássico:

A primeira linha imprime 0.30000000000000004. A segunda imprime False. Toda linguagem que segue o padrão IEEE 754 — Python, JavaScript, Java, C — tem esse comportamento. Não é bug do Python.

Na prática, isso significa duas coisas:

  1. Não compare floats com ==. Se você precisa de "perto o suficiente", use math.isclose(a, b) ou cheque se abs(a - b) < alguma_tolerancia.
  2. Para dinheiro, use decimal.Decimal. O módulo decimal da biblioteca padrão dá aritmética decimal exata — sem surpresas tipo 0.1 + 0.2. É mais lento que float, e é por isso que não é o padrão, mas é a escolha certa para valores monetários.

Convertendo entre tipos numéricos

O Python não converte silenciosamente um inteiro em string nem uma string em número. Você pede explicitamente:

Conversões inválidas geram ValueError:

>>> int("hello")
ValueError: invalid literal for int() with base 10: 'hello'

A mensagem de erro é direta e fácil de agir em cima. Limpe a entrada ou capture a exceção.

Booleanos, com um pouco mais de profundidade

True e False são os dois valores booleanos — escritos exatamente assim, com letra maiúscula. A maioria das comparações produz um deles:

Os operadores booleanos são and, or e not, escritos como palavras em inglês em vez de símbolos:

Uma sutileza que vale saber: and e or não necessariamente retornam True ou False — retornam o valor que decidiu a expressão. 0 or "fallback" retorna "fallback"; 5 and 10 retorna 10. Isso permite escrever defaults curtos como name = user_input or "anonymous", mas também vale entender se uma checagem booleana um dia te der um tipo inesperado.

Truthy e falsy

O Python trata muitos valores como "mais ou menos verdadeiros" ou "mais ou menos falsos" quando você usa num contexto booleano como if ou while. Os valores falsy são:

  • False
  • 0, 0.0
  • None
  • Containers vazios: "", [], {}, set(), ()

Todo o resto é truthy. Isso permite escrever checagens mais naturais:

Leia if name: como "se name tem algo dentro". Muito mais limpo do que if name != "":. Só cuidado com números — if count: vai tratar 0 como "pule", o que geralmente mas nem sempre é o que você quer. Se zero for um valor legítimo, use if count is not None:.

Aritmética com booleanos

Como booleanos são inteiros, você pode fazer aritmética com eles:

Esse truque aparece com frequência suficiente para guardar. Se você quer contar quantos itens numa lista passam em algum teste, some um gerador que retorna booleanos:

As lições práticas

  • Inteiros nunca estouram. Use livremente.
  • / retorna float; use // quando quer divisão inteira.
  • Não compare floats com ==; compare com uma tolerância, ou use Decimal para dinheiro.
  • Truthiness deixa condições mais legíveis — desde que você lembre que 0 e string vazia são falsy.

Na sequência: input e print, as duas ferramentas que transformam seus scripts de programas silenciosos em conversas.

Perguntas frequentes

Qual a diferença entre int e float em Python?

Um int é um número inteiro sem ponto decimal; um float é um número com ponto decimal. Inteiros em Python podem ter qualquer tamanho — não há overflow. Floats seguem as regras padrão IEEE 754, o que significa que podem perder pequenas quantidades de precisão em aritmética decimal.

Por que 0.1 + 0.2 não é igual a 0.3 em Python?

Porque números de ponto flutuante binários não conseguem representar a maioria dos decimais exatamente. 0.1 + 0.20.30000000000000004. Isso não é bug do Python — toda linguagem com floats IEEE 754 tem o mesmo comportamento. Para matemática decimal exata, use o módulo decimal.

O que são valores truthy e falsy em Python?

O Python trata muitos valores como verdadeiros ou falsos em contextos booleanos, mesmo que não sejam literalmente True ou False. Zero, strings vazias, listas vazias, dicionários vazios e None são falsy; a maioria dos outros valores é truthy. if my_list: se lê como "se a lista tem algo dentro".

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR