Como converter tipos de dados em Python 3

Introdução

Na linguagem Python, os tipos de dados são usados para classificar um tipo específico de dados, determinando os valores que você pode atribuir ao tipo e as operações que você pode realizar nele. Ao programar, há momentos em que será necessário converter valores entre os no tipos, no intuito de manipular tais valores de maneira diferente. Por exemplo, talvez seja necessário concatenar valores numéricos com strings, ou representar casas decimais em números que foram inicializados como valores de número inteiro.

Este tutorial irá ensinar a converter tipos de dados, incluindo números, strings, tuplas e listas, bem como fornecer exemplos para ajudar você a familiarizar-se com diferentes casos de uso.

Convertendo os tipos de número

Em Python, existem dois tipos de dados numéricos: inteiros e números de ponto flutuante (float). Às vezes, ao trabalhar no código de outra pessoa, será necessário converter um inteiro para um float ou vice-versa. Em outros casos, você pode estar usando um inteiro quando o que realmente precisa é de um float. O Python possui métodos integrados para permitir a conversão de inteiros em floats e floats em inteiros.

Convertendo os números inteiros em floats

O método float() do Python irá converter inteiros em floats. Para usar essa função, adicione um inteiro dentro dos parênteses:

float(57) 

Neste caso, 57 será convertido em 57.0.

Também é possível usar essa técnica com uma variável. Vamos declarar f como igual a 57, e então imprimir o novo float:

f = 57 print(float(f)) 
Output57.0 

Usando a função float(), podemos converter inteiros em floats.

Convertendo floats em inteiros

O Python também possui uma função integrada para converter floats em inteiros: int().

A função int() funciona de maneira semelhante à função float(): é possível adicionar um número de ponto flutuante dentro dos parênteses para convertê-lo em um inteiro:

int(390.8) 

Neste caso, 390.8 será convertido em 390.

Você também pode usar essa técnica com as variáveis. Vamos declarar b como igual a 125.0, e c como igual a 390.8, e então imprimir os novos floats:

b = 125.0 c = 390.8  print(int(b)) print(int(c)) 
Output125 390 

Ao converter os floats em inteiros com a função int(), o Python corta a casa decimal e os números do float que restam são usados para criar um inteiro. Embora talvez você queira arredondar 390,8 para 391, o Python não fará isso através da função int().

Números convertidos através de divisão

Em Python 3, quocientes relevantes são convertidos de inteiros para floats ao fazer uma divisão, embora não sejam em Python 2. Ou seja, quando você dividir 5 por 2, em Python 3, você receberá um float como resposta (2.5):

a = 5 / 2 print(a) 
Output2.5 

Em Python 2, como você estava lidando com dois inteiros, você receberia um inteiro de volta como sua resposta: 5 / 2 = 2. Leia “Python 2 vs Python 3: considerações práticas“ para mais informações sobre as diferenças entre o Python 2 e Python 3.

Convertendo com as strings

Uma string é uma sequência de um ou mais caracteres (letras, números ou símbolos). As strings são uma forma comum de dados em programas de computador. Muitas vezes, pode ser necessário converter strings em números e números em strings, especialmente quando estivermos incluindo dados gerados pelo usuário.

Convertendo números em strings

Podemos converter números em strings usando o método str(). Vamos passar um número ou uma variável dentro dos parênteses do método e então esse valor numérico será convertido em um valor de string.

Primeiro, vamos ver como converter inteiros. Para converter o inteiro 12 em um valor de string, passe o número 12 para o método str():

str(12) 

Ao executar str(12) no shell interativo do Python com o comando python em uma janela de terminal, você receberá o seguinte resultado:

Output'12' 

As aspas ao redor do número 12 significam que o número já não é mais um inteiro, mas sim um valor de string.

Com variáveis, podemos começar a ver como é prático converter inteiros em strings. Vamos supor que queiramos monitorar o progresso diário de um usuário na programação e estamos inserindo quantas linhas de código eles estão escrevendo por vez. Queremos mostrar esse feedback para o usuário. Para tanto, os valores de string e inteiro serão impressos ao mesmo tempo:

user = "Sammy" lines = 50  print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.") 

Ao executar este código, iremos receber o seguinte erro:

OutputTypeError: Can't convert 'int' object to str implicitly 

Não é possível concatenar strings e inteiros em Python, de modo que teremos que converter a variável lines para se tornar um valor de string:

user = "Sammy" lines = 50  print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.") 

Agora, ao executar o código, iremos receber o resultado a seguir, parabenizando o usuário pelo progresso alcançado:

OutputCongratulations, Sammy! You just wrote 50 lines of code. 

Se quisermos converter um float em uma string, ao invés de um inteiro em uma string, seguimos os mesmos passos e formatos. Ao passar um float no método str(), um valor de string do float será retornado. Podemos usar o valor do float em si ou uma variável:

print(str(421.034))  f = 5524.53 print(str(f)) 
Output421.034 5524.53 

Vamos fazer um teste para garantir que tudo está correto, fazendo a concatenação com uma string:

f = 5524.53 print("Sammy has " + str(f) + " points.") 
OutputSammy has 5524.53 points. 

Agora, temos certeza de que o float foi convertido corretamente em uma string, pois a concatenação foi realizada sem nenhum erro.

Convertendo strings em números

As strings podem ser convertidas em números usando os métodos int() e float().

Se sua string não tiver casas decimais, você provavelmente vai querer convertê-la em um número inteiro, usando o método int().

Vamos usar o exemplo do usuário Sammy, monitorando as linhas de código escritas a cada dia. Pode ser que queiramos manipular esses valores com operações matemáticas, no intuito de dar um feedback mais interessante para o usuário. Porém, no momento, tais valores estão armazenados em strings:

lines_yesterday = "50" lines_today = "108"  lines_more = lines_today - lines_yesterday  print(lines_more) 
OutputTypeError: unsupported operand type(s) for -: 'str' and 'str' 

Como os dois valores numéricos foram armazenados em strings, um erro foi emitido. O operando - para a subtração não é um operando válido para dois valores de string.

Modifique o código para incluir o método int() que converterá as strings em inteiros, permitindo, assim, fazer operações matemáticas com os valores que eram originalmente strings.

lines_yesterday = "50" lines_today = "108"  lines_more = int(lines_today) - int(lines_yesterday)  print(lines_more) 
Output58 

A variável lines_more é automaticamente um inteiro, sendo igual ao valor numérico de 58 neste exemplo.

Também é possível converter os números no exemplo acima em valores float usando o método float() no lugar do método int(). Em vez de receber o resultado de 58, iremos receber o resultado de 58.0, um float.

O usuário Sammy está ganhando pontos em valores decimais.

total_points = "5524.53" new_points = "45.30"  new_total_points = total_points + new_points  print(new_total_points) 
Output5524.5345.30 

Neste caso, usar o operando + com duas strings é uma operação válida, mas irá concatenar duas strings ao invés de fazer a adição de dois valores numéricos. Então, nosso resultado parece não convencional, pois apenas coloca os dois valores um ao lado do outro.

Precisamos converter essas strings em floats antes de executar qualquer operação matemática com o método float():

total_points = "5524.53" new_points = "45.30"  new_total_points = float(total_points) + float(new_points)  print(new_total_points) 
Output5569.83 

Agora que convertemos as duas strings em floats, recebemos o resultado esperado que adiciona 45.30 a 5524.53.

Se tentarmos converter um valor de string com casas decimais em um inteiro, iremos receber um erro:

f = "54.23" print(int(f)) 
OutputValueError: invalid literal for int() with base 10: '54.23' 

Se passarmos um valor decimal em uma string para o método int(), iremos receber um erro, pois ele não será convertido em um inteiro.

Converter strings em números nos permite modificar rapidamente o tipo de dados com o qual estamos trabalhando para que possamos realizar operações com valores numéricos que eram originalmente strings.

Convertendo em tuplas e listas

Os métodos list() e tuple() podem ser usados para converter os valores passados a eles nos tipos de dados lista e tupla respectivamente. Em Python:

  • uma lista é uma sequência ordenada mutável de elementos que fica contida dentro de colchetes [ ].
  • uma tupla é uma sequência ordenada imutável de elementos contida dentro de parênteses ( ).

Convertendo em tuplas

Vamos começar com a conversão de uma lista em uma tupla. Converter uma lista em uma tupla, que é um tipo de dados imutável, pode permitir uma otimização substancial aos programas que criamos. Quando usamos o método tuple(), ela irá retornar a versão em tupla do valor passado a ele.

print(tuple(['pull request', 'open source', 'repository', 'branch'])) 
Output('pull request', 'open source', 'repository', 'branch') 

Vemos que uma tupla foi impressa no resultado, pois os itens estão agora contidos dentro de parênteses ao invés de colchetes.

Vamos usar tuple() com uma variável que representa uma lista:

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp'] print(tuple(sea_creatures)) 
Output('shark', 'cuttlefish', 'squid', 'mantis shrimp') 

Novamente, vemos que o valor de lista foi alterado para um valor de tupla, indicado pelos parênteses. Podemos converter qualquer tipo iterável em uma tupla, incluindo strings:

print(tuple('Sammy')) 
Output('S', 'a', 'm', 'm', 'y') 

Considerando que é possível iterar em strings, podemos convertê-las em tuplas com o método tuple(). Entretanto, com tipos de dados que não são iteráveis, como inteiros e floats, iremos receber um erro do tipo:

print(tuple(5000)) 
OutputTypeError: 'int' object is not iterable 

Embora seja possível converter um inteiro em uma string, para então converter em uma tupla, como em tuple(str(5000)), é melhor escolher um código legível ao invés de conversões complicadas.

Convertendo em listas

Converter valores, especialmente tuplas, em listas, pode ser útil quando for necessário ter uma versão mutável desse valor.

Vamos usar o método list() para converter a tupla a seguir em uma lista. Como a sintaxe para criar uma lista usa parênteses, certifique-se de incluir os parênteses do método list() e, neste caso, também o método print():

print(list(('blue coral', 'staghorn coral', 'pillar coral'))) 
Output['blue coral', 'staghorn coral', 'pillar coral'] 

Os colchetes indicam que uma lista foi retornada a partir do valor de tupla original passado ao método list().

Para tornar o código mais legível, podemos remover um dos pares de parênteses usando uma variável:

coral = ('blue coral', 'staghorn coral', 'pillar coral') list(coral) 

Caso imprimíssemos list(coral), iríamos receber o mesmo resultado que acima.

Assim como as tuplas, as strings podem ser convertidas em listas:

print(list('shark')) 
Output['s', 'h', 'a', 'r', 'k'] 

Aqui, a string 'shark' foi convertida em uma lista, fornecendo uma versão mutável do valor original.

Conclusão

Este tutorial de Python demonstrou como converter vários dos tipos de dados nativos importantes em outros tipos de dados, principalmente através de métodos integrados. Ser capaz de converter tipos de dados em Python fornece uma flexibilidade extra ao escrever seus programas.