]> git.immae.eu Git - perso/Denise/oms.git/blobdiff - calculs_extrapole.py
extrapolation des courbes et calculs associés
[perso/Denise/oms.git] / calculs_extrapole.py
diff --git a/calculs_extrapole.py b/calculs_extrapole.py
new file mode 100644 (file)
index 0000000..ab22502
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Feb 18 18:25:11 2021
+
+@author: sekhmet
+"""
+
+from gestion_erreurs import warning, debug
+from configuration import CONFIG
+from gestion_donnees import convertit_age_vers_texte
+import gestion_unites as u
+
+#### Les fonctions qui permettent de faire les calculs additionnels une fois qu'on a l'extrapolation
+
+def met_s(chaine):
+    """ renvoie un s si pluriel, rien sinon"""
+    if int(chaine)>1:
+        return "s"
+    else:
+        return ""
+
+def joliechaine_age(age):
+    """ prend en argument une chaîne du type 6a3m2j et renvoie une chaîne un peu
+    plus jolie à lire genre 6 ans, 3mois, 2 jours"""
+    retour = ""
+    nombre = ""
+    for char in age:
+        if char=="a":
+            retour+=nombre+" année"+met_s(nombre)+", "
+            nombre=""
+        elif char=="m":
+            retour+=nombre+" mois, "
+            nombre=""
+        elif char=="s":
+            retour+=nombre+" semaine"+met_s(nombre)+", "
+            nombre=""
+        elif char=="j":
+            retour+=nombre+" jour"+met_s(nombre)+", "
+            nombre=""
+        else:
+            nombre+=char
+    #print(retour)
+    return retour[:-2]
+            
+
+
+def calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, age_voulu, typedonnee, liste_err):
+    """ prend en argument les données extrapolées, l'âge voulu en jours,
+    et le type de données qu'on veut afficher, et renvoie une jolie phrase
+    à afficher"""
+    age_voulu = int(age_voulu) # pour avoir les choses bien
+    debug("On veut la donnée à l'âge "+str(age_voulu), liste_err)
+    try:      
+        i_date_voulue = dates_extrapole.index(age_voulu)
+        donnee_voulue = donnees_extrapole[i_date_voulue]
+        donnee_arrondie = u.arrondit_donnee(donnee_voulue, typedonnee)
+        chaine = "À "+joliechaine_age(convertit_age_vers_texte(age_voulu))
+
+        if typedonnee == "poids":
+            return chaine+", l'enfant pèsera "+str(donnee_arrondie)+" kg."
+        elif typedonnee == "taille":
+            return chaine+", l'enfant mesurera "+str(donnee_arrondie)+" cm."
+        else: # phrase générique
+            return chaine+", la donnée sera : "+str(donnee_arrondie)+" "+CONFIG["unites_typedonnees"][typedonnee]+"."
+    except:
+        warning("Impossible de calculer la donnée à l'âge "+age_voulu, liste_err)
+        return ""
+    
+def calcule_age_extrapole(dates_extrapole, donnees_extrapole, donnee_voulue, typedonnee, liste_err):
+    """ prend en argument les données extrapolées, la donnée voulue (dans l'unité adaptée)
+    et son type, et renvoie la jolie phrase à afficher"""
+    
+    debug("On veut savoir à quel âge on a "+str(donnee_voulue), liste_err)   
+    try:
+        i=0
+        while i<len(donnees_extrapole) and donnees_extrapole[i]<donnee_voulue:
+            i+=1
+        
+        age_joli = joliechaine_age(convertit_age_vers_texte(dates_extrapole[i]))
+        if typedonnee=="poids":
+            return "L'enfant atteindra un poids de "+str(donnee_voulue)+" kg à l'âge de "+age_joli+"."
+        elif typedonnee=="taille":
+            return "L'enfant atteindra la taille "+str(donnee_voulue)+ "cm à l'âge de "+age_joli+"."
+        else:# phrase générique
+            return "L'enfant atteindra la donnée "+typedonnee+" "+str(donnee_voulue)+" à l'âge de "+age_joli+"."
+    except:
+        warning("Impossible de calculer l'âge pour la donnée "+str(donnee_voulue), liste_err)
+        return ""