1 - Présentation du thème de la randonnée 2

publicité
- TD2 : Module : Algorithmique et programmation. Langage : Python -
TD2 : Les structures de données en Python : liste, fichier-texte.
Thème : Randonnée pédestre.
Voir diaporama cours "Liste et fichiers"
1 - Présentation du thème de la randonnée
On souhaite gérer le contexte d'une randonnée pédestre pour laquelle nous traitons plusieurs points
géographiques (toutes les n secondes par exemple) avec seulement, pour le moment, la valeur de l'altitude
de chaque point.
Ci-dessous, les points forment la trace de la randonnée visible sous Google Earth.
En réalité, les points et leur altitude seront obtenus par le GPS d'un téléphone portable et seront disponibles
dans un fichier que nous verrons plus loin dans ce TD.
2 - Travail à faire
2.1 - Traiter des altitudes aléatoires d'une série de points
Pour le moment, nous allons simuler cette trace en n'utilisant que l'altitude d'une série de points non
référencés géographiquement (on ne gère pas pour le moment la latitude et la longitude).
Nous avons besoin de définir quelques constantes :
NB_POINTS = 10 # gérer 10 points seulement
ALTITUDE_REF = float(1000) # définir une altitude de référence à 1 000 mètres
DELTA_ALTITUDE_MAX = float(100) # variation d'altitude maxi en + ou en # entre 2 points successifs aléatoires
Nous allons avoir une petite randonnée avec les 10 valeurs suivantes :
Pour simuler ces altitudes, nous pourrions les saisir successivement au clavier mais nous les génèrerons
plus rapidement par un tirage aléatoire en utilisant une fonctionnalité prédéfinie dans le langage Python
disponible dans une bibliothèque nommée random.
Une bibliothèque est une ressource complémentaire à Python contenant des 'services' (nous verrons plus
tard comment sont appelés techniquement ces 'services').
Il faut donc importer la bibliothèque random :
- soit avec tous ses 'services'.
- soit en ciblant les seuls 'services' de la bibliothèque utiles pour notre programme.
INP Toulouse
Claude MONTEIL - Marc SOUQUES
Ecole Nationale Supérieure Agronomique de Toulouse page 1/5
- TD2 : Module : Algorithmique et programmation. Langage : Python -
Pour économiser les ressources installées, nous allons utiliser la bibliothèque random avec seulement le
chargement des 2 'services' utiles pour cet exemple, soit :
- random : renvoie une valeur aléatoire réelle entre 0 inclus et 1 exclu (sur cette ligne, random est un
'services' alors que plus haut, en gras, random est le nom de la bibliothèque !)
- seed : initialise la gestion de l'aléa à la valeur n, de sorte que l'on génèrera la même suite de nombres
aléatoires à chaque exécution. De l'aléatoire constant !
Pour générer une valeur aléatoire, nous utiliserons donc la syntaxe suivante :
#appel à une bibliothèque random fournissant 2 'services' random et seed pour calcul aléatoire
from random import random, seed
seed(6) # initialise random à 6 : on aura tous et toujours la même suite aléatoire en TD
# ne pas saisir seed() pour avoir du VRAI aléatoire…
# random() renvoie une valeur aléatoire réelle entre 0 inclus et 1 exclu
deltaAltitude = DELTA_ALTITUDE_MAX * (2 * random() - 1) # random() => [0,1[
exemple : 60 =
100
* (2 * 0.80
- 1)
exemple : - 40 =
100
* (2 * 0.30
- 1)
deltaAltitude est la variation d'altitude entre 2 points successifs, cette variation est tirée aléatoirement dans
cet exemple simulant la réalité. Ce deltaAltitude permet de calculer une altitude (voir exemple ci-dessous)
Remarque sur les affichages de nombres réels :
Pour afficher une valeur 15.34 à partir de la valeur 15.33999, utilisation d'une fonction de formatage :
print( format(15.33999, "7.2f") )
format(valeur, "7.2f") affiche un réel (f pour float) sur 7 positions dont 2 positions pour la partie décimale
et 1 position pour le "." décimal.
Notre règle pour nommer des listes : lst (préfixe) + nom de liste au pluriel soit dans notre exemple :
lstVariationsAltitude et lstAltitudes
Ouvrir le programme GenererAltitudesAleatoiresListeDebut.py où du code est déjà saisi.
Remarque :
NomProgrammeDebut pour un fichier de début de TD à compléter.
NomProgramme pour un fichier de correction du TD.
Travail à faire :
Compléter le code pour obtenir l'affichage suivant qui ne nécessitera aucune saisie.
Objectifs :
-1- Remplir les 2 listes
-2- Afficher les points, altitudes et
variations d'altitude à partir de données
lues dans les 2 listes.
-3- Afficher mini et son point, maxi et son
point à partir des données lues dans les 2
listes.
INP Toulouse
Claude MONTEIL - Marc SOUQUES
Ecole Nationale Supérieure Agronomique de Toulouse page 2/5
- TD2 : Module : Algorithmique et programmation. Langage : Python -
2.2 - Traiter les altitudes réelles d'une série de points
Maintenant, nous ne gérons plus des points et altitudes aléatoires mais des points réels obtenus par le GPS
d'un téléphone portable suite à une randonnée.
Le smartphone permet d'exporter les données de la randonnée dans un fichier particulier (.gpx) qui est
ensuite converti par un programme Python en un fichier texte (.csv) avec 5 valeurs par point :
- latitude : positionnement Est-Ouest en degrés par rapport au méridien de Greenwich : 1.802429°
- longitude : positionnement Nord-Sud en degrés par rapport à l'équateur : 42.587411
- altitude : positionnement par rapport au niveau de la mer : 1512 mètres
- jour : jour du point GPS : 02/07/2011. Ici, la randonnée est effectuée sur 1 seul jour.
- heure : heure du point GPS : 8:33:28
Nous utiliserons donc le fichier de données suivant : Randonnee02-07-2011.csv
…
Dans l'éditeur de texte ci-dessus Notepad++, on remarque que chaque valeur est séparée de la suivante par
un point-virgule ";". Grace à ce ";", Excel est capable d'ouvrir ce fichier et de l'afficher, voir ci-dessus.
Pour ce TD, nous lirons donc les données de ce fichier Randonnee02-07-2011.csv pour les traiter et
afficher quelques résultats. L'extension CSV signifie Comma Separated Values soit "virgule de séparation
des valeurs" mais ici, c'est une version voisine où le ";" est le séparateur.
Dans Préférences / Répertoire de travail global, le paramétrage
indique que le fichier à lire est recherché dans le répertoire du fichier.py
en cours d'édition. Donc le .csv et .py doivent être dans le même dossier.
INP Toulouse
Claude MONTEIL - Marc SOUQUES
Ecole Nationale Supérieure Agronomique de Toulouse page 3/5
- TD2 : Module : Algorithmique et programmation. Langage : Python -
Travail à faire :
Ouvrir le programme LireFichierRandonneeDebut.py où du code est déjà saisi.
Compléter le code pour obtenir les affichages suivants.
 Objectifs demandés pour cet exercice :
1. Afficher l'altitude mini et l'altitude maxi
Vous pouvez reprendre ce qui a été fait dans l'exercice précédent pour chercher le mini et maxi.
Nous utiliserons les variables suivantes pour le mini : altitudeMini ;
Gérer aussi une variable pour le maxi.
Règle pour les noms de variable-fichier associée à un fichier lors d'une instruction open par exemple :
fich (préfixe) + nom de fichier au pluriel soit dans notre exemple :
fichPointsRando= open ("Randonnee02-07-2011.csv", 'r')
Nous voulons obtenir une liste d'altitudes lstAltitudes comme dans l'exercice précédent.
Il faudra donc lire le fichier "Randonnee02-07-2011.csv" et remplir une liste lstPoints où chaque élément
de la liste est une ligne du fichier texte terminée par le caractère spécial '\n' (pour 'new line') : utiliser la
fonction .readlines() sur le fichier (ou bien une autre forme : lstPoints = list (fichPointsRando).
Attention, la première ligne contient simplement les noms des colonnes "Longitude;Latitude;Altitude;Jour;Heure"
Il faudra ensuite utiliser sur le texte de chaque élément de la liste lstPoints 2 services :
lstDatas = lstPoints[…].rstrip().split(";")
Explications ci-dessous :
- chaine.rstrip() : à droite (r de right), supprimer (strip=enlever comme strip-tease) les caractères espaces
et "\n" situés en fin du texte à droite.
- chaine.split(";") : retourner une liste en divisant (split) le texte sur le critère du caractère ";"
ainsi par exemple,
split("1.8 ; 42.5 ; 1512") retourne la liste [1.8 , 42.5 , 1512]
Explication par l'image :
\n
\n
\n
Fichier
Randonnee02-07-2011.csv
\n new line
\n
\n
\n
\n
Liste
lstPoints
.rstrip()
.split(";")
\n
\n
INP Toulouse
Claude MONTEIL - Marc SOUQUES
Ecole Nationale Supérieure Agronomique de Toulouse page 4/5
- TD2 : Module : Algorithmique et programmation. Langage : Python -
2. Afficher l'altitude mini et l'altitude maxi et son heure
Nous utiliserons les variables suivantes pour le mini : altitudeMini ; rangPointMini
Gérer aussi 2 variables pour le maxi
3. Afficher l'heure lorsqu'on dépasse éventuellement une altitude donnée saisie au clavier
Nous utiliserons les variables suivantes : seuilAltitude pour l'altitude de référence saisie et
sommetTrouve comme indicateur pour les répétitions.
Remarque : si seuilAltitude est très haut, afficher :
4. Afficher les altitudes lorsque l'on continue à monter
INP Toulouse
Claude MONTEIL - Marc SOUQUES
Ecole Nationale Supérieure Agronomique de Toulouse page 5/5
Téléchargement