NUMERIQUE ET SCIENCES INFORMATIQUES

N.B. Niveau : Terminale Générale, enseignement de spécialité NSI (Numérique et Sciences Informatiques)

 

D
É
C
O
N
N
E
C
T
É

La modularité

1 - Cours

Lorsqu'on réalise un projet de programmation de grande ampleur, ou que l'on travaille en équipe, il est d'usage de découper le programme en plusieurs parties ayant chacune un rôle propre. On peut par exemple dans un jeu séparer ce qui concerne le traitement des données du jeu de ce qui concerne l'affichage graphique de ces données. Chaque partie est alors stockée dans un fichier, que l'on appelle module. Un module est indépendant, et peut être réutilisé dans n'importe quel programme.

Définition

Un module est un fichier de code qui peut contenir des constantes, des classes, des fonctions...

Exemples :

Il existe de très nombreux modules en Python, comme le module math (fonctions mathématiques) et le module random (pseudo-aléatoire).

Un module est un fichier de code comme un autre. En Python, pour faire un module il suffit simplement de faire un fichier portant l'extension .py.

Une API (Application Pgramming Interface) permet aux développeurs d'intégrer une application à une autre. Cela peut permettre par exemple de récupérer des données structurées depuis un site web pour les exploiter de manière automatisée dans un programme.

Rappel

Pour utiliser un module en Python, il faut commencer par l'importer en mémoire. Par exemple on peut utiliser la fonction randint du module random grâce l'une des instruction suivantes :

ou

Lorsqu'on utilise plusieurs modules, ou lorsque le programme est assez long, la première méthode est recommandée, car même si elle alourdit le programme, elle permet de bien voir de quel module provient chaque fonction utilisée.

Dans toute cette séquence, nous allons donc utiliser la première méthode.

Remarque :

L'interaction avec un module se fait grâce à une interface, qui est une énumération des fonctions définies dans le modules et destinées à être utilisée par le programme tiers. Cette interface permet d'utiliser un module sans avoir à accéder à son code.

En Python, pour obtenir l'interface d'un module, on utilise dans la console l'instruction help("nom du module"). On pourra tester par exemple help("random")

Si le module permet d'interagir avec un système tiers, on parle d'API.

Définition

Une API (Application Programming Interface) est un ensemble normalisé de classes, méthodes, fonctions et constantes qui permet à un système informatique d'interagir avec un autre système informatique.

exemples

  • Le DOM (Document Objet Model, voir cours de première) est une API permettant à un programme en JavaScript d'interagir avec le contenu d'une page web.
  • De nombreux sites web proposent une API, qui permet à des programmes "consommateurs" d'utiliser les données du site.
  • Il existe de nombreuses implémentations d'API pour Python sous forme de modules, par exemple Pygame ou TKinter qui permettent d'interagir avec l'affichage graphique, folium qui permet d'interagir avec des sites de données géographiques (voir TP), os qui permet d'interagir avec le système d'exploitation.
  • Python peut interagir avec certains systèmes de gestion de bases de données via un module qui est donc une implémentation d'une API.

L'objectif de cette séquence est de s'entraîner à utiliser des modules et à créer des modules.

2 - Travaux pratiques

Exemple : récupérer la météo dans son programme python

Source de l'exemple : Olivier Lecluse

Nous cherchons à récupérer dans un programme python la température et à l'afficher. Pour cela, nous allons utiliser une API existante.

Nous allons utiliser les services d'openweathermap. Si vous vous rendez sur le site, vous voyez bien les informations qui nous intéressent mais sous cette forme, nous ne pouvons pas les exploiter facilement. Si vous cliquez sur l'onglet API, vous verrez tout ce que le site propose comme API. Certaines sont gratuites d'accès, d'autres payantes Dans tous les cas, pour en bénéficier, il faudra créer un compte sur le site. Pour découvrir le principe de l'utilisation de ces API, nous n'aurons pas besoin de compte car une API de démonstration suffit pour tester notre programme. Libre à vous si vous souhaitez travailler sur des données réelles et actualises de créer un compte.

Nous utiliserons dans cet exemple l'API Current weather data.

On accède à une API via une URL fournie par le site. Un exemple d'une telle URL est : https://samples.openweathermap.org/data/2.5/weather?q=London&appid=b6907d289e10d714a6e88b30761fae22

Cette URL contient plusieurs paramètres

  • zip : code postal et pays
  • appid : clé api fournie par le site quand vous avez créé un compte. celle qui est proposée ici donne accès à des informations de démonstration. Elles ont le bon format pour nous permettre de développer et tester notre programme.

Si vous ouvrez cette URL avec Firefox, ce dernier va les présenter de manière lisible. En réalité, le fichier qui est envoyé via cette URL est un fichier au format json qui ressemble à une structure de dictionnaire avec des associations clé-valeur :

Grâce au module requests, Python peut récupérer les données au format json et les intégrer dans un dictionnaire.

Voici un programme basique permettant de récupérer et afficher quelques informations :

Copiez puis collez ce code dans Edupython, sauvegardez le fichier sous meteo.py, puis testez-le

Pour récupérer la température on exécute la ligne suivante :

>>> print (weather['main'])

En effet, notre dictionnaire sous la clé 'main' renvoie un nouveau dictionnaire.

Remarque : les températures sont affichées en Kelvin. Pour les convertir en °C on applique la formule suivante : T°C = T°K - 273.15

Ecrire une fonction temperature qui prend en paramètre le nom de la ville et retourne la température en degrés celsius arrondi au dixième de degré. Commencer par mettre une documentation (docstring)0.

En utilisant l'url ci-dessous, on récupère les prévisions météo pour les 5 jours à venir toutes les 3 heures.

Ecrire une fonction prevision qui prend en paramètre le nom de la ville et qui retourne une liste contenant les dictionnaires des 5 jours à venir dont les clés sont date et temps.

Exemple :

[
{'date': '2023-03-10 21:00:00', 'temps': 'light rain'}, 
{'date': '2023-03-11 00:00:00', 'temps': 'light rain'}, 
{'date': '2023-03-11 03:00:00', 'temps': 'light snow'}, 
...
]

Collez votre fonction ci-dessous :

Modularité :

Créer un nouveau script contenant le code import meteo, que vous allez enregistrer dans le même dossier que meteo.py.

Exécutez le code;

Dans la console python tapez :

>>> help(meteo)

Vous devriez voir vos fonctions et vos documentations.

Exécuter dans la console :

>>> help(meteo.temperature)

Ecrire un programme qui demande d'entrer la nom d'une ville et qui affiche par exemple le résultat suivant :

Choisir une ville : Mulhouse
Clouds , température : 11.9 °C

Créer un dictionnaire french_weather qui permettra d'afficher le temps qu'il fait en français.

Exemple :

Choisir une ville : Mulhouse
Nuageux , température : 11.9 °C

Ce dictionnaire sera enrichi au fur et à mesure du TP.

On souhaite afficher les prévisions des 24 heures à venir, par exemple :

Dimanche 12H pluie faible
Dimanche 15H pluie faible
Dimanche 18H nuageux
Dimanche 21H très nuageux
Lundi 0H très nuageux
Lundi 3H très nuageux
Lundi 6H très nuageux
Lundi 9H très nuageux

Il va falloir extraire le jour de la semaine (type int), le transformer en chaine de caractère. Extraire ensuite l'heure de la date et afficher le temps.

Inscrire dans la console le code suivant et valider :

>>> help(time.strptime)

Repérer les codes des formats pour l'année, le mois, le jour, l'heure, les minutes et les secondes.

Dans la date suivante : 2023-03-11 03:00:00 le séparateur année mois et jour est "-", pour l'heure c'est ":" et le séparateur entre la date et l'heure : ' '.

La méthode strptime du module time prend en paramètre une chaine de caractères (la date) et les codes de formats entre-coupés par les séparateurs.

Dans la console Pyton exécuter la ligne suivante :

time.strptime("2023-03-11 03:00:00","%?-%?...")

L'exécution doit retourner les attributs de l'objet time suivants :

time.struct_time(tm_year=2023, tm_mon=3, tm_mday=11, tm_hour=3, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=70, tm_isdst=-1)

Si on mémorise ce que nous retourne cette méthode dans une variable date par exemple, on pourra facilement accéder aux différents attributs.

Sauvegarde des scripts

collez le module meteo.py ci-dessous :

collez votre programme ci-dessous :

Fond : Texte : Tables : Thème Python: