Olá, Luiz Fernando. Como vai?
Sua implementação para o cálculo do IMC ficou excelente! Você estruturou o código de forma muito limpa e organizada, separando bem a entrada de variáveis, o processamento e a saída de dados.
Um ponto altíssimo do seu código, que demonstra uma ótima maturidade como desenvolvedor, foi a validação inicial (if peso <= 0 or altura <= 0:). Tratar dados de entrada para evitar erros matemáticos (como a divisão por zero) ou absurdos no mundo real é uma excelente prática de programação que previne bugs no sistema.
A formatação da saída com {imc:.2f} também foi perfeita para exibir o resultado com apenas duas casas decimais.
Para complementar o seu aprendizado e enriquecer o debate sobre as estruturas condicionais no fórum, preparei duas dicas sobre simplificação de lógica e legibilidade de código.
1. Otimização das Condições Combinadas
No seu bloco de classificação do IMC, você usou a seguinte linha:
elif 18.5 <= imc < 25:
Essa sintaxe funciona perfeitamente no Python (que aceita operadores encadeados). Mas, do ponto de vista do fluxo de execução do programa, você pode simplificar essa linha.
Como o Python lê o código de cima para baixo, se o programa chegou até o elif, significa que ele já testou a condição anterior (imc < 18.5) e ela deu falsa. Ou seja, o Python já sabe, por garantia, que o imc é maior ou igual a 18.5.
Portanto, você pode escrever apenas:
elif imc < 25:
O seu código ganha em legibilidade e o interpretador do Python faz uma validação a menos.
2. Expandindo as Classificações (Desafio)
A atividade propõe uma versão resumida com "Acima do peso" para simplificar o exercício de lógica. No entanto, na tabela real da Organização Mundial da Saúde (OMS), a categoria "Acima do peso" se divide em Sobrepeso e vários graus de Obesidade.
Caso queira treinar ainda mais o uso do elif para expandir o seu projeto de TI, veja como ficaria a tabela completa integrada ao seu código:
if imc < 18.5:
print("Classificação: Abaixo do peso")
elif imc < 25:
print("Classificação: Peso normal")
elif imc < 30:
print("Classificação: Sobrepeso")
elif imc < 35:
print("Classificação: Obesidade Grau I")
elif imc < 40:
print("Classificação: Obesidade Grau II")
else:
print("Classificação: Obesidade Grau III (Mórbida)")
Note como a estrutura encadeada de cima para baixo (testando sempre o limite menor) deixa o código limpo, sem a necessidade de usar o operador and em nenhuma das linhas.
Parabéns pelo capricho no visual do terminal e pela atenção dada à validação dos dados! Continue praticando.
Espero que possa ter lhe ajudado!