Aulas do bloco

← Todas as aulas
Pythonaula 504/08/20261h34

TP1, type() e concatenação de strings

Percorre as questões 8 a 16 do TP1, revisa string/int/float/bool e vírgula no print() e estreia None, coerção implícita int+float, TypeError e conversão com str() para corrigir concatenação, com demonstrações de type() e prorrogação do TP1 para dia 18.

▶ Abrir gravaçãoIniciar exercíciosMédia68/1000/24 exercícios

Para revisar rápido

Resumo da aula

8 pontos
  • type() revela o tipo de um valor, de uma variável ou do resultado de uma expressão.

  • Os tipos básicos desta aula são str, int, float, bool e None.

  • O tipo nasce do valor: 5400 é int e 5400.0 é float; o ponto decimal é o que separa.

  • A divisão com / sempre resulta em float, mesmo entre dois inteiros.

  • Se a conta tiver float, o resultado é float; só entre inteiros (exceto /) o resultado é int.

  • Concatenar string com inteiro gera TypeError; a correção é str(), que não altera a variável original.

  • No print, a vírgula separa argumentos e insere espaço; o + só une strings.

  • O TP1 foi prorrogado para o dia 18; as questões 11 e 12 são as mais difíceis.

Guia de estudo

Tipos básicos e por que eles importam

Cada valor em Python pertence a um tipo, e o tipo define o que aquele valor aceita. Texto é string (str) e se declara entre aspas. Número inteiro é int e se escreve sem ponto decimal. Número com casas decimais é float e usa ponto, nunca vírgula, como separador. O tipo bool tem só True e False, sempre com inicial maiúscula e sem aspas. None marca ausência de valor; type(None) devolve NoneType.

O motivo de estudar tipos agora é simples: o Python aceita bem operação entre valores do mesmo tipo e reclama quando os tipos não combinam. Sem saber o tipo, o erro parece aleatório. O tipo não depende de um rótulo que você cola na variável. Ele nasce do valor. A pergunta da aula deixa isso claro: declarar x com 5400 não faz o Python assumir float. 5400 é int; 5400.0 é float. O ponto decimal é o que separa os dois.

No Python padrão a tipagem é dinâmica. A mesma variável pode receber outro tipo depois. Não há obrigação de fixar o tipo como em TypeScript ou Java, embora existam ferramentas opcionais de tipos. Outro detalhe prático do TP: a variável guarda só o número. A unidade (R$, kg e afins) fica no contexto e precisa ser sinalizada na exibição. No enunciado, 10.000 pode significar dez mil; isso não é float nem valor numérico pronto para o código.

O ponto decimal decide int ou float

x = 5400
y = 5400.0
print(type(x))
print(type(y))

5400 não tem ponto, então x é int. 5400.0 tem ponto, então y é float. O Python não transforma 5400 em float sozinho só porque o número é grande.

Cada variável mostra o próprio tipo

nome = "texto"
idade = 20
gosta_do_elon = False
saldo = 150.5
print(type(nome))
print(type(idade))
print(type(gosta_do_elon))
print(type(saldo))
print(type(None))

nome é str, idade é int, gosta_do_elon é bool, saldo é float e None tem tipo NoneType. True e False vão sem aspas; se fossem texto, o tipo mudaria para str.

A função type()

A função type() responde qual é o tipo de um valor. Ela aceita variável, valor direto ou o resultado de uma expressão. A saída vem no formato <class ‘str’> ou <class ‘int’>. Use type() quando quiser confirmar o que realmente está guardado, não o que você imagina que está guardado.

Na aula, type() foi aplicado a variáveis como nome, idade, gosta_do_elon e saldo, e também a expressões como 2+3. Isso conecta type() às regras da próxima seção: você não precisa adivinhar se 9/3 ficou int ou float; pergunta ao Python.

Em um projeto, type() aparece junto de decisões: horas podem chegar como int, float ou string e cada caso pede um tratamento. O ambiente Deep Note mostra sozinho o resultado da última linha, mesmo sem print. Isso é da ferramenta, não da linguagem. Não escreva x = 10/2 type x. O caminho seguro é print(type(x)) ou guardar o type em outra variável.

type() em valor, variável e expressão

x = 5400
print(type(x))
print(type(2 + 3))
print(type(None))

O primeiro type lê a variável, o segundo lê o resultado da soma e o terceiro lê um valor direto. Em todos os casos a função devolve o tipo, não o conteúdo.

Regras de tipo nas operações aritméticas

Nas contas, o Python faz poucas conversões sozinho. Essa conversão implícita, ou coerção, acontece em operações aritméticas: int somado a float vira float. É uma das poucas conversões automáticas permitidas.

As regras de resultado são três. Operação só entre inteiros resulta em inteiro. Se houver float, o resultado é float. A divisão com / entre inteiros também resulta em float. Por isso type(9/3) é float, type(93) é int e type(90.5) ou type(10*0.5) é float. A divisão sempre dar float foi uma escolha do Python: toda divisão é tratada como fração.

Essas regras pesam no TP1. A questão 11 pede quantas sacas inteiras cabem no limite. Usar a divisão normal e depois round() está errado, porque round arredonda (0.5 ou mais para cima) e pode inventar uma saca a mais. Aplicar int() sobre a divisão normal também não é o caminho indicado. A aula apontou a divisão inteira (//) para ficar só com a parte inteira do quociente. A porcentagem de ocupação da mesma questão sai de uma regra de três entre o peso embarcado e a capacidade total. Não use round para ajeitar 94.54%. A divisão inteira e o resto ficam para a aula de sexta; o símbolo % em Python é o operador de resto, não um atalho pronto de porcentagem.

Quando a expressão tem mais de um cálculo, como na questão 13, coloque parênteses. Parênteses deixam a ordem explícita e evitam resultado certo no tipo e errado no valor.

O tipo do resultado muda com / e com float

print(type(9 / 3))
print(type(9 * 3))
print(type(9 * 0.5))
print(type(10 * 0.5))
print(type(2 + 3))

9/3 vira float mesmo sendo conta exata. 93 e 2+3 ficam int porque só há inteiros e não há divisão. 90.5 e 10*0.5 ficam float porque um dos valores já é decimal.

Concatenação, TypeError e str()

Concatenação é juntar textos com +. Só string com string. Uma frase com o nome da banda e o nome do álbum funciona porque os dois pedaços são str.

Se um pedaço é int, o Python levanta TypeError. Ele recusa misturar string com inteiro na concatenação. O motivo é o mesmo das seções anteriores: operação entre tipos diferentes só é aceita em poucos casos aritméticos, não no +.

A correção é str(). A função transforma int, float, bool ou None em string na hora do uso. Converter o ano para string e colar na frase não é gambiarra; é a solução correta e é boa prática. Gambiarra seria forçar um tipo inadequado que quebra outra conta. str() não muda a variável original: str(saldo) produz um texto temporário e saldo continua float.

A vírgula no print não é concatenação. Ela só separa argumentos e o print coloca espaço entre eles. Se o espaço extra atrapalha, não tente consertar a vírgula: use + depois de converter com str().

Frase só com strings

banda = "Banda"
album = "Album"
frase = banda + " gravou " + album
print(frase)

Os três pedaços são str, então o + une tudo em um único texto. Esse é o caso em que a concatenação funciona direto.

Número entra na frase só depois de str()

ano = 2024
print("Lancamento em " + str(ano))
saldo = 99.5
print(str(saldo))
print(type(saldo))
print(saldo)

Sem str(ano) o + com o texto geraria TypeError. str(saldo) só cria um texto temporário: o type e o valor de saldo continuam float.

Como usar isso no TP1

A aula leu o TP1 das questões 8 a 16 e marcou 11 e 12 como as mais difíceis. A recomendação é resolver primeiro as fáceis e deixar essas duas por último. O TP1 foi prorrogado para o dia 18.

Só o TP1 será lido em aula. TP2 e TP3 não terão essa leitura; o AT será lido com a turma. Quem perdeu aula deve assistir à gravação e ler o guia no template. Dúvidas podem ser enviadas pelo Infinite.online. Na sexta-feira a aula será cheia, das 19h às 20h30, e cobre divisão inteira, resto e o restante do conteúdo.

O recorte desta semana é operadores matemáticos, concatenação e a interação entre int e float. Inserir respostas como comentários no código não é proibido, mas sinalize os valores também no print. Lembretes que evitam erro bobo: ponto é o separador decimal no código; 10.000 no enunciado pode ser dez mil escrito em português; a variável não guarda unidade; parênteses protegem a ordem do cálculo; type() confirma o tipo antes de concatenar ou dividir.

Vírgula no print não é concatenação

idade = 20
print("idade", idade)
print("idade" + str(idade))

A vírgula mostra dois argumentos e coloca um espaço entre eles. O + junta um único texto e só funciona depois de converter o inteiro com str().

Avisos administrativos — 7 recados sobre prazos, regras e funcionamento do curso
  • 01:26:26 TP1 foi prorrogado para o dia 18 para dar mais tempo.
  • 01:30:55 Na sexta-feira a aula será cheia, das 19h às 20h30, e vai cobrir divisão inteira e resto, além do restante do conteúdo.
  • 00:49:15 A leitura em aula será feita apenas do TP1; TP2 e TP3 não serão lidos em aula, mas o AT será lido junto com a turma.
  • 00:49:58 Quem perdeu aula deve assistir à gravação e ler o guia no template; dúvidas podem ser enviadas pelo Infinite.online.
  • 00:48:44 Dúvidas enviadas no Infinite.online serão respondidas até amanhã.
  • 00:08:59 Nesta semana o conteúdo são operadores matemáticos, concatenação e interações entre int e float; na semana que vem entra entrada e saída de dados.
  • 00:47:18 Recomendação para o TP: resolver primeiro as questões fáceis e deixar as questões 11 e 12 para o final, pois são as mais difíceis.
Perguntas de aluno — 12 perguntas respondidas na gravação

Profª, uma dúvida na declaração das variáveis: como regra, se eu definir uma variável X como 5400.00, o python já irá assumi-la como float independente de que eu diga isso no código, certo? 00:14:27 · chat 00:14:17 Não. O tipo é definido pelo valor: 5400 é int, 5400.0 é float; o que separa é o ponto decimal.

tem algum motivo da divisão sempre dar float? mesmo sendo tipo “3” o resultado? 00:20:33 · chat 00:19:28 Foi uma escolha do Python; em JavaScript é diferente. Toda divisão é tratada como uma fração.

Tá errado se usar divisão normal e round? 00:26:04 · chat 00:25:19 Sim. round arredonda e pode dar resultado errado. Use divisão inteira (//) ou math.floor().

Como tirar o espaço entre uma variável e o texto no print? 00:32:32 · chat 00:31:37

Uma dúvida boba: como tirar o espaço entre uma variável e texto no print? Exemplo

"A ocupação máxima do caminhão é de", ocupação_máxima, "%."

A vírgula no print apenas separa argumentos; para controlar o espaçamento use concatenação com +.

posso usar {porcentagem:.2f}%? pra ficar ajustado o valor da porcentagem? 00:32:17 · chat 00:30:57 Pode, mas f-string ainda não foi ensinada e será vista mais adiante.

Python tem como obrigar o tipo da variável, tipo TypeScript? 01:06:26 Não por padrão; Python é tipagem dinâmica. Existem tipos opcionais e ferramentas, mas não é o convencional.

Pode ser x = 10/2 type x? 01:07:38 · chat 01:03:55

x = 10 /2
type(x)

Professora, pode ser assim? Pois vi que a saída fica diferente.

Não recomendo. No Deep Note a última linha é exibida automaticamente, mas isso é comportamento do notebook, não do Python. Use print(type(x)) ou guarde em uma variável.

Devo usar round para arredondar 94.54% na questão 11? 01:09:49 Não. round não é a ferramenta certa; para limitar casas decimais, use format string.

E str converte qualquer tipo em String? 01:24:49 · chat 01:24:48 Não. Converter para o tipo necessário é boa prática e é a única solução para concatenar. Gambiarra é converter para um tipo inadequado que quebra outra operação.

Quando usei vírgula no print, deu certo. Tem problema? 01:25:45 Sim, funciona, mas a vírgula exibe vários valores; não é concatenação. A diferença será explicada melhor depois.

Resto é porcentagem? 00:58:16 Sim, o símbolo % é o operador de resto em Python; a explicação completa fica para a próxima aula.

Pode dar uns exemplos de aplicações práticas do type em um projeto real? Já entendi o que faz mas não consigo imaginar quando seria útil 01:04:08 · chat 01:01:18 Type é usado com estruturas condicionais para decidir o que fazer conforme o tipo do valor; por exemplo, horas podem chegar como int, float ou string e exigem tratamentos diferentes.

Trechos que valem reouvir — 6 momentos que mais rendem uma segunda escuta
  • 00:16:24 — Regras de quando uma operação vira int ou float, com exemplos na tela.
  • 00:57:27 — Como ler a saída de type() para cada tipo de dado.
  • 01:13:22 — Concatenação de strings com + montando uma frase completa.
  • 01:18:07 — Erro de TypeError ao misturar string com inteiro; essencial para entender conversões.
  • 01:22:40 — Solução com str() e por que é boa prática, não gambiarra.
  • 01:27:51 — str() não modifica a variável original; útil para entender conversão temporária.

Glossário da aula

Conceitos

type()

00:57:14

É uma função que mostra o tipo de um valor, como str ou int. É usada para conferir o tipo de variáveis, valores diretos ou resultados de expressões.

string (str)

00:54:03

É o tipo que representa texto e é escrito entre aspas. É usado para guardar palavras e só se junta com outra string.

int (inteiro)

00:54:13

É o tipo que representa números inteiros, sem parte decimal. É usado para contar ou calcular valores exatos sem ponto.

É o tipo que representa números decimais e usa ponto como separador. É usado para valores com casas decimais, como preços ou médias.

bool (booleano)

00:54:33

É o tipo que guarda apenas True ou False, escritos com inicial maiúscula e sem aspas. É usado para representar verdadeiro ou falso.

É um valor especial que indica ausência de valor. É usado quando não há dado e seu tipo é mostrado como NoneType.

conversão implícita / coerção de tipos

00:19:17

É a conversão automática que o Python faz em operações com tipos diferentes, como int + float virando float. É usada porque é uma das poucas conversões automáticas permitidas.

divisão /

00:17:53

É o operador de divisão comum /. É usado para dividir valores e sempre devolve float, mesmo quando divide dois inteiros.

divisão inteira //

00:24:46

É o operador // que devolve só a parte inteira do resultado da divisão. É usado quando precisa contar apenas unidades inteiras que cabem no limite.

regras de resultado em operações aritméticas

00:18:13

É o conjunto de regras que define o tipo do resultado de cálculos. Operação só com int dá int, com float dá float, e divisão com / sempre dá float.

concatenação de strings

01:14:18

É a união de textos feita com o operador +. É usada para juntar duas ou mais strings e só funciona entre strings.

TypeError

01:18:07

É o erro que aparece ao tentar juntar string com inteiro usando +. Acontece porque o Python só permite concatenar string com string.

É a função que converte valores como int, float, bool ou None em string. É usada para permitir concatenação sem alterar a variável original.

É a função que converte um valor para inteiro. É usada para obter inteiros, mas não é a forma correta de resolver divisão quando se busca quociente inteiro.

separador decimal com ponto

00:43:37

É a regra que define que decimais em Python usam ponto como separador. É usada para escrever números com casas decimais corretamente.

separador de milhar

00:11:40

É o ponto usado no texto para indicar milhar, como em 10.000 para dez mil. É usado apenas no enunciado e não representa float no código.

round()

00:26:08

É a função que arredonda números, subindo a partir de 0.5. É usada para aproximar valores, mas não é adequada quando se precisa apenas da parte inteira.

f-string / format string

00:31:08

É o recurso de formatação que permite exibir valores com controle de casas decimais. É usado para deixar a saída de texto mais organizada.

vírgula no print()

00:32:42

É o uso da vírgula dentro do print para separar vários argumentos na mesma linha. É usada para exibir valores com espaço automático, sem ser concatenação.

tipagem dinâmica

01:06:43

É a característica do Python padrão de não exigir tipo fixo para variáveis. É usada porque a variável pode receber qualquer tipo, com ferramentas opcionais para tipos.

Deep Note

01:07:53

É um ambiente de notebook que mostra automaticamente o resultado da última linha sem precisar de print. É usado por ser um comportamento específico dessa ferramenta.

comentários no código

00:30:39

É o uso de comentários no código para registrar respostas. É usado como apoio, mas é recomendado também mostrar os valores com print.

precedência de operadores / parênteses

00:38:07

É o uso de parênteses para definir a ordem correta das operações em expressões. É usado quando há mais de um cálculo na mesma expressão.

regra de três

00:25:53

É o cálculo proporcional usado para achar porcentagem de ocupação. É usado para comparar o peso embarcado com a capacidade total.

variável não armazena unidade

00:12:10

É o princípio de que variáveis guardam só o número, sem unidade como R$ ou kg. É usado porque a unidade deve ser informada na exibição.

operações entre tipos iguais

01:14:53

É a regra de que operações funcionam bem entre valores do mesmo tipo. É usada porque tipos diferentes, como string e int, geram erro.

Prática autocorrigida

Exercícios

0/24 concluídos
  1. Classe de NoneLeia e descarte uma linha. Mostre o tipo de None usando type(). Escreva None sem aspas.faciltype()None
  2. Classe da soma mistaLeia um inteiro e depois um decimal, um por linha. Some-os e mostre somente o tipo da soma usando type().faciltype()conversão implícita / coerção de tiposfloat
  3. Frase com o ano convertidoLeia o nome de um álbum e depois seu ano como inteiro. Use + e str() para mostrar Lancamento em ANO: ALBUM, com os espaços indicados. Preserve o ano como int.facilstr()concatenação de stringsTypeError
  4. Classe da multiplicação com decimalLeia um inteiro e depois um decimal. Multiplique-os e mostre somente o tipo do produto usando type().faciltype()regras de resultado em operações aritméticasfloat
  5. Banda gravou o álbumLeia o nome de uma banda e de um álbum, um por linha. Use + para mostrar BANDA gravou ALBUM, com um espaço antes e depois de gravou.facilconcatenação de stringsoperações entre tipos iguais
  6. Texto do saldo e tipo originalLeia um decimal. Mostre str() desse número e, na linha seguinte, type() da variável original. Não reatribua a variável.facilstr()type()float
  7. Classe da soma de dois inteirosLeia dois inteiros. Some-os e mostre somente o tipo da soma usando type().faciltype()int (inteiro)Soma com operador +
  8. Rótulo colado no inteiro convertidoLeia um rótulo e depois um inteiro. Use + e str() para mostrar o rótulo colado ao número convertido, sem acrescentar espaço.facilconcatenação de stringsstr()TypeError
  9. Prefixo colado no decimal convertidoLeia um prefixo e depois um decimal. Use + para concatenar o prefixo com str() do número convertido, sem acrescentar espaço.facilstr()floatconcatenação de strings
  10. Classe do produto de dois inteirosLeia dois inteiros, multiplique-os e mostre somente o tipo do produto usando type().faciltype()regras de resultado em operações aritméticasint (inteiro)
  11. Texto colado em str(None)Leia uma linha. Mostre o texto lido concatenado com str(None), sem separador.mediaNonestr()concatenação de strings
  12. Frase com str() e tipo original do floatLeia um decimal. Mostre saldo concatenado com str() desse número, sem espaço. Na segunda linha, mostre type() da variável original, sem reatribuí-la.mediastr()floattype()
  13. Classe da soma com decimalLeia um inteiro, some 2.5 e mostre somente o tipo do resultado usando type().mediatype()floatconversão implícita / coerção de tipos
  14. Texto, hífen e False em stringLeia um texto e mostre-o seguido de um hífen e de str(False), sem espaços adicionais. Use o booleano False sem aspas na conversão.mediastr()concatenação de stringsbool (booleano)
  15. Classe do produto mistoLeia um inteiro e um decimal, nessa ordem. Mostre somente o tipo do produto desses valores usando type().mediatype()regras de resultado em operações aritméticasfloat
  16. Quarta e terceira de quatroLeia quatro linhas e descarte as duas primeiras. Mostre a quarta e depois a terceira, uma por linha.mediainput()print()Execução de cima para baixo
  17. Soma de quatro inteirosLeia quatro inteiros, um por linha, e mostre sua soma.mediaint (inteiro)Soma com operador +int()
  18. Meio colado nos extremosLeia três linhas. Mostre as três concatenadas na ordem 2, 1 e 3, sem acrescentar separadores.mediaconcatenação de stringsinput()variável
  19. Quadrado do primeiro menos o segundoLeia dois inteiros. Multiplique o primeiro por ele mesmo, subtraia o segundo e mostre o resultado.mediaintmultiplicaçãosubtração
  20. Quinta e depois a primeiraLeia cinco linhas e mostre somente a quinta e a primeira, nessa ordem, uma por linha.mediainput()execução sequencialvariável
  21. Somente as pares de seisLeia seis linhas e mostre as posições 2, 4 e 6, nessa ordem, uma por linha. Descarte as demais.dificilinput()execução sequencialdescarte de leitura
  22. Média de três inteirosLeia três inteiros e mostre a média aritmética: a soma dos três dividida por 3.dificilintdivisão /float
  23. Dois inteiros colados como textoLeia dois inteiros. Converta cada um com str() e use + para mostrá-los concatenados, sem espaço.dificilstr()concatenaçãoint
  24. Primeira vai para o fimLeia quatro linhas e mostre-as na ordem 2, 3, 4 e 1, uma por linha.dificilinput()reordenaçãovariável