Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Conversão de float para inteiro

Inserir o float para verificar caso o usuário digite um número decimal, o programa consiga informar que é necessário um tipo inteiro.

Mas, quando o usuário digita um número decimal com vírgula, o seguinte erro aparece no terminal: ValueError: could not convert string to float: '12,9'. Como posso resolver isto? Já tentei com o Int no local do float, mas ele não converte e gera erro se o usuário digitar número decimal com vírgula ou ponto.

classifica_idade = float(input('Digite sua idade: '))

if classifica_idade % 1 != 0:
    print('idade inválida, digite um número inteiro')
elif 0 <= classifica_idade <= 12:
    print('Criança')
elif 13 <= classifica_idade <= 18:
    print('Adolescente')
elif classifica_idade > 18:
    print('Adulto')
else:
    print('Idade inválida, digite novamente')
2 respostas

Oi Iuri, o problema está no formato do número. Essas funções de conversão de tipo esperam que o número dentro da string esteja no formato americano, então o número precisa ter um ponto ao invés de uma vírgula entre a parte inteira e a parte decimal.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

No exemplo que coloquei depois do erro, estou fazendo primeiro uma substituição de vírgula para ponto dentro da string e depois fazendo a conversão. Vc pode fazer isso depois do seu input para garantir que vírgulas não serão um problema.

a = '12.5'
b = '12,5'
a = float(a.replace(',','.'))
b = float(b.replace(',','.'))
print('a', a)
print('b', b)
solução!

Olá Iuri, conseguiu resolver seu problema?

A sugestão do Gil foi ótima, substituir vírgula por ponto.

Ou, você pode simplesmente colocar uma mensagem de orientação para o usuário, algo como "utilize ponto no lugar de vírgula", etc. Essas orientações são soluções comuns, mais perceptíveis quando estamos preenchendo algum formulário.

Exemplo: um formulário de dados pessoais onde o campo "CPF" aceita apenas números, sem os pontos e o traço, constando instrução em algum lugar próximo ao campo com um texto tipo "digite apenas números".

O ônus dessa solução é ter que tratar o erro caso o usuário não siga sua orientação. Para isso, sugiro dar uma olhadinha em tratamento de exceções aqui e aqui, especificamente sobre ValueError.