Pular para o conteúdo
Editor

Conversão de tipos em Python: como converter tipos de dados

Iniciante20 min5 exercícios85 XP

Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução

0/5 exercícios

Imagine que você pergunta a idade de alguém e a pessoa escreve a resposta em um post-it. Agora você tem o texto "25", mas não dá para fazer contas com um post-it. Primeiro você precisa ler o texto e transformá-lo, na sua cabeça, em um número de verdade.

O Python funciona do mesmo jeito. Muitas vezes os dados chegam em um tipo, mas precisam estar em outro. Um usuário digita "42" em um formulário: isso é uma string, não um número. Antes de somar, subtrair ou comparar esse valor, você precisa convertê-lo.

Este tutorial ensina a converter entre os tipos de dados do Python com segurança e confiança. Você vai aprender quais conversões acontecem automaticamente, quais você precisa fazer por conta própria e como evitar os erros que pegam os iniciantes.

O que é conversão de tipos em Python?

Conversão de tipos significa mudar um valor de um tipo de dado para outro. Por exemplo, transformar a string "42" no número inteiro 42, ou transformar o inteiro 10 no float 10.0.

O Python tem dois tipos de conversão. A conversão implícita acontece automaticamente: o Python faz isso por você, nos bastidores. A conversão explícita é quando você usa uma função como int() ou str() para converter um valor por conta própria.

Pense na conversão implícita como o corretor automático do celular trocando uma palavra. A conversão explícita é como editar a palavra você mesmo, à mão. As duas resolvem, mas o jeito manual dá mais controle.

Conversão implícita e explícita
# Implicit conversion - Python does it automatically
result = 5 + 2.0
print(result) # 7.0
print(type(result)) # <class 'float'>
# Explicit conversion - you do it with a function
age_text = "25"
age = int(age_text)
print(age + 5) # 30
Saída
7.0
<class 'float'>
30

Como funciona a conversão implícita de tipos em Python

Quando você mistura um inteiro e um float em uma operação matemática, o Python converte automaticamente o inteiro em float. Isso se chama conversão implícita (ou coerção de tipos). O Python sempre converte para o tipo "mais amplo", para que nenhum dado se perca.

É como despejar a água de um copo pequeno em um balde grande. A água (seus dados) continua a mesma: só passa a ficar em um recipiente maior. Ir de int para float é seguro para os números do dia a dia: um float representa exatamente todo inteiro até cerca de 9 quatrilhões.

Exemplos de conversão implícita
# int + float → float (automatic)
print(5 + 2.0) # 7.0 (not 7)
print(10 * 1.5) # 15.0
print(8 - 3.0) # 5.0
# bool + int → int (True = 1, False = 0)
print(True + 5) # 6
print(False + 10) # 10
# bool + float → float
print(True + 2.5) # 3.5
Saída
7.0
15.0
5.0
6
10
3.5
O Python não tenta adivinhar com strings
# This works - both are numbers
print(5 + 2.0) # 7.0
# This CRASHES - string + int is not allowed
try:
print("5" + 3)
except TypeError as e:
print(f"Error: {e}")
Saída
7.0
Error: can only concatenate str (not "int") to str

Como converter para inteiro com int()

A função int() converte um valor em número inteiro. Você pode converter floats, strings e booleanos. Cada tipo se comporta de um jeito um pouco diferente.

Convertendo floats em inteiros

Quando você converte um float em inteiro, o Python trunca: corta tudo o que vem depois do ponto decimal. Ele não arredonda. Pense em cortar uma corda: o que passa da marca cai fora.

De float para int: truncamento, não arredondamento
# int() truncates - it does NOT round
print(int(3.9)) # 3 - not 4!
print(int(3.1)) # 3
print(int(-2.7)) # -2 - truncates toward zero
print(int(99.999)) # 99
# If you want rounding, use round() instead
print(round(3.9)) # 4
print(round(3.1)) # 3
Saída
3
3
-2
99
4
3

Convertendo strings em inteiros

Você só pode converter uma string em inteiro se ela contiver um número inteiro válido. Espaços em volta do número não atrapalham, mas pontos decimais ou letras causam erro.

De string e bool para int
# Valid string-to-int conversions
print(int("42")) # 42
print(int("-7")) # -7
print(int(" 100 ")) # 100 - spaces are stripped
# Booleans to int
print(int(True)) # 1
print(int(False)) # 0
Saída
42
-7
100
1
0

Como converter para float com float()

A função float() converte um valor em número de ponto flutuante. Ela aceita inteiros, strings e booleanos.

Converter em float um inteiro do dia a dia não perde nada: o número ganha um .0 no final, como um preço de R$ 5 escrito como R$ 5,00. Só um inteiro acima do limite citado antes (2 ** 53) pode perder seus últimos dígitos.

Convertendo para float
# int to float
print(float(42)) # 42.0
print(float(-7)) # -7.0
print(float(0)) # 0.0
# string to float
print(float("3.14")) # 3.14
print(float("7")) # 7.0
print(float("-2.5")) # -2.5
# bool to float
print(float(True)) # 1.0
print(float(False)) # 0.0
Saída
42.0
-7.0
0.0
3.14
7.0
-2.5
1.0
0.0

Como converter para string com str()

A função str() converte qualquer valor na sua representação em string. É a função de conversão mais tolerante: funciona com quase tudo.

Você vai usar str() principalmente ao montar mensagens que misturam texto e números. O Python não deixa você juntar uma string e um número com +, então primeiro você converte o número em string.

Convertendo para string
# Numbers to string
print(str(42)) # "42"
print(str(3.14)) # "3.14"
print(str(-7)) # "-7"
# Booleans to string
print(str(True)) # "True"
print(str(False)) # "False"
# None to string
print(str(None)) # "None"
# Now you can concatenate
age = 25
print("I am " + str(age) + " years old") # I am 25 years old
Saída
42
3.14
-7
True
False
None
I am 25 years old
Usando str() e concatenação
name = "Alice"
age = 25
print("Name: " + name + ", Age: " + str(age))
Usando f-strings (mais limpo)
name = "Alice"
age = 25
print(f"Name: {name}, Age: {age}")

Como converter para booleano com bool()

A função bool() converte um valor em True ou False. A regra é direta: valores vazios e zero viram False, todo o resto vira True.

Pense nisso como perguntar "tem alguma coisa aqui?". Uma caixa vazia é False. Uma caixa com qualquer coisa dentro, mesmo que seja só um papel amassado, é True.

Valores truthy (viram True) e falsy (viram False)
# Falsy values - these all become False
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False - empty string
print(bool(None)) # False
print("---")
# Truthy values - these all become True
print(bool(1)) # True
print(bool(-5)) # True - any non-zero number
print(bool(3.14)) # True
print(bool("hello")) # True - any non-empty string
print(bool(" ")) # True - a space is still a character!
Saída
False
False
False
False
---
True
True
True
True
True
Conversões com bool() que enganam
# Tricky cases - don't get fooled!
print(bool("0")) # True - non-empty string
print(bool("False")) # True - non-empty string
print(bool("None")) # True - non-empty string
print(bool(" ")) # True - space is a character
# Only the ACTUAL empty string is falsy
print(bool("")) # False
Saída
True
True
True
True
False

Erros comuns de conversão de tipos em Python

Nem toda conversão é possível. Quando o Python não consegue converter um valor, ele gera um ValueError. Esse é o erro mais comum que os iniciantes encontram ao trabalhar com conversão de tipos.

É como tentar traduzir uma palavra que não existe no outro idioma. O Python olha o valor, tenta convertê-lo e diz: "não faço ideia de como transformar isso em número".

Exemplos comuns de ValueError
# These conversions CRASH with ValueError
# Can't convert words to numbers
try:
print(int("hello"))
except ValueError as e:
print(f"Error 1: {e}")
# int() can't handle decimal strings
try:
print(int("3.14"))
except ValueError as e:
print(f"Error 2: {e}")
# float() can't handle words either
try:
print(float("abc"))
except ValueError as e:
print(f"Error 3: {e}")
Saída
Error 1: invalid literal for int() with base 10: 'hello'
Error 2: invalid literal for int() with base 10: '3.14'
Error 3: could not convert string to float: 'abc'

Aqui vai uma referência rápida do que funciona e do que não funciona:

ConversãoExemploResultado
int("42")String de dígitos42
int("3.14")String com casas decimaisValueError
int("hello")String não numéricaValueError
float("3.14")String com casas decimais3.14
float("abc")String não numéricaValueError
int(float("3.14"))Conversão em dois passos3

Como converter tipos com segurança em Python

Em programas reais, você costuma receber dados de usuários ou de arquivos. Nem sempre dá para confiar que esses dados são um número válido. Se você chamar int() direto em uma entrada inválida, o programa quebra.

O Python oferece duas formas de lidar com isso. Você pode verificar antes de converter, com métodos como .isdigit(), ou pode tentar e capturar o erro com try/except, a mais segura das duas.

Verificando antes com .isdigit()

O método .isdigit() retorna True se todos os caracteres de uma string forem dígitos. É um jeito rápido de verificar uma string antes de convertê-la em inteiro.

Verificando com .isdigit() antes de converter
# .isdigit() checks if a string contains only digits
print("42".isdigit()) # True
print("3.14".isdigit()) # False - has a dot
print("-7".isdigit()) # False - has a minus sign
print("hello".isdigit()) # False
print("".isdigit()) # False - empty string
# Check before converting
user_input = "42"
if user_input.isdigit():
number = int(user_input)
print(f"Converted: {number}")
else:
print(f"Cannot convert: {user_input}")
Saída
True
False
False
False
False
Converted: 42

Usando try/except para uma conversão segura

O padrão try/except é a forma mais flexível de lidar com conversões. Você tenta fazer a conversão e, se ela falhar, captura o erro e faz outra coisa. Você vai aprender try/except a fundo mais adiante; por enquanto, aqui está o padrão básico.

Conversão segura com try/except
# try/except - the safest approach
def safe_int(value):
try:
return int(value)
except ValueError:
return None
# Works with valid input
print(safe_int("42")) # 42
print(safe_int("100")) # 100
# Returns None for bad input instead of crashing
print(safe_int("hello")) # None
print(safe_int("3.14")) # None
print(safe_int("")) # None
Saída
42
100
None
None
None

Exercícios práticos

Hora de colocar suas habilidades de conversão de tipos à prova. Estes exercícios começam tranquilos e vão ficando mais difíceis. Tente resolver cada um antes de olhar as dicas.

Exercício 1: de string para int e multiplique
Escreva o código

Você tem uma variável string text que contém "42". Converta-a em inteiro e multiplique por 2. Exiba o resultado.

Saída esperada:

84
text = "42"
# Convert text to an integer and multiply by 2
# Print the result
Exercício 2: de float para int: o que se perde?
Escreva o código

Você tem um float price = 9.99. Converta-o em inteiro e exiba o valor original e o convertido, para mostrar o que se perde.

Saída esperada:

Original: 9.99
Converted: 9
Lost: 0.99

Dica: calcule o que se perdeu fazendo uma subtração. Use round() na parte perdida para evitar as esquisitices do ponto flutuante.

price = 9.99
# Convert to int
# Calculate what was lost
# Print all three values
Exercício 3: preveja a saída: conversões de tipos
Preveja a saída

Sem executar o código, preveja o que cada linha vai exibir. Escreva suas previsões como comentários e depois execute para conferir.

Pense com cuidado no truncamento, na conversão para string e nas regras de truthy e falsy.

print(int(3.9)) # Your prediction:
print(float("7")) # Your prediction:
print(str(True)) # Your prediction:
print(bool(0)) # Your prediction:
Exercício 4: corrija o bug: concatenação de string e int
Corrija o erro

Este código tenta montar uma mensagem, mas quebra com um TypeError. Corrija-o para que ele exiba:

You have 3 new messages

Você pode corrigir do jeito que preferir (str(), f-strings etc.).

count = 3
message = "You have " + count + " new messages"
print(message)
Exercício 5: converter apenas os números
Escreva o código

Escreva um código que verifique três strings com .isdigit() e converta em inteiros apenas as que são formadas por dígitos. Para cada string, exiba o número convertido ou "Not a number".

Dado:

values = ["42", "hello", "100"]

Saída esperada:

42
Not a number
100
values = ["42", "hello", "100"]
# Loop through values
# If the value is a digit, convert and print the integer
# Otherwise print "Not a number"

Resumo: conversão de tipos em Python

Aqui está tudo o que você aprendeu sobre conversão de tipos:

FunçãoO que fazExemplo
int()Converte em inteiro (trunca floats)int("42") → 42
float()Converte em floatfloat("3.14") → 3.14
str()Converte em stringstr(42) → "42"
bool()Converte em booleanobool(0) → False

Regras principais para lembrar:

  • A conversão implícita só acontece entre tipos numéricos (bool → int → float)
  • int() trunca: não arredonda. Use round() para arredondar
  • int("3.14") dá erro: converta antes com float(), como em int(float("3.14"))
  • Valores vazios e zero são falsy, todo o resto é truthy
  • Use try/except para converter entradas com segurança; .isdigit() é uma primeira verificação rápida para números inteiros simples
  • O que vem a seguir?

    Agora que você sabe converter entre tipos de dados, tem uma habilidade essencial para processar a entrada do usuário e criar programas de verdade. No próximo tutorial, você vai aprender a escrever código Python limpo e legível, que outros desenvolvedores (e você mesmo no futuro) vão agradecer.

    Tutoriais relacionados

    Este tutorial foi útil?