Fácil Python

Descobrindo tipos

Enunciado

Crie uma variável valor e atribua a ela, em sequência, um int, um float, uma str e um bool. Para cada atribuição, imprima o valor e o resultado de type(valor).

Requisitos

  • Usar uma única variável chamada valor.
  • Imprimir valor e tipo em cada uma das 4 atribuições.
  • A saída deve mostrar exatamente os tipos int, float, str e bool.

Código inicial

valor = 42
print(valor, type(valor))
# continue com float, str e bool

Saída esperada

42 <class 'int'>
3.14 <class 'float'>
'Python' <class 'str'>
True <class 'bool'>
Ver dica

Lembre-se de que True e False são escritos com maiúscula em Python.

Mostrar solução
# Atribuímos valores de tipos diferentes à mesma variável.
valor = 42
print(valor, type(valor))      # int

valor = 3.14
print(valor, type(valor))      # float

valor = "Python"
print(valor, type(valor))      # str

valor = True
print(valor, type(valor))      # bool

Passo a passo

  1. Começamos com valor = 42: o nome valor passa a apontar para um objeto int.
  2. print(valor, type(valor)) mostra o valor e a classe exata retornada por type.
  3. Reatribuímos valor = 3.14; como a tipagem é dinâmica, o nome agora aponta para um float.
  4. Em seguida valor = "Python" faz o mesmo nome apontar para uma str.
  5. Por fim valor = True aponta para um bool; note que True é a forma correta (não true).

Por que funciona

Cada atribuição cria um novo objeto e faz o nome valor referenciá-lo. O interpretador não guarda um tipo fixo para o nome, apenas para o objeto. Por isso type(valor) muda a cada linha.

Erros comuns

  • Escrever true ou false minúsculos: gera NameError, pois Python usa True / False.
  • Esquecer as aspas em Python: NameError: name 'Python' is not defined.
  • Usar == para comparar tipos em vez de is não é o erro aqui, mas cuidado: type(valor) == int funciona; isinstance é mais flexível.

Outra forma de resolver

Poderíamos usar uma lista e um laço:

for valor in [42, 3.14, "Python", True]:
    print(valor, type(valor))

É preferível quando há muitos valores e não precisamos reutilizar o nome depois.

Saída esperada

42 <class 'int'>
3.14 <class 'float'>
'Python' <class 'str'>
True <class 'bool'>