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 / 2te dá5.0, não5. 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:
- Não compare floats com
==. Se você precisa de "perto o suficiente", usemath.isclose(a, b)ou cheque seabs(a - b) < alguma_tolerancia. - Para dinheiro, use
decimal.Decimal. O módulodecimalda biblioteca padrão dá aritmética decimal exata — sem surpresas tipo0.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:
False0,0.0None- 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 useDecimalpara dinheiro. - Truthiness deixa condições mais legíveis — desde que você lembre que
0e 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.2 dá 0.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".