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.

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.

main.py
Output
Click Run to see the output here.

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.

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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.
main.py
Output
Click Run to see the output here.

Convertendo entre tipos numéricos

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

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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:

main.py
Output
Click Run to see the output here.

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".

Aprenda a programar com o Coddy

COMEÇAR