L'objectif de ce TD est de récupérer les données numériques contenues dans un texte et de faire quelques opérations sur celles-ci.
Dans nos activités, le plus souvent, les fichiers contiendront des données numériques que l'on devra étudier. Par exemple, dans ce travail on va étudier les données (issues d'un fichier GPS) relevées lors d'une sortie d'un cycliste. Voici le début du fichier (il est lié à ce TD):
txt
# time(s), distance(km), elevation(m)
0 0 780.4
1 0.005619584185703101 780.6
2 0.013857605826860752 780.9
3 0.020495868631472042 781.1
...
On rappelle la fonction python vue dans le cours read_datas(nomfich : str) -> list qui lit ligne par ligne le contenu d'un fichier et qui renvoie la liste de chaines de caractères de chaque ligne contenant des données numériques.
def read_datas(nomfich : str) -> list:
""" renvoie la liste constituée par les lignes
du fichier nomfich"""
lst = []
with open(nomfich,mode="r") as f :
for line in f:
if line[0] not in ['\n', '#'] :
lst.append(line)
return lst
# test :
print(read_datas('data_cycle.txt'))
Q1. Compléter la fonction python parse(lst : list) -> dict dont le but est d'analyser le fichier datas_cycle.txt et de renvoyer les données des trois colonnes stockées sous forme d'un dictionnaire dont la structure est la suivante :
datas_dict = {
'time' : .... , # liste des temps (colonne 1)
'distance' : .... , # liste des distances (colonne 2)
'elevation' : .... # liste des altitudes (colonne 3)
}
(On pourra se reporter à l'exmple du cours et notamment penser à utiliser la fonction split...)
def parse(lst : list) -> list :
""" récupère une liste de str contenant chacune 3 valeurs (time/dist/elev),
récupère ces données et les stocke dans un dictionnaire du type :
datas_dict = {
'time' : .... , # liste des temps (colonne 1)
'distance' : .... , # liste des distances (colonne 2)
'elevation' : .... # liste des altitudes (colonne 3)
}
"""
datas_dic = {
'time' : [],
'distance' : [],
'elevation' : []
}
# à compléter....
return datas_dic
# on teste :
lst_str = read_datas("data_cycle.txt")
dic_datas = parse(lst_str)
print(dic_datas)
Q2 Toutes les données du fichiers sont maintenant disponibles à l'aide de la seule variable dic_datas obtenue par retour de la fonction parse(...). Écrire alors une fonction python duree_totale(...) qui reçoit le dictionnaire dic_datas et qui renvoie la durée totale de la sortie en secondes.
(Pour les plus rapides, ajouter une fonction de conversion qui reçoit des secondes et qui renvoie le tuple (heures,minutes,secondes) correspondant.)
def duree_totale(datas : dict) -> int:
""" renvoie la duree totale en seconde des données
stockées dans le dictionnaire 'datas' """
# à complter
tot = #...
return tot
# on teste :
dic_datas = parse(read_datas("data_cycle.txt"))
duree = duree_totale(dic_datas)
print(f"duree totale : {duree} secondes")
Q3. Écrire ensuite une fonction python distance_totale(dic) qui reçoit le dictionnaire dic_datas et qui renvoie la distance totale de la sortie en km.
Q4. Écrire une fonction python vitesse_moyenne(dic) qui reçoit le dictionnaire dic_datas et qui renvoie la vitesse moyenne de la sortie (en km/h).
Q5. Écrire une fonction python alti_max(dic) ui reçoit le dictionnaire dic_datas et qui renvoie l'altitude maximale (en m).
Q6. Un peu plus élaboré : écrire une fonction python alti_cumul(dic) qui reçoit le dictionnaire dic_datas et qui renvoie le dénivelé cumulé positif total (en m).
!!! note Réponses Q2 à Q6 durée totale = ... distance totale = ... vitesse moyenne = ... altitude maximale = ... dénivelé cumulé = ... !!!