3
respostas

Dúvida no Desafio 3.9

Olá Alunos e professores, todos bem? Poderiam me ajudar na questão 9 dos desafios.

O que já fiz: Sei que o input sempre me retorna um dado do tipo 'str'. Utilizei o type(), só para confirmar. É uma string. Foi então que tentei o is_integer(), mas pelo fato de ser uma string, da erro. Me restou então converter a entrada para um int. int(input('...')), só que ao digitar qualquer coisa diferente disso da erro de conversão. Tendo que fazer algumas pesquisas para identificar outras formas, me deparei com o isinstance(). Entretanto ele requer um valor já convertido. Então eis a questão; como fazer para identificar o que veio através do input? Qual seria a melhor solução para esse caso?

Enunciado: 9) Escreva um programa que peça um número à pessoa usuária e informe se ele é inteiro ou decimal.

Código:

num = input('informe o número: ')
print(f'O tipo é: {type(num)}')
print(f'Resultado do istance é: {isinstance(num, int)}')

if isinstance(num, int) == True:
  print('número é inteiro')
elif isinstance(num, float) == True:
  print('número é decimal')
else:
  print('opção inválida')

Resultado:

informe o número: 10
O tipo é: <class 'str'>
Resultado do istance é: False
opção inválida
3 respostas

Olá Washington, tudo bem?

Você pode tentar converter a string para um tipo numérico e, em seguida, verificar se é inteiro ou decimal:

num_str = input('Informe o número: ')

try:
    # Tenta converter para float
    num = float(num_str)
    
    # Verifica se é um número inteiro
    if num.is_integer():
        print('O número é inteiro')
    else:
        print('O número é decimal')
except ValueError:
    print('Opção inválida. Por favor, insira um número válido.')

Acima, usamos float() para tentar converter a entrada para um número de ponto flutuante. Se a conversão falhar, o bloco except captura o erro e informa que a entrada é inválida. Caso a conversão seja bem-sucedida, usamos o método is_integer() do tipo float para verificar se o número é inteiro.

Reforço que na Opinião do Instrutor há o gabarito dessa questão, porém ele não faz essa verificação do tipo da entrada, pois esse conteúdo será abordado no próximo curso da formação, Python para Data Science: trabalhando com funções, estruturas de dados e exceções. No gabarito do curso é utilizado o operador de módulo %.

Espero ter ajudado.

Qualquer dúvida, não hesite em compartilhar no fórum.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Olá Monalisa muito obrigado pela resposta. Então está correto fazer essa conversão, estava pensando junto desse um outro cenário para o caso do usuário digitar uma string. Mas com o try, podemos aplicar a resolução no exception, certo?

Oi Washington, tudo bem?

Desde já peço desculpas pela demora em obter um retorno.

Sim, usar o bloco try-except é uma maneira de lidar com a possibilidade de o usuário digitar algo que não seja um número, como uma string. Inclusive, a solução para identificar se o número é inteiro ou decimal após a conversão fica mais robusta com o try-except, que trata o erro de conversão.

Espero ter esclarecido.

Abraços e bons estudos!