Anna Júlia está criando um sistema para calcular o Índice de Massa Corporal (IMC) e fornecer recomendações básicas. O programa deve receber o peso e a altura de uma pessoa e exibir o valor do IMC, além de indicar se está abaixo do peso, com peso normal ou acima do peso. Crie um programa que receba o peso (em kg) e a altura (em metros) e calcule o IMC usando a fórmula: IMC = peso / (altura ** 2) Depois, exiba o valor do IMC e uma mensagem indicando se está abaixo do peso (IMC < 18.5), peso normal (18.5 <= IMC < 25) ou acima do peso (IMC >= 25).
fui buscar um modelo que pudesse avalair outras variaveis
import json, math, os
from datetime import datetime
H = "historico_imc.json"
def c_h():
try:
with open(H) as f: return json.load(f)
except: return []
def s_h(d):
with open(H, "w") as f: json.dump(d, f, indent=4)
def p_g(s, c, p, q=None, a=None):
if a is None: raise ValueError("Altura em cm obrigatoria")
if s == "masculino":
if c <= p: raise ValueError("Cintura deve ser > pescoço")
return 86.010 * math.log10(c - p) - 70.041 * math.log10(a) + 36.76
else:
if q is None: raise ValueError("Quadril obrigatorio para mulheres")
s = c + q - p
if s <= 0: raise ValueError("Soma (cintura+quadril-pescoço) deve ser > 0")
return 163.205 * math.log10(s) - 97.684 * math.log10(a) - 78.387
def c_g(p, s):
if s == "masculino":
return "Atleta (muito baixo)" if p < 6 else "Excelente" if p < 13 else "Bom" if p < 17 else "Regular" if p < 25 else "Alto (obesidade)"
return "Atleta (muito baixo)" if p < 14 else "Excelente" if p < 20 else "Bom" if p < 24 else "Regular" if p < 31 else "Alto (obesidade)"
def c_i(i):
if i < 16: return "Magreza grau III", "Alto risco"
if i < 17: return "Magreza grau II", "Risco moderado"
if i < 18.5: return "Magreza grau I", "Risco leve"
if i < 25: return "Peso normal", "Saude ideal"
if i < 30: return "Sobrepeso", "Atencao"
if i < 35: return "Obesidade grau I", "Risco moderado"
if i < 40: return "Obesidade grau II", "Risco grave"
return "Obesidade grau III", "Alto risco"
def c_r(r, s):
if s == "masculino":
return ("Baixo risco", "") if r < 0.85 else ("Risco moderado", "") if r < 0.95 else ("Alto risco", "")
return ("Baixo risco", "") if r < 0.75 else ("Risco moderado", "") if r < 0.85 else ("Alto risco", "")
def f(s):
while True:
try: return float(input(s))
except: print("Valor invalido. Digite um numero.")
def main():
print("\n" + "=" * 50)
print("CALCULADORA DE IMC AVANCADA")
print("=" * 50)
print("\nDados Basicos:")
p = f("Digite seu peso (kg): ")
a = f("Digite sua altura (m): ")
s = input("Digite seu sexo (masculino/feminino): ").strip().lower()
while s not in ["masculino", "feminino", "m", "f"]:
print("Opcao invalida. Digite 'masculino' ou 'feminino'.")
s = input("Digite seu sexo (masculino/feminino): ").strip().lower()
s = "masculino" if s in ["masculino", "m"] else "feminino"
print("\nCircunferencias (em cm):")
ci = f("Cintura: ")
pe = f("Pescoço: ")
q = f("Quadril: ") if s == "feminino" else None
imc = p / (a ** 2)
ic, ir = c_i(imc)
a_cm = a * 100
try:
pg = p_g(s, ci, pe, q, a_cm)
gc = c_g(pg, s)
except ValueError as e:
print(f"Aviso: {e}")
pg, gc = None, None
r = ci / q if q else None
rc, re = c_r(r, s) if r else (None, None)
print("\n" + "=" * 50)
print("RESULTADOS")
print("=" * 50)
print(f"\nIMC: {imc:.2f}")
print(f" Classificacao: {ic} ({ir})")
if pg: print(f"\nPercentual de Gordura: {pg:.2f}%\n Classificacao: {gc}")
if r: print(f"\nRelacao Cintura-Quadril (RCQ): {r:.2f}\n Risco: {rc}")
if input("\nSalvar no historico? (s/n): ").lower() == "s":
h = c_h()
h.append({"data": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "peso": p, "altura": a, "sexo": s,
"imc": round(imc, 2), "imc_class": ic, "gordura": round(pg, 2) if pg else None,
"gordura_class": gc, "rcq": round(r, 2) if r else None, "rcq_class": rc})
s_h(h)
print(f"Salvo! Total: {len(h)}")
if input("\nVer historico? (s/n): ").lower() == "s":
h = c_h()
if h:
print("\nHISTORICO:")
for i, m in enumerate(h, 1):
print(f"{i}. {m['data']} - IMC: {m['imc']} ({m['imc_class']})")
if m.get("gordura"): print(f" Gordura: {m['gordura']}% ({m['gordura_class']})")
if m.get("rcq"): print(f" RCQ: {m['rcq']} ({m['rcq_class']})")
else: print("Nenhuma medicao salva.")
if __name__ == "__main__":
main()