1
resposta

Calculando o IMC

peso = float(input("Digite seu peso (Kg): ").replace(",", "."))
altura = float(input("Digite sua altura (m): ").replace(",", "."))
IMC = peso / (altura ** 2)
print(f"Seu peso: {peso:.2f}kg")
print(f"Sua altura: {altura:.2f}m")
print(f"Seu IMC: {IMC:.2f}")
if IMC < 18.5:
    print("STATUS: Abaixo do peso.")
elif IMC < 25:
    print("STATUS: normal.")
else:
    print("STATUS: Acima do peso")

# USANDO FUNÇÃO
def calculando_imc(peso: float, altura: float) -> float:
    """Calcula o Índice de Massa Corporal."""
    return peso / (altura ** 2)
def classificar_imc(imc: float) -> str:
    """Retorna classificação e status com base no valor do IMC."""
    if imc < 18.5: 
        return f"STATUS: Abaixo do peso. IMC: {imc:.2f}. Recomenda-se avaliação nutricional."
    elif imc < 25: 
        return f"STATUS: Normal. IMC: {imc:.2f}. Continue mantendo hábitos saudáveis."
    else:
        return f"STATUS: Acima do peso. IMC: {imc:.2f}. Atenção a saúde e hábitos alimentares."
try:
    peso_input = input("Digite o peso (Kg): ").replace(",", ".")
    altura_input = input("Digite a altura (m): ").replace(",", ".")
    peso = float(peso_input)
    altura = float(altura_input)
    if peso <= 0 or altura <= 0:
        print("ERRO: Peso e altura devem ter valores maiores que zero.")
    else:
        resultado_imc = calculando_imc(peso, altura)
        print(classificar_imc(resultado_imc))
except ValueError:
    print("ERRO: Entrada inválida! Por favor, digite apenas números.")
1 resposta

Olá Luísa.
Tudo bem?
Sua abordagem está ótima mas há alguns pontos que merecem atenção.
A parte do .replace(",", ".") funciona bem para um contexto simples de estudo, mas existe uma pequena inconsistência conceitual: você está “corrigindo” a entrada antes de validar se ela realmente é um número válido.
O replace() apenas troca caracteres, ele não valida nada.
Exemplo:

"70,5" -> "70.5"

funciona corretamente.
Mas:

"1,2,3" -> "1.2.3"

continua inválido e o erro só aparece no float().
Isso não quebra o código porque o try/except captura o ValueError, então para um ambiente básico está aceitável.
A inconsistência é mais lógica do que funcional.
Outro detalhe é que você faz:

peso = float(peso_input)
altura = float(altura_input)

antes da validação:

if peso <= 0 or altura <= 0:

Isso não é exatamente errado, porque primeiro você precisa transformar a string em número para poder comparar com 0.
Porém, existe uma pequena inconsistência na organização do fluxo: a validação depende da conversão, mas ambas estão misturadas dentro do mesmo try.
O problema didático aqui é que o try parece estar tratando também a validação lógica, quando na verdade ele só existe por causa do float().
Além disso, se o objetivo é clareza, o ideal seria deixar explícito que:

  • o try serve apenas para conversão;
  • a validação vem depois.
    Seu código atual:
try:
    peso = float(peso_input)
    altura = float(altura_input)

    if peso <= 0 or altura <= 0:
        print(...)

mistura:

  • conversão;
  • validação;
  • regra de negócio.

Uma forma mais organizada seria:

try:
    peso = float(peso_input)
    altura = float(altura_input)

except ValueError:
    print("ERRO: Digite apenas números.")

else:
    if peso <= 0 or altura <= 0:
        print("ERRO: Peso e altura devem ser maiores que zero.")

Isso deixa o fluxo mais coerente e didático.
Outra inconsistência é que sua função:

calculando_imc()

não valida nada internamente.
Então o programa depende totalmente da validação externa para não ocorrer divisão por zero.
Em um sistema real isso seria uma má prática, porque funções deveriam ser mais protegidas.
Mas para estudo básico isso ainda é aceitável.

Também há uma pequena má prática de nomenclatura:

calculando_imc

soa como ação em andamento.
O padrão em Python normalmente seria:

calcular_imc

porque funções representam ações.
Erros fazem parte do aprendizado, não se preocupe.
Eles que nos ajudam a entender melhor o que está acontecendo por trás do código e a fortalecer o conhecimento com mais consistência ao longo do tempo. O importante é continuar praticando e observando esses detalhes com calma, porque é assim que a evolução acontece de forma natural.
Se surgir qualquer dúvida, pode me avisar.
Bons estudos.