BMI-Calculator / app.py
SabaAnver's picture
Create app.py
b8c6e73 verified
# app.py
# Simple BMI Calculator - Hugging Face Space (Gradio)
# No pip installs here — just define your Gradio app.
import gradio as gr
def weight_to_kg(weight, unit):
if unit == "kg":
return weight
elif unit == "lb":
return weight * 0.45359237
else:
return None
def height_to_m(height, unit):
if unit == "m":
return height
elif unit == "cm":
return height / 100.0
elif unit == "in":
return height * 0.0254
elif unit == "ft":
return height * 0.3048
else:
return None
def bmi_category(bmi):
if bmi < 18.5:
return "Underweight"
elif bmi < 25:
return "Normal weight"
elif bmi < 30:
return "Overweight"
else:
return "Obesity"
def calculate_bmi(weight, weight_unit, height, height_unit, decimals):
# Basic validation
if weight is None or height is None:
return "⚠️ Please enter both weight and height."
try:
weight = float(weight)
height = float(height)
except:
return "⚠️ Please enter numeric values for weight and height."
if weight <= 0:
return "⚠️ Weight must be greater than zero."
if height <= 0:
return "⚠️ Height must be greater than zero."
kg = weight_to_kg(weight, weight_unit)
m = height_to_m(height, height_unit)
if kg is None or m is None:
return "⚠️ Invalid unit selected."
if m <= 0:
return "⚠️ Converted height must be greater than zero."
bmi = kg / (m * m)
try:
decimals = int(decimals)
except:
decimals = 2
bmi_str = f"{bmi:.{decimals}f}"
category = bmi_category(bmi)
note = (
"ℹ️ Note: BMI is a rough estimate and may be inaccurate for athletes, "
"children, elderly people, or pregnant individuals. For medical advice, consult a professional."
)
return f"✅ BMI = {bmi_str} kg/m² — {category}\n\n{note}"
with gr.Blocks(title="Simple BMI Calculator") as demo:
gr.Markdown("# 🧮 Simple BMI Calculator\nEnter weight and height, choose units, and click **Calculate**.")
with gr.Row():
weight = gr.Number(label="Weight", value=70)
weight_unit = gr.Dropdown(["kg", "lb"], value="kg", label="Weight unit")
with gr.Row():
height = gr.Number(label="Height", value=170)
height_unit = gr.Dropdown(["cm", "m", "in", "ft"], value="cm", label="Height unit")
decimals = gr.Slider(0, 5, value=2, step=1, label="Decimal precision")
calc_btn = gr.Button("Calculate BMI")
output = gr.Textbox(label="Result", lines=6)
calc_btn.click(fn=calculate_bmi, inputs=[weight, weight_unit, height, height_unit, decimals], outputs=output)
gr.Examples(
examples=[
[70, "kg", 170, "cm", 2],
[50, "kg", 160, "cm", 2],
[200, "lb", 72, "in", 2],
[90, "kg", 1.8, "m", 2],
],
inputs=[weight, weight_unit, height, height_unit, decimals],
label="Examples (click to fill)"
)
# When Spaces runs this file it will serve the Gradio app automatically.
if __name__ == "__main__":
demo.launch()