et de la promotion du travail
Direction de la Recherche et Ingénierie de formation
1ère Année
Filière :
Développement
Digital
(Tronc commun)
Technicien spécialisé
Direction de la Recherche et L’Ingénierie de Formation
Digital I Infrastructure digitale
Version : 01/12/2021
Concevoir un réseau informatique
3
Remerciements
La DRIF remercie les personnes qui ont contribué à l’élaboration du présent document :
Équipe de conception :
BOUDIAF Saida Digital learning manager/
Project manager
MIHOUBI Fattoum, Cheffe de projet pédagogique/
Ingénieure pédagogique
CROUZOULON Jonathan, Directeur pédagogique/
Chef de projet pédagogique
Équipe de rédaction :
JEMEL Meriam, Assistant Professor in Computer Science
Équipe de lecture :
RAHMANI Abdelhak, Formateur Animateur au CDC Digital & IA
LAOUIJA Soukaina, Formatrice Animatrice au CDC Digital & IA
EL KHATABI GHIZLANE, Formatrice Animatrice au CDC Digital & IA
Les utilisateurs de ce document sont invités à communiquer à la DRIF et au CDC Digital & IA toutes les remarques
et suggestions afin de les prendre en considération pour l’enrichissement et l’amélioration de ce module.
2 heures
Activité 1
Définir une classe
Compétences visées :
Recommandations clés :
2 heures
CONSIGNES
1- Pour le formateur
₋ Demander d’analyser l’énoncé du problème
₋ Demander de repérer les attributs (d’instance et de classe)
₋ Demander de repérer les méthodes: les paramètres et le type de
retour
2- Pour l’apprenant
₋ Analyser l’énoncé du problème
₋ Repérer les attributs (d’instance et de classe)
₋ Repérer les méthodes: les paramètres et le type de retour
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Définir une classe?
o Repérer les attributs d’une classe ?
o Repérer les méthodes d’une classe?
Activité 1
Définir une classe
On souhaite programmer une application de gestion commerciale. Cette application permet à une petite société de gérer les commandes. Nous donnons dans ce qui suit
une description des fonctionnalités attendues de l’application.
Gestion produits :
Chaque produit est caractérisé par sa référence, sa désignation, son prix d’achat, son prix de vente, le nombre d’exemplaires en stock; le nombre de produit
A la création du produit, on lui attribue une référence, un prix d’achat, un prix de vente, un stock nul (quantité=0), et une désignation (petite description du produit). Parmi
les fonctionnalités attendues de l’application de gestion de stock, relative au produit, est de pouvoir retourner le nombre de produits existants, afficher les informations
relatives à un produit, modifier son prix d’achat et son prix de vente, augmenter ou diminuer le nombre d’exemplaires en stock
Gestion des commandes:
Les sorties de stock sont gérées à travers les commandes. Une commande est caractérisée par sa date de création et un ensemble de produits avec les quantités qu’on va
livrer (vendre).
Questions:
On souhaite programmer une application de gestion commerciale. Cette application permet à une petite société de gérer les commandes. Nous donnons dans ce qui suit
une description des fonctionnalités attendues de l’application.
Gestion produits :
Chaque produit est caractérisé par sa référence, sa désignation, son prix d’achat, son prix de vente, le nombre d’exemplaires en stock; le nombre de produit
A la création du produit, on lui attribue une référence, un prix d’achat, un prix de vente, un stock nul (quantité=0), et une désignation (petite description du produit). Parmi
les fonctionnalités attendues de l’application de gestion de stock, relative au produit, est de pouvoir retourner le nombre de produits existants, afficher les informations
relatives à un produit, modifier son prix d’achat et son prix de vente, augmenter ou diminuer le nombre d’exemplaires en stock
Gestion des commandes:
Les sorties de stock sont gérées à travers les commandes. Une commande est caractérisée par sa date de création et un ensemble de produits avec les quantités qu’on va
livrer (vendre).
Questions:
2. Précisez pour chaque classe: les attributs (statiques et non) et les méthodes (statiques et non).
référence: chaine
désignation: chaine
prixAchat: réel
prixVente: réel
nombreExemplaire: entier
nombreProduit: entier
3. Demander de préciser les attributs d’instance (relatif à un objet) et les attributs de classe relatifs à la classe Produit
référence: chaine
prixVente: réel
Attributs d’instances
nombreExemplaire: entier
nombreProduit: entier à attribut de classe
• Analyse du texte ci-dessous pour dégager les méthodes de la classe Produit
A la création du produit, on lui attribue une référence, un prix d’achat, un prix de vente, un stock nul (quantité=0), et une désignation (petite description du produit).à
définir un constructeur à 4 paramètres
• Parmi les fonctionnalités attendues de l’application de gestion de stock, relative au produit, est de pouvoir retourner le nombre de produits existants, afficher les
informations relatives à un produit, modifier son prix d’achat et son prix de vente, augmenter et diminuer le nombre d’exemplaires en stock
Produit
Les méthodes dégagées sont:
-référence: chaine
CréerProduit(référence: chaine, désignation: réel, prixAchat: réel, prixVente)à constructeur -désignation: chaine
-prixAchat: réel
afficherNbProduits()à méthode de classe -prixVente: réel
afficherInformationsProduit() à méthode d’instance -nombreExemplaire: entier
+nombreProduit: entier
setprixAchat(réel) à méthode d’instance c’est un modificateur
+afficherNbProduits():entier
setprixVente (réel) à méthode d’instance c’est un modificateur +CréerProduit(chaine,chaine réel, réel)
dinimuerExemplaire(entier) à méthode d’instance +afficherInformationsProduit()
+setprixAchat(réel)
augmenterExemplaire(entier) à méthode d’instance +setprixVente (réel)
+diminuerExemplaire(entier)
+augmenterExemplaire(entier)
Copyright - Tout droit réservé - OFPPT 9
Activité 1
Correction
• Analyse du texte suivant pour dégager les attributs et les méthodes de la classe commande
Les sorties de stock sont gérées à travers les commandes. Une commande est caractérisée par sa date de création et un ensemble de produits avec les quantités qu’on va
livrer (vendre). Il est possible d’afficher une commande
• Indication: définir une classe Ligne de commande qui associe pour chaque produit le nombre d’exemplaires vendus.
Commande LigneCommande
3 heures
Activité 1
Définir l’héritage
Compétences visées :
Recommandations clés :
1 heure
CONSIGNES
1- Pour le formateur
₋ Demander de définir une relation d’héritage entre les classes
définies
2- Pour l’apprenant
₋ définir une relation d’héritage entre les classes définies
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Dégager les attributs et les méthodes communes dans des
classes définies ?
o Définir une relation d’héritage entre des classes définies
Activité 1
Définir l’héritage
Banque
Banque
Compte
Personne
CompteRénuméré CompteNonRénuméré
Recommandations clés :
1 heure
CONSIGNES
1- Pour le formateur
₋ Demander s’il est possible d’accéder aux membres des
classes Mère et Fille à partir d’une variable définie
2- Pour l’apprenant
₋ Vérifier s’il est possible d’accéder aux membres des
classes Mère et Fille à partir d’une variable définie et ceci en se
basant sur le principe du polymorphisme
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Appliquer le principe de polymorphisme?
o Décider si à partir d’une variable définie , est possible
d’accéder aux membres d’une classe Mère ou Fille?
Activité 2
Définir le polymorphisme
• Soient les variables a, b, c suivantes qui font référence à des objets de type classe Mère ou Fille.
attributsFille
methodesFille()
• Dites si il est possible d’accéder aux membres des classes Mère et Fille à partir d’une variable. Compléter le tableau par Vrai ou Faux
a b c
attributsMere
methodesMère()
attributsFille
methodesFille()
• le principe de polymorphisme: le type de la variable est utilisé par le compilateur pour déterminer si on accède à un membre (attribut ou méthode) valide. Exemple
du cours
Type A a1 0x304021 A
methodeA()
Type B b1 0x304055
Type A a2 0x304555 B
methodeB()
a b c
Recommandations clés :
1 heure
CONSIGNES
1- Pour le formateur
₋ Demander de vérifier le type d’un objet ainsi que le type de
l’objet référencé
₋ Demander de vérifier la relation d’affectation entre des variables
de types différents
2- Pour l’apprenant
₋ Vérifier le type d’un objet ainsi que le type de l’objet référencé
₋ Vérifier la relation d’affectation entre des variables de types
différents
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Distinguer entre le type d’une variable et le type de l’objet
référencé?
o Appliquer le principe de l’abstraction et d’interface en
POO?
Activité 3
Caractériser l’abstraction et manipuler les interfaces
• On vous demande d’analyser chacun des cas suivants d’une manière indépendante des autres. Pour chaque cas, dites s’il y a des instructions erronées.
Classe Abstraire
Interface I Cas 1 :
C1 • X de type C1 fait reference à un objet de type C4
• Y de type C1 fait reference à un objet de type C5
• X=Y
Cas 2 :
• X de type I fait reference à un objet de type C4
Classe Abstraire
Classe C2 • Y de type C3 fait reference à un objet de type C4
C3 • X=Y
Cas 4 :
• X de type C3 fait reference à un objet de type C5
• Y de type C6 fait reference à un objet de type C6
• X=Y
Classe Abstraire
Classe C4 Classe C5
C6
Cas 1 : correcte
• X=Yà correcte
Cas 2 : Faux
Cas 3 : Faux
23 heures
Activité 1
Coder une solution orientée
objet en Python
Compétences visées :
Recommandations clés :
4 heures
CONSIGNES
1- Pour le formateur
₋ Demander de définir le constructeur d’une classe
₋ Demander de définir les getters et setters pour les attributs
d’une classe
₋ Demander de définir les méthodes d’une classe
₋ Demander d’appliquer le surcharge des opérateurs
2- Pour l’apprenant
₋ Définir le constructeur d’une classe
₋ Définir les getters et setters pour les attributs d’une classe
₋ Définir les méthodes d’une classe
₋ Appliquer le surcharge des opérateurs
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
₋ Installation de IDLE Python 3.9 ou de l’environnement de
développement Python PyCharm 2021.2.1
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Définir une classe avec son constructeur, ses attributs et
ses méthodes?
Activité1
Coder une solution orientée objet en Python
Considérons une classe appelée Point ayant deux attributs privés __abs (abscisse du point) et __ord (ordonnée du point) et un attribut statique nb qui représente le
nombre de point crées
1. Définissez la classe Point et un constructeur à deux paramètres.
2. Définissez les getters et setters pour les deux attributs en utilisant le décorateur @property
3. Définissez la méthode__ str ()__qui retourne la représentation mathématique d’un point : (abs,ord).
4. Proposer une surcharge de l’opérateur == permettant de vérifiant si deux point p1(x1,y1) et p2(x2,Y2) sont égaux ou non(x1=x2 et y1=y2)
5. Ecrivez la méthode calculerdistance(self) qui permet de calculer la distance entre le point de l’objet courant (self) et l’objet p passé en paramètre. Nous rappelons que
la distance entre deux points A(x1,y1) et B(x2,y2), en mathématiques, est égale à: . Vous pouvez utiliser la fonction math.sqrt(a) pour calculer la
racine carrée de a et math.pow(x, y) pour calculer x puissance y
6. Ecrivez la fonction calculermilieu(self) qui permet de calculer et de retourner un objet correspondant au milieu du segment défini par le point de l’objet courant (this)
et l’objet Point p passé en paramètre. Nous rappelons que les coordonnées d’un point M(xM,yM) milieu de A(x1,y1) et B(x2,y2), en mathématiques, sont :
xM=(x1+x2)/2, yM=(y1+y2)/2
Considérons maintenant une deuxième classe appelée TroisPoints ayant les attributs __point1, __ point2 et __ point3 qui sont de type Point
7. Définissez les getters/setters (avec le décorateur @property) et un constructeur acceptant trois paramètres.
8. Ecrivez une méthode sontalignes(self) qui retourne True si les trois points point1 , point2 et point3 sont alignés, False sinon. Nous rappelons que trois points A, B et C
sont alignés si AB = AC + BC, AC = AB + BC ou BC = AC + AB (AB désignant la distance séparant le point A du point B, pareillement pour AC et BC).
9. Ecrivez une méthode estisocèle(self) qui retourne True si les trois points point1, point2 et point3 forment un triangle isocèle, False sinon. Nous rappelons qu’un triangle
ABC est isocèle si AB = AC ou AB = BC ou BC = AC.
10. Implémentez une version statique (méthode décorée par @staticmethod) des deux méthodes calculant la distance et le milieu.
11. Dans un fichier main.py, testez toutes les classes et méthodes que vous avez implémentées.
• Rappeler la notion d’attribut statique et comment le déclarer dans une classe class Point:
nb=0
Un attribut statique est lié à la classe et pas à une instance def __init__(self, abs,ord):
self.__abs = abs
• Rappeler le rôle du constructeur pour l’initialisation des attributs
self.__ord = ord
Initialiser les attribut lors de l’instanciation d’un objet Point.nb = Point.nb + 1
@property
2. Définissez les getters et setters pour les deux attributs en utilisant le
def getAbs(self):
décorateur @property return self.__abs
@property
def setOrd(self, ord):
self.__abs = ord
3. Définissez la méthode __str ()__qui retourne la représentation mathématique d’un point : (abs,ord).
4. Proposer une surcharge de l’opérateur == permettant de vérifiant si deux point p1(x1,y1) et p2(x2,Y2) sont égaux ou non(x1=x2 et y1=y2)
• Questionner sur la notion de surcharge des opérateurs
5. Ecrivez la méthode calculerdistance(self) qui permet de calculer la distance entre le point de l’objet courant (self) et l’objet p passé en paramètre
• Rappeler la formule de calcul de la distance entre deux points
• Rappeler le fait d’importer la bibliothèque math pour utiliser les fonction sqrt et pow
import math
………………….
………………….
def calculerdistance(self, pt):
d=math.sqrt(math.pow((self.__abs-pt.getAbs) , 2)+math.pow((self.__ord-pt.getOrd),2))
return d
6. Ecrivez la fonction calculermilieu(self) qui permet de calculer et de retourner un objet correspondant au milieu du segment défini par le point de l’objet courant
(this) et l’objet Point p passé en paramètre
• Même démarche que la fonction précédente
Considérons maintenant une deuxième classe appelée TroisPoints ayant les attributs __point1, __ point2 et __ point3 qui sont de type Point
7. Définissez les getters/setters (avec le décorateur @property) et un constructeur acceptant trois paramètres.
class TroisPoint:
def __init__(self, point1,point2, point3):
self.__point1 = point1
self.__point2 = point2
self.__point3 = point3
@property
def getPoint1(self):
return self.__Point1
@property
def getPoint2(self):
return self.__Point2
@property
def getPoint3(self):
return self.__Point3
@property
def setPoint1(self, p1):
self.__point1 = p1
@property
def setPoint2(self, p2):
self.__point2 = p2
@property
def setPoint3(self, p3):
self.__point3 = p3
8. Ecrivez une méthode sont alignes(self) qui retourne True si les trois points point1 , point2 et troisi`point3 sont alignés, False sinon
9. Ecrivez une méthode est isocèle(self) qui retourne True si les trois points point1, point2 et point3 forment un triangle isocèle, False sinon
def sontalignes(self):
ab=self.__point1.calculerdistance(self.__point2)
ac = self.__point1.calculerdistance(self.__point3)
bc = self.__point2.calculerdistance(self.__point3)
if (ab==ac+bc)or(ac==ab+bc)or(bc==ac+ab):
return True
else:
return False
def estisocele(self):
ab = self.__point1.calculerdistance(self.__point2)
ac = self.__point1.calculerdistance(self.__point3)
bc = self.__point2.calculerdistance(self.__point3)
if (ab == ac) or (ab == bc) or (bc == ac):
return True
else:
return False
10. Implémentez une version statique (méthode décorée par @staticmethod) des deux méthodes
• Ainsi il faut changer les paramètre des méthodes précédentes en mettant deux attributs p1 et p2 et en enlevant l’attribut self
@staticmethod
def StaticCalculerdistance(pt1, pt2):
d = math.sqrt(math.pow((pt1.getAbs - pt2.getAbs), 2) + math.pow((pt1.getOrd - pt2.getOrd), 2))
return d
@staticmethod
def StaticCalculermilieu(pt1, pt2):
absm = (pt1.getAbs + pt2.getAbs) / 2
ordm = (pt2.getOrd + pt2.getOrd) / 2
return Point(absm, ordm)
11. Dans un fichier main.py, testez toutes les classes et méthodes que vous avez implémentées.
if __name__ == '__main__':
p1 = Point(3, 6)
p2 = Point(3, 9)
p3 = Point(6, 6)
p4 = Point(6, 6)
print ("le nombre de point créé est = " + str(Point.nb))
print("Vérification si p1 et p2 sont égaux")
print (p1==p2)
print("Appel methode non statique-->La distance entre p1 et p2= "+str(p1.calculerdistance(p2)))
print("Appel methode statique-->La distance entre p1 et p2= " + str(Point.StaticCalculerdistance(p1, p2)))
Recommandations clés :
10 heures
CONSIGNES
1- Pour le formateur
₋ Demander de définir la relation d’héritage entre les classes
₋ Demander d’appliquer le principe de chainage de constructeur
₋ Demander d’appliquer le principe de la redéfinition des
méthodes
₋ Demander d’appliquer le principe de la classe abstraite
2- Pour l’apprenant
₋ Définir la relation d’héritage entre les classes
₋ Appliquer le principe de chainage de constructeur
₋ Appliquer le principe de la redéfinition des méthodes
₋ Appliquer le principe de la classe abstraite
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
₋ Installation de IDLE Python 3.9 ou de l’environnement de
développement Python PyCharm 2021.2.1
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Définir une relation d’héritage?
o Appliquer le chainage des constructeurs?
o Appliquer la redéfinition des méthodes?
o Définir une classe abstraite?
Activité 2
Manipuler les principaux piliers de la POO en Python
Nous voulons écrire un programme en Python servant à déterminer les prix de vente pour le compte d’une entreprise qui achète des produits élémentaires pour les utiliser
dans la fabrication d’autres produits dits composés.
Dans ce système d’information, un produit ne peut être qu’élémentaire ou composé. Pour chaque produit composé, il faut connaître sa composition (ou constitution),
c'est-à-dire les produits élémentaires qui entrent dans sa fabrication avec les quantités utilisées.
Exemple : P1 est élémentaire, P2 est élémentaire, P3 est constitué de 2 unités de P1, et 4 unités de P2, P4 est constitué de 3 unités de P2 et de 2 unités de P1
1. Définissez les classes suivantes :
-les getters et setters pour les deux attributs en utilisant le décorateur @property
Classe produit ayant :
• une méthode __str ()__ qui retourne les informations sur un produit élémentaire
• une méthode getPrixHT qui retourne le prixAchat d’un produit élémentaire
• un attribut privé __fraisFabrication, qui représente le coût engendré par la fabrication d’un produit à partir de ses composants (la valeur des composants n’est pas
considérée)
• un attribut tauxTVA qui est le même pour tous les produits composés (18%)
2. Dans un fichier main.py, testez toutes les classes et méthodes que vous avez implémentées.
-Une méthode str () qui retourne les def __init__(self, nom, code, prix):
Produit.__init__(self, nom, code)
informations sur un produit élémentaire self.__prix= prix
-Une méthode getPrixHT qui retourne le prixAchat d’un produit élémentaire
@property
• La classe ProduitElementaire est une classe fille de Produit et elle doit def getPrixHT(self):
obligatoirement implémenter la méthode getPrixHT return self.__prix
• Les attributs hérités de la classe mère sont non et code et ils sont initialisés def __str__(self):
en faisant au constructeur de la classe mère return "Produit Elementaire : nom=" + str(self.getNom) + " code = " +
str(self.getCode) + " prix= " + str(self.__prix)
• La méthode __str() retourne une chaine de charactères décrivant un
Produit élémentaire (non, code,…)
-un attribut privé __fraisFabrication, qui représente le coût engendré par la fabrication d’un produit à partir de ses composants (la valeur des composants n’est pas
considérée)
-un attribut __tauxTVA qui est le même pour tous les produits composés (18%)
-un attribut privé listeContituants qui représente un tableau de compositions.
-Un constructeur
les getters pour les attributs en utilisant le décorateur @property
-une méthode __str () qui retourne les informations sur un produit composé
-une méthode getPrixHT qui calcule et retourne le prix hors taxe qui est la somme des prix hors taxe de tous les constituants majoré par les frais de fabrication du produit
en question. Lorsqu’un constituant coïncide avec un produit élémentaire, on utilise son prix d’achat.
• tauxTVA est un attribut de classe puisqu’il est commun pour tous les produits Composés
• L’attribut listeContituants est un tableau de Consttituants
class ProduitCompose(Produit):
tauxTva=8
def __init__(self,nom, code, fraisFab,listeContituants):
Produit.__init__(self, nom, code)
self.__fraisFab = fraisFab
self.__listeContituants=listeContituants
@property
def getfraisFab(self):
return self.__fraisFab
def getPrixHT(self):
m=0.0
for x in self.__listeContituants:
m=m+(x.getProduit.getPrixHT*x.getQuantite)
m=m+m*self.__fraisFab/100
return m
def __str__(self):
return "Produit composé : nom=" + str(self.getNom) + " code = " + str(self.getCode) + " prix= " + str(self.getfraisFab) + " Tva= "+ str(ProduitCompose.tauxTva)
2. Dans un fichier main.py, testez toutes les classes et méthodes que vous avez implémentées.
if __name__ == '__main__':
p1=ProduitElementaire("P1","1",19.1)
print(p1)
p2 = ProduitElementaire("P2", "2", 20)
print(p2)
c1=composition(2,p1)
c2 = composition(2, p2)
tabConstituant=(c1,c2)
p3=ProduitCompose("P3","3",10,tabConstituant)
print(p3)
print("Prix TTC =" + str(p3.getPrixHT()))
Recommandations clés :
4 heures
CONSIGNES
1- Pour le formateur
₋ Demander de définir une liste
₋ Demander de définir un namedtuple
₋ Demander de définir un defaulttdict
₋ Demander de définir un deque
2- Pour l’apprenant
₋ Définir une liste
₋ Définir un namedtuple
₋ Définir un defaulttdict
₋ Définir un deque
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
₋ Installation de IDLE Python 3.9 ou de l’environnement de
développement Python PyCharm 2021.2.1
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Définir une liste et une collection?
o Manipuler les collections?
Activité 3
Manipuler les données
1. Créer une liste ListeProduit contenant la liste de tous les produits (élémentaires/ composés) crées
2. Pour chaque produit de ListeProduit, créer un objet Description de type namedtuple
Description= namedtuple('Description’, ['Produit', 'Détail’])
Par exemple:
• Si le produit P1 est un produit élémentaire, le champ nom =‘’P1 ’’ et le champ Détail=‘’ P1 est un produit Elémentaire’’
• Si le produit P3 est un produit composé de P1 et P2, le champ nom=‘’P3’’ et le champ Détail est’’ P3 est composé de P1 et P2 ’’
4. Créer ListeDescription un objet de type defaulttdict contenant toutes les descriptions des produits
5. Créer un objet DeqDescription de type deque. Ajouter les éléments de ListeDescription dans DeqDescription
1. Créer une liste ListeProduit contenant les produits (élémentaires/ composés) crées.
• La notion de Liste: Une liste est une collection qui est commandée et modifiable
p1=ProduitElementaire("P1","1",19.1)
print(p1)
p2 = ProduitElementaire("P2", "2", 20)
print(p2)
c1=composition(2,p1)
c2 = composition(2, p2)
tabConstituant=(c1,c2)
p3=ProduitCompose("P3","3",10,tabConstituant)
ListeProduit=[p1,p2,p3]
print (ListeProduit)
• Rappelons le rôle de la classe namedtuple: La classe namedtuple du module collections permet d'ajouter des noms explicites à chaque élément d'un tuple pour
rendre ces significations claires dans un programme Python
• La Syntaxe de déclaration d’un namedtuple
if (isinstance(x,ProduitElementaire)):
5. Créer un objet DeqDescription de type deque. Ajouter les éléments de ListeDescription dans DeqDescription
ListeProduit=[p1,p2,p3]
print (ListeProduit)
ListeDescription=defaultdict(list)
Recommandations clés :
3 heures
CONSIGNES
1- Pour le formateur
₋ Demander de définir une expression régulière
₋ Demander de manipuler une expression régulière
2- Pour l’apprenant
₋ Définir une expression régulière
₋ Manipuler une expression régulière
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
₋ Installation de IDLE Python 3.9 ou de l’environnement de
développement Python PyCharm 2021.2.1
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Définir une expression régulière
o Manipuler une expression régulière
Activité 4
Utiliser les expressions régulières
exemple='''
Recommandations clés :
2 heures
CONSIGNES
1- Pour le formateur
₋ Demander de définir une exception qui hérite de la classe
Exception
₋ Demander de lever une exception
₋ Demander d’attraper une exception quand elle survient (bloc try
et except)
2- Pour l’apprenant
₋ Définir une exception qui hérite de Exception
₋ Lever une exception
₋ Attraper une exception quand elle survient (bloc try et except)
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
₋ Installation de IDLE Python 3.9 ou de l’environnement de
développement Python PyCharm 2021.2.1
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Définir une exception?
o Lever une excepter?
o Attraper une exception dans un bloc Python?
Activité 5
Administrer les exceptions
1. Modifier la classe produitComposé pour qu’elle lève une exception lorsque le nombre de constituants d’un produit composé est inférieur à 3
class ProduitCompose(Produit):
class LengthListContituantsError(Exception):
tauxTva=8
def __init__(self, message):
def __init__(self,nom, code, fraisFab,listeContituants):
self.__messsage = message
if len(listeContituants) <=2:
@property
raise LengthListContituantsError("taille du tableau est fausse")
def getMessage(self):
return self.__messsage
Produit.__init__(self, nom, code)
self.__fraisFab = fraisFab
self.__listeContituants=listeContituants
if __name__ == '__main__':
p1=ProduitElementaire("P1","1",19.1)
print(p1)
p2 = ProduitElementaire("P2", "2", 20)
print(p2)
c1=composition(2,p1)
c2 = composition(2, p2)
tabConstituant=(c1,c2)
try:
p3=ProduitCompose("P3","3",10,tabConstituant)
print(p3)
print("Prix TTC =" + str(p3.getPrixHT()))
except LengthListContituantsError as e:
print(e.getMessage)
16 heures
Activité 1
Manipuler les modules
Compétences visées :
Recommandations clés :
4 heures
CONSIGNES
1- Pour le formateur
₋ Demander de créer un module
₋ Demander d’importer un module
2- Pour l’apprenant
₋ Créer un module
₋ Importer un module
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
₋ Installation de IDLE Python 3.9 ou de l’environnement de
développement Python PyCharm 2021.2.1
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Créer un module?
o Appliquer les différents types d’importation d’un module
Activité 1 :
Manipuler les modules
4. Ecrire la méthode __str() pour chaque classe permettant de construire une chaine
représentant les informations caractérisant un de ces comptes bancaires.
class Compte:
nb = 0
def __init__(self,proprietaire,solde):
self.__numero= Compte.nb+1
self.__proprietaire = proprietaire Définition de getter
self.__solde=solde
@property
def getNum(self):
return self.__numero
@property
def getProp(self):
return self.__proprietaire
@property
def getSolde(self):
return self.__solde
def __str__(self):
return "Numéro Compte :" + str(self.getNum) + " propriétaire = " + str(self.getProp) + " Solde Initial= " + str(
self.getSolde)
Compétences visées :
Recommandations clés :
12 heures
CONSIGNES
1- Pour le formateur
₋ Demander de créer une bibliothèque
₋ Demander d’importer une bibliothèque
₋ Demander de manipuler la bibliothèque tkinter
2- Pour l’apprenant
₋ Créer une bibliothèque
₋ Importer une bibliothèque
₋ Manipuler la bibliothèque tkinter
3 - Conditions de réalisation
₋ Support de résumé théorique accompagnant
₋ Installation de IDLE Python 3.9 ou de l’environnement de
développement Python PyCharm 2021.2.1
4 - Critères de réussite
₋ Le stagiaire est-il capable de :
o Créer une bibliothèque?
o Importer une bibliothèque?
o Créer une interface graphique avec tkinter?
Activité 2 :
Manipuler les bibliothèques
1. Créer une bibliothèque BibCompte Contenant les modules Compte.py, CompteEpargne.py et CompteEpargne.py crées précédemment
2. Dans le module InterfaceCompte.py, réaliser une interface graphique pour l’application de création de comptes dans une banque. L’interface une fois réalisée sera
constituée des éléments présents dans la Figure ci-dessous.
1-Créer une bibliothèque BibCompte Contenant les modules Compte.py, CompteEpargne.py et CompteEpargne.py crées précédemment
• Créer Le dossier BibCompte qui les modules Compte.py, CompteEpargne.py et CompteEpargne.py ainsi que le fichier __init__.py
• Le fichier setup.py qui contient la fonction setup permettant l’installation de la librairie sur le système
setup(
name="BibCompte",
version="0.0.1",
author="authorX",
author_email="authorX@yahoo.fr",
description="courte description de la librairie",
url="lien vers la page officielle de la librairie",
licence='Other/Propertary Licence',
packages={
'BibCompte',
}, Le fichier setup.py
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
install_requires=[
],
includ
• Une fois l’ensemble des ces éléments est défini, la librairie peut être installée sur le système en utilisant la commande suivante (exécuter la commander dans le
répertoire du projet) :
py setup.py install
2. Dans le module InterfaceCompte.py, réaliser une interface graphique pour l’application de création de comptes dans une banque. L’interface une fois réalisée sera
constituée des éléments présents dans la Figure ci-dessous.
• Création des composants pour le numéro de compte, le propriétaire et le solde initial
import tkinter as tk v=tk.IntVar()
from tkinter import ttk case1=tk.Radiobutton(variable = v, value='1')
from BibCompte import Compte, CompteEpargne, CompteCourant case2=tk.Radiobutton(variable = v, value='2')
case1.config(text='Courant')
root = tk.Tk() case2.config(text='Epargne')
root.geometry('1200x600') v.set ('1')
numLabel = tk.Label(text='Numéro:') TypeLabel.place(x=20, y=110 )
numLabel1=tk.Label(text='1') case1.place (x= 100, y =110)
numLabel1.config(state=tk.DISABLED) case2.place (x= 240, y =110)
numLabel.place (x= 20, y =20) case1.config(state=tk.NORMAL)
numLabel1.place (x= 100, y =20) tauxIntLabel = tk.Label(text='Taux Interêt')
propLabel = tk.Label(text='Propriétaire:') tauxIntText=tk.Entry('')
propText=tk.Entry('') pourcentLabel = tk.Label(text='%')
propLabel.place (x= 20, y =50) tauxIntLabel.place(x=20, y=140 )
propText.place (x= 100, y =50) tauxIntText.place (x= 100, y =140)
SoldeLabel = tk.Label(text='Solde Initial:') pourcentLabel.place (x= 240, y =140)
SoldeText=tk.Entry('') decouvertLabel = tk.Label(text='M. Découvert')
euroLabel = tk.Label(text='Euro') decouvertext= tk.Entry('')
SoldeLabel.place (x= 20, y =80) decouvertEuroLabel = tk.Label(text='Euro')
SoldeText.place (x= 100, y =80) decouvertLabel.place(x=20, y=170 )
euroLabel.place(x=240,y=80) decouvertext.place (x= 100, y =170)
TypeLabel = tk.Label(text='Type:') tauxIntText.config(state=tk.DISABLED)
• Définition de la fonction add() permettant d’ajouter un nouveau compte dans le tableau avec les données saisies
####################################################
o=""
def add():
print(str(v.get()))
if(str(v.get()) =='1'):
o='courant'
c = CompteCourant.CompteCourant(propText.get(), SoldeText.get(), decouvertext.get())
cc = ('', str(Compte.Compte.nb), propText.get(), SoldeText.get(), 'Courant', '',
decouvertext.get())
else:
o='epargne'
c = CompteEpargne.CompteEpargne(propText.get(), SoldeText.get(), tauxIntText.get())
cc = ('', str(Compte.Compte.nb), propText.get(), SoldeText.get(), 'Epargne',
tauxIntText.get(),'')
numLabel1.config(text=str(Compte.Compte.nb+1))
tv.insert('','end', values=cc)
propText.delete(0,'end')
SoldeText.delete(0,'end')
decouvertext.delete(0,'end')
tauxIntText.delete(0,'end')
• Définition de la fonction modifVisib() permettant gérer la visibilité des champs de texte taux interêt et montant de découvert
• Programmation de l’évènement sur le bouton ainsi que sur les boutons radio
def modifVisib(evt):
print(str(v.get()))
if (str(v.get()) == '2'):
tauxIntText.config(state=tk.DISABLED)
decouvertext.config(state=tk.NORMAL)
if (str(v.get()) == '1'):
tauxIntText.config(state=tk.NORMAL)
decouvertext.config(state=tk.DISABLED)