Cours d’Informatique Scientifique
Programmation en Python Cours 4/8
Laurent Pointal
laurent.pointal @ limsi.fr
@ laposte.net
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 4/8 2 8
v2.2
Problème, algorithme, programmation
A partir d'un texte contenant
une série de dates de naissance, calculer la répartition
de celles-ci par mois.
Les dates sont simplement séparées par des
caractères espace ou retour à la ligne.
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 4/8 3 8
v2.2
Les Modules
Des fichiers de code existant à réutiliser:
●
Modules standards Python (~300)
●
Modules sur le Python Package Index (~11000) http://pypi.python.org/
●
Modules sur l’lnternet…
Déjà écrits, déjà testés.
Organisation de vos programmes pour pouvoir:
●
Séparer les différentes parties et structurer l’ensemble
●
En réutiliser certaines dans d’autres programmes
●
Partager des données par des espaces de noms
●
Tester séparément les parties
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 4/8 4 8
v2.2
Définir un module… le début
#!/bin/env python3
# -*- coding: utf-8 -*-
# Auteur: Joe Student
# Fichier: mon_premier_m.py
"""Calculs de nombres premiers.
"""
# Modules outils utilisés
import math,sys import os
# Constantes et variables globales définies
LIMITE = 10000 # Ne pas dépasser lors des calculs.
# Définition des fonctions
def est_premier(p_n) :
"""Test si p_n est un nombre premier.
"""
…
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 4/8 5 8
v2.2
Définir un module… la fin
…
def liste_premiers(maxn) :
"""Retourne la liste des nombres premiers jusqu'à maxn Attention: 1 < maxn <= LIMITE
"""
…
if __name__ == "__main__" : # Autotest du module from verif_m import verif
# Fonctionnement normal:
verif(est_premier(11),True) verif(est_premier(35),False)
verifSeq(liste_premiers(11),[2,3,5,7,11]) # Détection des erreurs par exception:
try :
liste_premiers(LIMITE+1) except ValueError :
print("Erreur liste_premiers détectée: ok")
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 4/8 6 8
v2.2
Définir un module… à l’IUT
…
if __name__ == "__main__" : # Autotest du module from verif_m import verif
# Fonctionnement normal:
verif(est_premier(11),True) …
"""Traces d'exécution:
[True, True] : ok [False, False] : ok
[[2, 3, 5]..., [2, 3, 5]...] ok Erreur liste_premiers détectée
"""
Copier/coller les traces d’exécution dans une chaîne, tout à la fin.
Aucune implication sur le module et son exécution, permet de voir si
l’exécution est ok directement dans le module.
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 4/8 7 8
v2.2
Utiliser un module: import
Import du module en entier:
Import de certaines définitions du module:
import mon_premier_m
Fichier mon_premier_m.py ➔ module mon_premier_m
➔ accès aux définitions du module par le nom du module (“accès par nom qualifié”)
l = mon_premier_m.liste_premiers(100) if mon_premier_m.est_premier(x) :
print(x,"n'a pas de diviseur autre que 1 et",x)
from mon_premier_m import est_premier,liste_premiers
➔ accès direct aux définitions du module
l = liste_premiers(100)
if est_premier(x) :
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 4/8 8 8
v2.2
Astuces d’imports
Renomage des noms importés: as
●
Si trop longs ou peu explicites
●
Si nom déjà utilisés dans le module qui importe (collision de noms)
Import de tous les noms d’un module: *
from math import *
import GestionFichierAnnuaire as gfa import mon_premier_m as mp
from math import pi as
from os import open as osopen
Attention avec *:
●
On ne sait plus d’où viennent les noms quand on relit le code
●