-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhealth_utils.py
46 lines (40 loc) · 1.64 KB
/
health_utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
def normalize_height(height: float) -> float:
"""
Normalise la hauteur au format mètres.
:param height: Hauteur saisie par l'utilisateur (en mètres ou centimètres).
:return: Hauteur en mètres.
"""
if height <= 0:
raise ValueError("La taille doit être un nombre positif.")
return height if height < 10 else height / 100
def calculate_bmi(height: float, weight: float) -> float:
"""
Calcule l'Indice de Masse Corporelle (BMI).
:param height: Taille en mètres.
:param weight: Poids en kilogrammes.
:return: BMI arrondi à 2 décimales.
"""
height = normalize_height(height)
if weight <= 0:
raise ValueError("Le poids doit être un nombre positif.")
return round(weight / (height**2), 2)
def calculate_bmr(height: float, weight: float, age: int, gender: str) -> float:
"""
Calcule le Taux Métabolique de Base (BMR).
:param height: Taille en centimètres ou mètres.
:param weight: Poids en kilogrammes.
:param age: Âge en années.
:param gender: Sexe ('male' ou 'female').
:return: BMR arrondi à 2 décimales.
"""
height = normalize_height(height) * 100 # Convertir en centimètres pour le calcul
if weight <= 0 or age <= 0:
raise ValueError("Le poids et l'âge doivent être des nombres positifs.")
gender = gender.lower()
if gender == "male":
bmr = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age)
elif gender == "female":
bmr = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age)
else:
raise ValueError("Le genre doit être 'male' ou 'female'.")
return round(bmr, 2)