Exercice sur les fichiers / dictionnaires
Dans cet exercice, nous allons lire et traiter des données qui sont stockées dans un
fichier, et qui concernent les patients d'un cabinet médical. On suppose que ce fichier est
de la même forme que le fichier : donnees_md.txt , c'est-à-dire : chaque ligne correspond
à un patient, et est composée du prénom du patient, suivi d'un espace, puis du poids du
patient, suivi d'un espace, puis de la taille du patient.
Le but global de cet exercice est de :
- lire les données dans le fichier, et les stocker sous la forme d'une liste de patients ;
chaque patient sera représenté par un dictionnaire, ayant trois
clés : "nom", "poids" et "taille".
- calculer l'IMC (Indice de Masse Corporelle) de chaque patient, ainsi que l'IMC moyen
des patients ; détecter les patients qui sont en corpulence normale et ceux qui ne le sont
pas.
- écrire les résultats dans un autre fichier.
Pour cela, on vous propose la démarche suivante :
Partie 1 : importer les données et les mettre dans la bonne structure de données.
1. Ecrire une fonction import_lignes qui prend en argument un nom de fichier et
qui renvoie la liste des lignes du fichier, c'est-à-dire une liste de chaînes de
caractères, où chaque élément de la liste correspond à une ligne du
fichier. Pensez bien à fermer le fichier avant de faire le return.
2. Ecrire une fonction cree_patient qui prend en argument une ligne (chaîne de
caractères) et qui renvoie le dictionnaire correspondant au patient de la ligne.
Pensez à convertir le poids et la taille en float avant de les stocker dans le
dictionnaire.
Exemples :
o cree_patient("Liliane 62 1.67\n") doit renvoyer le
dictionnaire : {'nom' : 'Liliane', 'poids' : 62.0, 'taille':
1.67}
3. Ecrire une fonction liste_patients_from_nom_fichier qui prend en
argument un nom de fichier et qui renvoie la liste des patients correspondant au
fichier (où chaque patient est représenté par un dictionnaire).
Partie 2 : Traiter les données.
1. Ecrire une fonction imc qui prend en argument un patient (dictionnaire), et qui
renvoie son IMC arrondi à deux chiffres après la virgule (rappelez-vous l'existence
et le fonctionnement de round(nombre, 2)). L'IMC se calcule ainsi :
IMC=poids/(taille2).
2. Ecrire une fonction imc_moyen qui prend en argument une liste de patients et
qui renvoie l'IMC moyen des patients, arrondi à deux chiffres après la virgule.
3. Ecrire une fonction liste_noms_patients_en_corpulence_normale qui
prend en argument une liste de patients et qui renvoie la liste contenant les
noms des patients dont l'IMC indique une corpulence normale, c'est-à-dire si
l'IMC est compris entre 18.5 et 25 (inclus)
Partie 3 : écrire les résultats dans un fichier.
1. Ecrire une fonction produire_chaine qui prend en argument un patient et qui
renvoie la chaîne de caractères formée du nom du patient, suivi d'un espace, suivi
de son IMC arrondi à deux chiffres après la virgule, suivi d'un retour à la ligne.
2. Ecrire une fonction ecrire_imc qui prend en argument la liste des patients ainsi
que le nom du fichier de destination, et qui écrit dans le fichier :
o Pour chaque patient, une ligne contenant son nom puis son IMC, séparés
par un espace (pensez à utiliser la fonction produire_chaine),
o Puis on écrit "IMC Moyen :" suivi de l'IMC moyen des patients, arrondi à
deux chiffres après la virgule.
o Ensuite, on écrit "Noms des patients en corpulence normale :", suivi d'un
retour à la ligne, puis les noms des patients en corpulence normale (un
nom par ligne)
Vous pouvez nommer le nouveau fichier : resultats-donnees.txt
3. Ecrire une fonction traitement_complet_donnees qui prend en argument le
nom du fichier contenant les données, puis le nom du fichier dans lequel on doit
écrire les résultats, et qui effectue le traitement complet des données (c'est-à-dire
qu'il lit, traite les données, et écrit les résultats selon les instructions données
dans la question précédente). Vous pouvez consulter le fichier resultats-
donnees.txt pour voir ce que doit produire l'appel
de traitement_complet_donnees("donnees.txt","resultats-
donnees.txt")