Conversão de tipos
Teoria
Pra que converter tipos?
Fala aí, galera! Beleza? Hoje eu vim te contar que, em Python, as vezes não dá pra fazer as operações que a gente quer com os tipos de dados que a gente já tem. Lembra que quando a gente usa o operador de divisão (/) em números inteiros, os dados são automaticamente convertidos pra real (com um “.” no número)? Então! Isso acontece porque, geralmente, o resultado da sua divisão vai ser um número não inteiro, e aí Python faz essa conversão automática pra facilitar nossa vida.
Porém, tem casos onde a gente precisa fazer manualmente. Quer ver? Vem comigo! imagina que você quer fazer um programa que pergunta pro usuário um valor numérico, tipo assim:
Se tu executar esse programa, o resultado pode te surpreender! hahaha
Cara, quando o usuário digita a idade, a nossa variável chamada “idade” recebe esse valor digitado, porém, no formato de texto (string). Quando a gente tenta multiplicar por 3 na linha de baixo, o resultado é que o TEXTO é triplicado. Porém, não era isso que a gente esperava, né?
A gente esperava que fosse feita uma operação matemática. Pra fazer operações matemáticas a gente precisa que nossos dados sejam numéricos, e não texto, beleza?!
Nesse caso, como a idade da pessoa com certeza é um número inteiro, vamos converter esse valor pra inteiro.
Obs: a gente vai usar inteiro em vez de real, porque ninguém tem casas decimais na idade! hahaha
Viu?! Agora o resultado vai ser o que a gente espera! Uma operação matemática vai ser feita ali no print, e não uma triplicação de texto.
Repara que a função que a gente usou pra converter a saída da função input() pra inteiro é justamente o nome do tipo, int. Isso acontece em todos os tipos. Olha a tabelinha com ALGUMAS funções de conversão aqui embaixo:
Essa tabelinha mostra algumas das funções, mas não todas. Além disso, a gente ainda não viu todos os tipos que têm nessa tabelinha, mas vamos ver ainda. É importante tu notar que a lógica é a mesma, beleza?
Compatibilidade dos tipos
Também queria que você reparasse que não importa qual o tipo de dado que a gente coloca dentro dessas funções. Desde que seja compatível, vai funcionar! Quer ver? Olha:
A gente converteu o texto “45” pra inteiro (relembrando que tudo que estiver entre aspas é considerado como do tipo texto (string) pro python, beleza?). Aí gente converteu o texto “2” pra um número real e depois a gente converteu o resultado da multiplicação do inteiro 45 pelo real 2.0 pra texto de novo, e uniu com outro texto, “3.14”.
Olha o resultado doido que a gente vai obter depois de executar esse código:
Repara bem que o resultado é a junção de “90.0” com “3.14”.
Mas o que aconteceria se a gente tentasse converter uma palavra pra inteiro?!
Vamos tentar!
Nesse código a gente tá tentando converter um texto pra número inteiro, mas se você tentar executar, vai ver que vai dar erro! Isso é porque Python não sabe como representar “uma-palavra” como número (na verdade, a gente também não sabe hahah).
Então cuidado com isso, viu?
Conversão de string pra float
As suas conversões têm que ser compatíveis. Um dos principais erros que a gente encontra quando sua conversão de tipo é usando número real com vírgula. Olha esse exemplo:
O resultado disso é um erro! Esse código não vai funcionar, porque a gente tá tentando converter pra real um número com “,” (vírgula), mas cara, em os números decimais são representados por pontos “.”, beleza?! Você precisa usar ponto quando for digitar textos com números decimais.
A gente pode fazer várias coisas com as conversões de tipo, mas as principais que a gente vai estar sempre usando são as de números pra texto, com str(), e de texto pra números, com int() e float(), beleza?
Bora fazer exercício! Te espero lá!
Compatibilidade dos tipos
Exercícios Resolvidos
Exercício Resolvido #1
PUC-Rio
Escreva um programa que leia o primeiro termo de uma progressão aritmética (PA), sua razão(r) e um número inteiro n. Em seguida, calcule e exiba o n-ésimo termo (t) dessa PA.
Passo 1
Fala aí! Como primeiro passo, a gente precisa pedir os dados de entrada pro usuário. Nesse caso, a razão, o primeiro termo e o n. Sempre que a gente precisa pedir algo pro usuário, usamos a função input(), beleza?!
Mas tem um problema com esse código. Cara, sem que a gente chama a função input(), ele trás o que o usuário escrever em forma de texto (string). Mas acontece que aqui a gente quer que sejam números, porque a gente vai fazer conta com esses dados! Então precisamos converter os tipos.
Nas variáveis primeiro_termo e razao_pa, vamos converter pra números reais (float). Além disso, precisamos converter também o termo_n. Mas acontece que o termo vai ser um número inteiro (inclusive, tá escrito no enunciado). Então, vamos converter esse pra inteiro!
Beleza! Agora que a gente já tem os dados necessários, nos formatos certos, vamos botar a mão na massa e partir pra conta, no próximo passo.
Passo 2
Show, já temos os dados. Pra gente fazer a conta, vamos precisar da fórmula da PA. Pra nossa alegria, o enunciado deu a fórmula.
Então nossa tarefa é aplicar essa fórmula na próxima linha de código.
Pronto. Agora calculamos o termo e salvamos dentro da variável, de nome “termo”. Repara que a gente só precisou substituir os valores na fórmula. Aplicar fórmulas matemáticas em python costuma ser sempre assim.
Show! A gente só precisa exibir pro usuário o resultado, e faremos isso no passo 3!
Passo 3
Como já temos a resposta, só nos falta exibir pro usuário. Sempre que precisamos exibir algo pro usuário, usamos a função print(). E dessa vez não vai ser diferente.
Se liga que quando a gente usa o input(), a gente precisa se preocupar com o tipo de dado que a função retorna, e converter se for o caso. Mas quando usamos a função print(), não precisamos dessa preocupação, ok?! A função print() faz todas as conversões internamente, então é possível exibir números, textos, listas, etc, sem se preocupar com conversões.
Terminamos mais um exercício! Te espero no próximo, hein..
Resposta
Exercício Resolvido #2
UFF, Lista 1 - Adaptado
Escreva um programa que recebe três inteiros como entrada do teclado e escreva na tela a média, a soma, o produto, usando uma linha para cada resultado.
Passo 1
Fala aí! Precisamos fazer um programa que faz várias coisas com três números. Bom, o nosso primeiro passo é descobrir quais são esses três números inteiros. Vamos fazer isso perguntando pro usuário, usando a função input().
A ideia é essa, mas tem um probleminha nesse código. Lembra que a função input() SEMPRE retorna um texto?! Acontece que a gente precisa converter o resultado da função input() pra um tipo numérico. Nesse caso, como o enunciado diz que é um número inteiro, vamos converter pro tipo de números inteiros, que é o int. A gente pode fazer isso colocando a função input() dentro da função int().
Agora sim! Nós temos, guardados nas variáveis, todos os dados que precisamos pra continuar o desenvolvimento do nosso programa. Então, partiu segundo passo!
Passo 2
No segundo passo, vamos calcular a média, a soma e o produto dos três números.
Beleza, criamos três variáveis chamadas “soma”, “produto” e “media”, e já fizemos os cálculos necessários. Mas eu queria que você percebesse que a gente tá calculando a soma duas vezes. Repara que tanto na variável “soma” quanto na “media” a gente tem o código “numero_1+numero_2+numero_3”. Dessa forma, a gente tá mandando o computador fazer exatamente o mesmo cálculo duas vezes, o que não é legal! A gente tem que aproveitar as contas que já foram feitas sempre que possível, beleza?!
Olha, agora a gente só calculou a soma uma vez, e guardamos na variável “soma”. Quando a gente precisou fazer a mesma conta depois, simplesmente usamos o valor já calculado, que estava guardado dentro da variável “soma”, sacou?! Show!
Vamos ao próximo passo!
Passo 3
Agora a gente precisa exibir os três valores pro usuário, assim como manda o enunciado. Pra exibir coisas pro usuário, sempre podemos contar com a função print().
Como o enunciado manda exibir um por linha, vamos usar três vezes a função print()
E assim finalizamos mais um exercício!!! Te vejo no próximo, meu parceiro!
Resposta
Exercício Resolvido #3
UFU, Lista 1
Leia uma velocidade em km/h (quilômetros por hora) e apresente-a convertida em m/s (metros por segundo). A fórmula de conversão é: M = K/3.6, sendo K a velocidade em km/h e M em m/s.
Passo 1
E aí, meu chegado! Vamos resolver mais uma questão juntinhos?!
Esse exercício fala pra gente ler uma velocidade em quilômetros por hora e exibir em metros por segundo. Bom, antes de tudo, precisamos descobrir qual velocidade a gente precisa converter. Vamos começar perguntando pro usuário!
Mas cê percebeu que falta alguma coisa neste código?! A função input() sempre retorna a entrada do usuário no formato de texto (string). Não tem como a gente fazer operações matemáticas se os dados estiverem no formato de string. Pra resolver isso, vamos usar conversão de tipos! Como a velocidade pode ser qualquer número real, vamos converter pra float (números reais em Python têm o nome de float).
Agora sim! O resultado guardado dentro da variável “velocidade” vai ser do tipo float, então vamos poder fazer contas de boa. Vamos pro segundo passo!
Passo 2
Agora que já sabemos a velocidade em km/h, a gente pode converter pra m/s. Por sorte, o enunciado já deu pra gente a fórmula.
Vamos aplicar ela na próxima linha de código:
Você deve ter sentido falta de uma nova variável. A verdade é que eu não vou usar o valor da velocidade antigo pra nada (em km/h). Daqui em diante, vamos usar só a nova velocidade (em m/s). Por isso, não há a necessidade de criar uma nova variável. A gente pode colocar o novo valor dentro da variável antiga! Depois deste código, a variável “velocidade” vai armazenar o valor da velocidade em m/s.
Show! Partiu fazer o próximo passo…
Passo 3
Agora a gente já tem a velocidade em m/s, então só falta a gente exibir pro usuário. Sempre que precisamos exibir algo pro usuário, usamos a nossa querida e amada função print().
Pronto! Agora o valor dentro da variável “velocidade” vai ser exibido depois de ser calculado. Ufa! Conseguimos!!
Vamos pro próximo exercício?! Te espero lá!
Resposta
Exercício Resolvido #4
Elaboração própria
Escreva um programa que leia um número inteiro e retorne o número multiplicado pela quantidade de dígitos.
Exemplo de entrada: 3141
Saída: 12564
Passo 1
Fala aí, meu chegado! Esse exercício requer uma certa malandragem… Vamo tentar resolver!
Só depois que a gente tiver a entrada do usuário que a gente vai poder continuar o programa e fazer os cálculos. Então se liga, a primeira coisa que a gente tem que fazer é receber o input do usuário. Pra perguntar algo pro usuário a gente usa a função input(), taokey?
Olha, a malandragem tá aí. Tu tá ligado que a função input() sempre retorna a entrada do usuário em forma de texto (string)?! Geralmente, quando a gente quer a entrada em formato de número, a gente já faz a conversão na mesma linha. Mas desta vez foi diferente. A gente guardou o número em forma de texto na variável “numero_string”, e criamos uma variável diferente pra guardar o valor em forma de número inteiro (int). Isso porque a gente vai usar as duas versões. Você vai ver no próximo passo.
Passo 2
Agora que a gente já tem o número, precisamos multiplicar ele pelo número de dígitos. Existem várias formas de descobrir o número de dígitos de um número, mas é muito mais fácil descobrir o número de caracteres em um texto (string). Vamos dar uma pausa no exercício rapidinho pra eu te apresentar a função len().
A função len() retorna a quantidade de caracteres que tem dentro da string que a gente passar como parâmetro. É claro, é possível saber o tamanho de uma string composta só por caracteres numéricos.
Mas só funciona com string e lista, ok?! Se você tentar passar um valor numérico, vai dar ruim!
Agora você deve ter se ligado na malandragem de ter guardado o valor digitado pelo usuário tanto na forma numérica quanto na forma de texto. Assim, a gente consegue saber a quantidade de dígitos usando a string.
Pronto! Agora, dentro da variável “tamanho” a gente tem armazenado a quantidade de dígitos do número. Pra fazer operações matemáticas, precisamos usar a versão numérica do valor.
Agora, dentro da variável “resultado” a gente tem o número multiplicado pela quantidade de dígitos. Mas não acabou ainda, pois precisamos exibir o resultado pro usuário. Mas antes, eu queria te lembrar que questões de programação tem váarias respostas certas, e você podia ter resolvido de outras formas diferentes dessa, ok?! Show! Vamos pro último passo.
Passo 3
Agora que já sabemos a resposta, a gente só precisa exibir pro usuário. Pra exibir pro usuário a gente usa qual função?! Se acertar, você ganha um litrão de Brahma patrocinado pelo Responde Aí.
Isso aí, ela mesma, a função print().
Pronto! Agora vamos executar nosso programinha e testar com o exemplo do enunciado pra ver se roda na moral…
Ufa! Deu a resposta certa… Com isso, concluímos mais um exercício, manoooo!
Te vejo no próximo, hein!
Resposta
Exercício Resolvido #5
Elaboração própria
Você tá na mesa do bar e é sua vez de pagar a rodada pra galera da facul. Tem 12 pessoas, cada uma com um copão de 770ml. Sabendo que você vai parcelar o total em 12x sem juros no cartão, faça um programa que leia o preço do litrão de Brahma, calcule e exiba qual será o preço de cada parcela.
Exemplo de entrada: 11.40
Saída: 9.5
Passo 1
Fala aí! Essa questão tem várias etapas, então tu precisa se ligar pra não deixar passar nenhuma delas, ok?! Primeiramente, vamos começar do começo. Precisamos perguntar ao usuário o preço do litrão! Vamos fazer isso usando a função input().
Mas irmão, tu tem que se ligar que o preço é um número real (tem casas decimais), então a gente precisa converter a entrada do usuário pra float, okay?! Caso não lembre, float é o tipo de variável que consegue guardar números reais. Show! Agora a gente tem uma variável float, chamada “preço”, que tem dentro o preço do litrão. Bora fazer as contas no próximo passo!
Passo 2
Olha, a gente sabe que cada copão tem 770ml, e que tem 12 desses. Então, vamos calcular o total de cerveja que a gente precisa.
Beleza, a gente tem o total de cerveja em ml, mas sabemos o preço da garrafa. Precisamos saber quantas garrafas são necessárias pra ter o total de cerveja. Pra isso, vamos dividir a quantidade em ml pela quantidade por garrafa (1000 ml).
Se liga no que aconteceu aqui! A gente precisa da quantidade de garrafas, logo dividimos o total em ml pelo total em cada garrafa. Mas cara, tu concorda que o número de garrafas precisa ser um número inteiro?! Não dá pra pedir 9.4 garrafas pro garçom. Você precisa pedir um número inteiro de garrafas. Por isso, a gente usou o operador de divisão inteira (//).
Porém, esse operador vai arredondar pra baixo o número de garrafas, ok?! Se você comprar o número de garrafas arredondado pra baixo, alguém vai ficar sem cerveja. Por isso, o certo é arredondar pra cima, nesse caso. Arredondar pra cima é a mesma coisa que arredondar pra baixo e somar 1, ok?!
Beleza, vamos ao próximo passo!
Passo 3
Aqui, a gente já sabe a quantidade de garrafas e o preço de cada garrafa, então a gente já pode calcular o preço total.
Porém, o exercício não pede o preço total, e sim o preço de cada parcela de 12x. Então, vamos calcular o preço de cada parcela!
Beleza! Calculamos… Agora, só precisamos exibir o resultado pro usuário, e vamos fazer isso no próximo passo.
Passo 4
Quando a gente quer exibir algo pro usuário, recorremos a nossa função favorita, print().
Usamos a função print() pra exibir o preço da parcela, e com isso a gente finaliza o exercício. Mas calma, testar é tão importante quanto escrever a resposta. Vamos rodar nosso programa e testar o exemplo que foi dado no enunciado.
Ufa! Deu certo!
Executamos mais uma questão, galera!!! VAMO FAZER MAIS UMA?!
Resposta
Exercício Resolvido #6
UFU, Lista 1
Uma empresa contrata um encanador a R$ 30,00 por dia. Faça um programa que solicite o número de dias trabalhados pelo encanador e imprima a quantia líquida que deverá ser paga, sabendo-se que são descontados 8% para imposto de renda.
Passo 1
E aíii, mano! Se liga, pra começar essa questão, precisamos perguntar quantos dias o encanador trabalhou. E pra fazer uma pergunta pro usuário, vamos usar a função input().
Mas se liga, a função input() sempre retorna texto. Nesse caso, a gente espera que a entrada seja um número inteiro, pra gente conseguir fazer contas. Então, precisamos converter!
Agora sim! Já temos a quantidade de dias trabalhados pelo cara, precisamos calcular o salário dele, e vamos fazer isso right now.
Passo 2
Se o cara recebe R$30,00 por dias trabalhados, e a gente sabe a quantidade de dias que ele trabalhou, precisamos multiplicar.
Show! Agora sabemos o salário bruto do cara. Mas precisamos descontar 8% pra pagar imposto (triste). Pra gente saber o salário final dele, precisamos multiplicar o salário total por 0.92. Isso porque se a gente pegar 100% do salário do cara e DESCONTAR 8%, sobra 92%.
Então, vamos calcular o salário final!
Beleza! Só precisamos exibir o resultado pro usuário agora…
Passo 3
Pra exibir pro usuário, vamos usar a função print(). Se você tá fazendo vários exercícios aqui comigo, deve ter percebido que todos os exercícios de prog seguem um certo padrão. Continua treinando aqui pra gente ficar craque nisso. Você vai conseguir, maninho!
Se liga, chamamos a função print() e dentro colocamos a variável “salario_final”. Agora que acabamos mais um exercício, partiu fazer mais um! Te espero lá!
Resposta
Exercício Resolvido #7
Prova Linguagem Python, Adaptado (2018.2)
Analise o trecho de programa Phyton abaixo e marque a resposta correta:
- Não haverá saída, pois apresenta erro de sintaxe na instrução de saída
- A saída será 1010 em ambos os casos
- A saída será 20 em ambos os casos
- A saída será 20 e 1010
- A saída será 1010 e 20
Passo 1
E aí! Vamos analisar uma alternativa de cada vez, até a gente achar a verdadeira, ok?!
Primeiramente, não há nenhum erro de sintaxe, então a alternativa A é falsa.
Vamos ver a b?
Passo 2
Na alternativa b, não há como resultar 1010 na soma de 10 com 10, na última linha. Então, essa aqui é falsa também.
Passo 3
Cara, essa aqui que é perigosa. Na alternativa C, acontece que quando você usa o operador de soma em dois textos, o resultado é a união deles. Nesse caso, a operação “10” + “10” resulta em “1010”. Operações com texto são diferentes de operações com números, okay?!
Passo 4
Na alternativa d, tá dizendo que o resultado de “10” + “10” é 20 e que 10+10 é “1010”. Na verdade, era pra ser justamente o contrário disso!
Vamos ver a próxima!
Passo 5
Na alternativa E, tá dizendo que o resultado de “10” + “10” é “1010” e que 10+10 é 20. E é isso mesmo, tá certo!
Essa é a alternativa correta.
Resposta
Alternativa E.
Exercício Resolvido #8
PUC-Rio, Lista 5
Escreva um programa para calcular e exibir a redução do tempo de vida (em número de dias) de um fumante. Leia a quantidade de cigarros fumados por dia e quantos anos ele já fumou. Considere que um fumante perde 10 minutos de vida a cada cigarro fumado.
Passo 1
Fala, meu padrinho! Tudo certo por estas bandas? Bora resolver mais um exercício.
Cara, a primeira coisa que a gente vai fazer aqui é ler os dados do usuário. Sempre que tiver que ler dados do usuário no exercício, é a primeira coisa que vamos fazer, okay?!
Pra ler dados do usuário a gente usa a função input(). Mas a função input(), por padrão, sempre retorna um dado do tipo texto (string). Como a gente espera um dado numérico (número de dias), a gente precisa converter.
Fizemos a conversão utilizando a função input() dentro da função int(). Isso garante que, no final, as duas variáveis recebam o valor no formato numérico. Agora que a gente tem a quantidade de cigarros por dia e o tempo de fumo em anos, a gente pode começar a fazer os contas!
Passo 2
Primeiro, precisamos saber quantos cigarros já foram fumados. Mas repara que em uma variável a gente tem dados em dias, e na outra, anos. Vamos converter o tempo de fumo pra dias também.
Agora, a gente tem a quantidade de cigarros por dia e o número de dias. Vamos multiplicar os dois pra saber o número de cigarros já fumados.
Agora, precisamos converter esse número de cigarros consumidos pra tempo de vida. O enunciado traz a relação de 10 minutos de vida perdidos a cada cigarro consumido. Com isso, vamos criar a nova variável pra armazenar a quantidade de minutos de vida perdidos.
Show! Pra finalizar, repara também que o enunciado especifica que a saída deve ser em dias de vida a menos. Por enquanto, a gente tem esse valor em minutos. Pra fazer a conversão, precisamos saber quantos minutos tem em um dia.
Beleza! Dividimos o número de minutos pela quantidade de minutos que tem em um dia. Assim, convertemos nosso dado de minutos pra dias. Agora, a gente só precisa exibir pro usuário.
Passo 3
Pra exibir o resultado das nossas contas pro usuário, vamos usar a função print().
Assim, a gente finaliza mais um exercício! Vamos pro próximo!! Te espero lá, doido.