summaryrefslogtreecommitdiff
path: root/calculs_extrapole.py
blob: ab22502e855d7e74a5b15b943a4445a92a8dbe85 (plain) (blame)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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 ""