faq et divers
[perso/Denise/oms.git] / calculs_extrapole.py
CommitLineData
cf0d4c8c
DL
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3"""
4Created on Thu Feb 18 18:25:11 2021
5
6@author: sekhmet
7"""
8
9from gestion_erreurs import warning, debug
10from configuration import CONFIG
11from gestion_donnees import convertit_age_vers_texte
12import gestion_unites as u
13
14#### Les fonctions qui permettent de faire les calculs additionnels une fois qu'on a l'extrapolation
15
16def met_s(chaine):
17 """ renvoie un s si pluriel, rien sinon"""
18 if int(chaine)>1:
19 return "s"
20 else:
21 return ""
22
23def joliechaine_age(age):
24 """ prend en argument une chaîne du type 6a3m2j et renvoie une chaîne un peu
25 plus jolie à lire genre 6 ans, 3mois, 2 jours"""
26 retour = ""
27 nombre = ""
28 for char in age:
29 if char=="a":
30 retour+=nombre+" année"+met_s(nombre)+", "
31 nombre=""
32 elif char=="m":
33 retour+=nombre+" mois, "
34 nombre=""
35 elif char=="s":
36 retour+=nombre+" semaine"+met_s(nombre)+", "
37 nombre=""
38 elif char=="j":
39 retour+=nombre+" jour"+met_s(nombre)+", "
40 nombre=""
41 else:
42 nombre+=char
43 #print(retour)
44 return retour[:-2]
45
46
47
48def calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, age_voulu, typedonnee, liste_err):
49 """ prend en argument les données extrapolées, l'âge voulu en jours,
50 et le type de données qu'on veut afficher, et renvoie une jolie phrase
51 à afficher"""
52 age_voulu = int(age_voulu) # pour avoir les choses bien
53 debug("On veut la donnée à l'âge "+str(age_voulu), liste_err)
54 try:
55 i_date_voulue = dates_extrapole.index(age_voulu)
56 donnee_voulue = donnees_extrapole[i_date_voulue]
57 donnee_arrondie = u.arrondit_donnee(donnee_voulue, typedonnee)
58 chaine = "À "+joliechaine_age(convertit_age_vers_texte(age_voulu))
59
60 if typedonnee == "poids":
61 return chaine+", l'enfant pèsera "+str(donnee_arrondie)+" kg."
62 elif typedonnee == "taille":
63 return chaine+", l'enfant mesurera "+str(donnee_arrondie)+" cm."
64 else: # phrase générique
65 return chaine+", la donnée sera : "+str(donnee_arrondie)+" "+CONFIG["unites_typedonnees"][typedonnee]+"."
66 except:
67 warning("Impossible de calculer la donnée à l'âge "+age_voulu, liste_err)
68 return ""
69
70def calcule_age_extrapole(dates_extrapole, donnees_extrapole, donnee_voulue, typedonnee, liste_err):
71 """ prend en argument les données extrapolées, la donnée voulue (dans l'unité adaptée)
72 et son type, et renvoie la jolie phrase à afficher"""
73
74 debug("On veut savoir à quel âge on a "+str(donnee_voulue), liste_err)
75 try:
76 i=0
77 while i<len(donnees_extrapole) and donnees_extrapole[i]<donnee_voulue:
78 i+=1
79
80 age_joli = joliechaine_age(convertit_age_vers_texte(dates_extrapole[i]))
81 if typedonnee=="poids":
82 return "L'enfant atteindra un poids de "+str(donnee_voulue)+" kg à l'âge de "+age_joli+"."
83 elif typedonnee=="taille":
84 return "L'enfant atteindra la taille "+str(donnee_voulue)+ "cm à l'âge de "+age_joli+"."
85 else:# phrase générique
86 return "L'enfant atteindra la donnée "+typedonnee+" "+str(donnee_voulue)+" à l'âge de "+age_joli+"."
87 except:
88 warning("Impossible de calculer l'âge pour la donnée "+str(donnee_voulue), liste_err)
89 return ""