M102: Acquérir Les Bases de L'algorithmique: Développement Digital (Tronc Commun)
M102: Acquérir Les Bases de L'algorithmique: Développement Digital (Tronc Commun)
M102: Acquérir Les Bases de L'algorithmique: Développement Digital (Tronc Commun)
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
2
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.
02 - FORMULER UN TRAITEMENT
Reconnaitre la structure d’un algorithme
Reconnaitre les bases
Structurer un algorithme
Structurer les données
03 - PROGRAMMER EN PYTHON
Transformer une suite d’instructions algorithmiques en suite
d’instructions Python
Manipuler les données
• Analyser un problème
• Identifier les approches d’analyse d’un problème
066 heures
heures
Activité 1
Analyser un problème
Compétences visées :
• Bonne compréhension du contexte d’un problème
• Repérage des entrées du problème
• Repérage des sorties du problème
• Distinction des sorties calculées et des sorties
non-calculées
• Distinction des différents types de traitements
Recommandations clés :
• Faire une bonne lecture de l’énoncé du problème proposé et se
focaliser sur le « quoi faire ? » sans se préoccuper du
«comment faire ? »
1,5 heures
1,5 heures
CONSIGNES
1- Pour le formateur
• Demander de dégager le contexte du problème
2- Pour l’apprenant
• Dégager le contexte d’un problème
3 - Conditions de réalisation
• Utilisation des supports pédagogiques fournis par le formateur
4 - Critères de réussite
• Le stagiaire est-il capable de :
- Comprendre la contexte du problème ?
- Décortiquer le problème en des sous-problèmes ?
- Dégager les entrées/sorties d’un problème ?
- Déterminer le type de traitement nécessaire pour résoudre un
problème
Activité 1 :
Analyser un problème
Exercice 1
• Mr. Ali est un fermier qui fabrique du fromage artisanal. Il achète le lait aux agriculteurs de son village à 6Dh le litre. Il faut 10 litres de lait pour fabriquer 1kg de
fromage. Il vend son fromage à 60Dh le kg.
• Vous disposez de la quantité de lait achetée par Mr. Ali pour tout un mois, on souhaiterait calculer :
2. Le net à gagner mensuel du fermier sachant que Mr. Ali a vendu tout le fromage fabriqué et qu’il a payé 1000 Dh le m2 pour la location d’un stand de 3
m2 sur la place du marché du village et des frais de transport de 500 Dh par jour sachant qu’il se rend au marché 8 fois par mois.
A vous de jouer
Le nombre de litres de lait pour fabriquer 1kg de fromage est une information importante : a. Oui b. Non
3. Donner les autres sorties du problème (celles qui doivent être calculées pour déterminer le résultat final ou les résultats finaux).
Exercice 2
• Les articles du magasin possèdent : une référence (un code), un libellé et un prix unitaire hors taxe. A partir d’une quantité d’un article achetée à un prix hors taxe,
on souhaite établir les factures de 3 clients dont on connaît leurs noms. On suppose que chacun d’eux a acheté un seul article.
• La facture fera apparaître le nom du client et le montant toute taxe (TTC), sachant qu’on applique un taux de TVA de 15% et le client bénéficie d'une remise de 2%
sur le montant de ces achats.
• On souhaite aussi attribuer à chacun de ces clients une catégorie sachant que le magasin classe ses clients dans 3 catégories selon des critères :
✓ Catégorie ‘A’ : le client est titulaire d’une carte de fidélité de moins de 2 ans.
✓ Catégorie ‘B’ : le client est titulaire d’une carte de fidélité de plus de 2 ans.
✓ Catégorie ‘C’: le client est titulaire d’une carte de fidélité de plus de 2 ans et il a plus de 5000 points de fidélité
A vous de jouer
Exercice 1
Demande une description du contexte :
Dans un contexte de production (fabrication de fromage à partir de lait), le problème consiste à calculer la quantité de fro mage fabriqué par un fermier ainsi que le net à
gagner à partir d’un ensemble de données fournies
Le nombre de litres de lait pour fabriquer 1kg de fromage est une information importante. a. oui b. non a
Exercice 1 (suite)
3. Charge de location d’un stand de 3m2 : 1000 Dh le m2
4. Les frais de transport (8 fois par mois) : 500 Dh par jour
• le revenu mensuel
Exercice 2
1. liste des entrées du problème :
2. Le résultat à déterminer
1. Nom du client1/Client2/client3
a. Montant toute taxe (prixTTC) après la remise pour client1/Client2/client3
2. Code de l’article acheté par client1/Client2/client3
b. Catégorie du client1/Client2/client3
3. Libellé de l’article acheté par client1/Client2/client3
3. Les autres sorties du problème
4. Prix hors taxe de l’article par client1/Client2/client3
Pour chaque client, afin de calculer le prixTTC après la remise, on aura besoin
5. Quantité de l’article acheté par client1/Client2/client3 de calculer :
8. Remise=2%
Exercice 2 (suite)
Les différents types de traitements appliqués pour aboutir aux résultats finaux.
1. Traitement séquentiel : Cas d’un seul client i 2. Traitement Conditionnel (Déterminer catégorie Client i)
oui
Déterminer catégorie
client i
Catégorie B
Émettre les résultats
relatifs au client i
Exercice 2 (suite)
3. Traitement itératif 4. Traitement récursif
Fournir les données relatives au client i Si on considère N le nombre de produits achetés par un client
Calculer prixTTC avant le remise pour client i TotalPrixHT(N)=prixTTCproduitN (prix TTC du produit acheté)
Compétences visées :
Recommandations clés :
1,5 heures
1,5 heures
CONSIGNES
1- Pour le formateur
• Demander de décortiquer le problème en sous-problèmes pour donner une
analyse ascendante ou descendante
2- Pour l’apprenant
• Décortiquer le problème en sous-problèmes pour donner une analyse
ascendante ou descendante
3 - Conditions de réalisation
• Utilisation des supports pédagogiques fournis par le formateur
• Suivie des instructions verbales ou écrites du formateur
• Travail seul ou en groupe
4 - Critères de réussite
• Le stagiaire est-il capable de :
- Décortiquer le problème en des sous-problèmes?
- Proposer une analyse ascendante d’un problème ?
- Proposer une analyse descendante d’un problème ?
Activité 2 :
Approches d’analyse d’un problème
Exercice1
• Hakim est un peintre en bâtiment. Il a remporté un marché pour peindre l’édifice d’un grand immeuble. Le bâtiment est composé de 6 étages. Chaque étage
est facturé par Hakim à 6000 Dh. Pour peindre un étage, Hakim achète 10 kg de peinture, pour 200 Dh le Kg. Hakim emploie également 3 jeunes apprentis
pour l’aider. Chaque apprenti est payé 10 Dh par heure. Une journée de travail est d’une durée de 6 heures et il faut 4 jours à l’équipe de peintre pour finir un
étage.
On souhaite calculer :
A vous de jouer
Exercice 1
• Deux sous-problèmes :
PrixTotal= ?
PrixTotal
PrixEtage *
NombreEtages
6000 6
Net à gagner?
NetGagné
( CoûtPeinture + ChargesApprentis )
PrixTotal -
6000 6 6
HeureApprenti 3
Quantite/étage * Prix/kg * NbreHeures * NbreJoursT
4 6
Copyright - Tout droit réservé - OFPPT 20
Activité 2 :
Correction
PrixEtage * NombreEtages
PrixTotal
Net à gagner ?
JoursParEtage * JoursParEtage
PrixTotal
NetGagné
206 heures
heures
Activité 1
Reconnaitre la structure d’un algorithme
Compétences visées :
Recommandations clés :
11,5heure
heures
CONSIGNES
1- Pour le formateur
• Rappeler les notions de variables et constantes ainsi que leurs types
2- Pour l’apprenant
• Définir les notions de variable/constante
4 - Critères de réussite
• Le stagiaire est-il capable de :
Exercice 1
( a < b ) ET ( c >= d )
NON ( a < b ) OU ( c ≠ d )
Exercice 2
Donner toutes les raisons pour lesquelles l’algorithme suivant est incorrect :
1. Incorrect
2. y : Entier
3. z : Réel
4. Début
5. z x + 2
8. y5y + 3
9. Fin
Exercice 3
On souhaite écrire un algorithme qui permet de calculer la somme, la moyenne, la valeur la plus grande, la valeur la plus petite et le nombre de valeurs positives d'un
nombre d'entiers saisis. Le nombre d'entier à saisir est une donnée.
Exercice 4
On souhaite écrire un algorithme permettant de calculer la facture d’un client ( factureC) sachant qu’il est possible d’acheter 2 articles a1 et a2.
Exercice 4 (suite)
4. A partir des variables et des constantes listées, donner l’expression permettant d’évaluer la facture d’un client.
• Le client a acheté 5 exemplaires de a1 ayant un prix HT=5Dh et 3 exemplaires de a2 ayant un prix HT=7Dh .
Exercice 1
Priorité Opérateurs
1 - signe négatif
2 () parenthèses
3 ^ puissance
4 * et / multiplication et division
5 + et - addition et soustraction
Exercice 1 (suite)
2. Pour a = 4, b = 5, c = -1 et d = 0, évaluation des expressions logiques suivantes :
1 3 2 2 1 4 3
(a < b) ET (c>=d) NON(a < b) OU (c # b)
1
1 2 vrai vrai 3
vrai faux
a<
2
faux
faux 3
vrai 4
Exercice 2
3. Les raisons pour lesquelles l’algorithme suivant est incorrect :
1.Incorrect
2. y : Entier
3. z : Réel
4. Début
5. z:=x + 2
8. y:= 5y + 3
9. Fin
Exercice 3
1. Entrées du problème :
2. Variables du problème :
Copyright - Tout droit réservé - OFPPT 33
Activité 1 :
Correction
Exercice 3 (suite)
•
FinSi FinPour
Var Moyenne : réel Pour i de 2 à N faire Moyenne ← Somme \ N
• Début Ecrire (“Saisir un nombre”) Ecrire (“La valeur la plus grande = ”, Max)
Ecrire (“La valeur la plus petite = ”, Min)
Lire( Nb) Ecrire (“La Somme = ”, Somme)
• Nb_pos ← 0 Si (Nb > Max) Alors
Ecrire (“Moyenne = ”, Moyenne);
Ecrire (“Nombre d’entiers positifs = ”, Nb_pos)
Min ← Nb
• Ecrire (“Saisir un nombre”) FinSi
• Lire( Nb)
Copyright - Tout droit réservé - OFPPT 34
Activité 1 :
Correction
Exercice 4
1. Entrées du problème :
• prixHTA1 :prixHT de a1
• QteA1 : Quantité de a1
• prixHTA2 : prixHT de a2
• QteA2: Quantité de a2
prixHTA1: réel, QteA1: entier, prixHTA2: réel, QteA2: entier, factureC: réel
Exercice 4 (suite)
4. factureC=(prixHTA1*(1+tva))*(1-remise)*qteA1 + (prixHTA2* (1+tva))*(1-remise)*qteA2
5. factureC=(5*(1+0.1))*(1-0.05))*5 + (3*(1+0.1)*(1-0.05))*2=26.125+6.27=32.395
6. Algorithme correspondent :
factureClient
Const
tva= 0.1: réel
remise=0.05: réel
Var
prixHTA1, prixHTA2: réel
QteA1, QteA2: entier
factureC: réel
Début
factureC<-(prixHTA1*(1+tva))*(1-remise)*qteA1 + (prixHTA2* (1+tva))*(1-remise)*qteA2
Ecrire (‘’La facture du client est ‘’+ factureC)
Fin
Recommandations clés :
051,5heures
heures
CONSIGNES
1- Pour le formateur
• Rappeler la structure générale d’un algorithme
2- Pour l’apprenant
• Définir la structure générale d’un algorithme
3 - Conditions de réalisation
• Utilisation des supports pédagogiques fournis par le formateur
4 - Critères de réussite
• Le stagiaire est-il capable de:
Exercice 1
Une école désire mettre au point un programme qui permet à chaque élève d'entrer ses notes et de calculer ainsi sa moyenne. Ecrire un algorithme qui lit donc 4 notes
N1, N2, N3 et N4 et calcule et affiche la moyenne obtenue. Les coefficients respectifs C1, C2, C3,C4 sont définies par l'école (C1 : 1, C2 : 1,5, C3 : 2, C4 : 1)
Exercice 2
Un atelier découpe des pièces métalliques ayant la forme suivante :
Ecrire un algorithme qui lit les valeurs de m et l, calcule la surface de la pièce correspondante et son périmètre, avant de les afficher.
Exercice 3
Écrire un algorithme qui lit un entier N > 0 puis saisit une suite de N quadruplets (un quadruplet est une suite de 4 entiers compris entre 0 et 20). Pour chacun des
quadruplets, l’algorithme doit afficher le minimum et le maximum des 4 nombres. Enfin, on affichera le plus petit et le plus grand de tous les nombres.
Exercice 4
Écrire un algorithme qui étant donnés deux entiers représentant un mois et une année, affiche le nombre de jours du mois de cette année. On prendra en considération
l’année bissextile (divisible par 4 et ne se termine pas par 00, ou elle se termine par 00 et son quotient par 100 est divisi ble par 4).
Exercice 5
On rappelle que :
0! = 1
n! = n × (n − 1) × (n − 2) × . . . × 2 × 1 pour tout n ≠ 0
Exercice 6
Écrire un algorithme qui lit 2 entiers positifs a et b calcule et affiche leur plus grand commun diviseur (pgcd).
Vous pouvez utiliser l’algorithme d’Euclide qui est basé sur le principe suivant :
pgcd(a, b) = a si b = 0
pgcd(a, b) = pgcd(b, a mod b) si b ≠ 0
Exercice 7
1. Ecrire un algorithme qui lit le nombre total de kilomètres et le nombre de jours de location ainsi que les tarifs t1, t2, t3 puis calcule et affiche le coût de tarification
pour un forfait au kilomètre.
Pendant la période de fin d’année, cet organisme propose aussi un forfait journalier de location qui consiste à un kilométrage illimité au prix t4 par jour. Pour cette
période, l’assurance est comptabilisée comme les autres périodes de l’année.
2. Apporter les modification nécessaires sur l’algorithme proposé précédemment pour lire le tarif t4, calculer et afficher le coût de tarification pour un forfait journalier
3. Apporter les modification nécessaires pour indiquer au client le forfait le plus avantageux.
Exercice 1
Moyenne
• Rappeler la structure générale d’un algorithme Var N1, N2, N3, N4, M : réel
• Questionner sur les variables de l’algorithme et leurs types C1, C2, C3, C4 : entier
• Var N1, N2, N3, N4, M : réel Début
• C1, C2, C3, C4 : entier Lire( N1)
• Questionner sur les instruction E/S Lire(N2)
• Lire(variable) et écrire (variable) Lire(N3
• Questionner sur la formule pour le calcul de la moyenne Lire( N4)
• M := ((N1*C1)+(N2*C2)+(N3*C3)+(N4*C4)) / (C1+C2+C3+C4) C1 := 1, C2 := 1,5, C3 := 2, C4 := 1
M := ((N1*C1)+(N2*C2)+(N3*C3)+(N4*C4)) / (C1+C2+C3+C4)
Fin
Exercice 2
Rappel : Surface cercle = 3.14*r2
Un atelier découpe des pièces métalliques ayant la forme suivante : Périmètre cercle = 2*r*3.14
Mesures
Const Pi=3.14
Var m, l, s, p, r : réel
Debut
Rappeler la structure générale d’un algorithme
Lire (m , l)
Questionner sur les variables de l’algorithme
r:=m /2
Var m, l, s, p, r : réel
p : = 2 * l + (2 * r * Pi)
Questionner sur les formules pour le calcul de la surface et du périmètre de la Figure :
s : = ( l * m ) + (Pi * r * r )
r := m / 2
écrire ( ‘’le périmètre est :’’,p)
p := 2 * l + (2 * r * 3.14)
écrire ( ‘’la surface est :’’,s)
s := ( l * m ) + ( 3.14 * r * r )
fin
Exercice 3
• Questionner sur les variables de l’algorithme
N (entier): le nombre de quadruplets
• Questionner sur les structures qu’il est possible d’utiliser pour résoudre le problème
• Structure répétitive pour :
Exercice 3
Répéter
Lire( x )
Jusqu’à x >= 0 ET x<=20
Si x < min Alors
min := x
finSi
Si x > max Alors
max := x
finSi
FinPour
Exercice 4
• m ➔ mois (entier)
• a ➔ année (entier)
• j ➔ jour (entier)
• Rappeler l’expression permettant de vérifier si une année a est bissextile ou non
• si (a mod 4 = 0) ET ( (a mod 100 ≠ 0) OU (a mod 400 = 0)) alors a est bissextile sinon non
• Questionner sur la possibilité d’utiliser la structure alternative Si_alors_sinon pour écrire l’algorithme
• Non car dans ce cas l’emboîtement de si en cascade est fastidieux à écrire. Il est préférable d’utiliser le schéma conditionnel généralisé.
• Demander de lister les variables sur lesquelles un test sera effectué
• La variable a pour déterminer s’il s’agit d’une année bissextile et ainsi déterminer le nombre de jours pour le mois de février
• La variable m pour déterminer le nombre de jours pour les autres mois
• Guider les stagiaires dans l'écriture de l’algorithme en se basant sur les résultats obtenus précédemment
Exercice 4 (suite)
Nb-jours 4 :j := 30
Var m , a , j: entier 6 : j := 30
Debut 9 : j := 30
lire( m , a ) 11 : j := 30
cas m de : 2 : si (a mod 4 = 0) ET ( (a mod 100 ≠ 0) OU (a mod 400 = 0)) alors
1 : j := 31 j := 29
3 : j := 31 sinon
5 : j := 31 j := 28
7 : j := 31 finsi
8 : j := 31 default : j := 0
10 : j := 31 Fincas
12 : j := 31 écrire(‘’Le nombre de jours est :’’, j)
Fin
Exercice 5 Factorielle
0! = 1 Debut
n! = n × (n − 1) × (n − 2) × . . . × 2 × 1 pour tout n ≠ 0
Répéter
• Définir les structures à utiliser pour résoudre le problème
Lire( n )
- Structure répétitive répéter..jusqu’à pour vérifier la valeur de n
Jusqu’à n >= 0
puisque le nombre d’itérations n’est pas connu
res := 1
La condition d’arrêt est n>=0
Pour i de 1 à n Faire
- Structure répétitive pour… faire pour calculer le factorielle puisque le
res := res * i
nombre d’itération est connu (n)
FinPour
Exercice 6
PGCD
• Rappeler la définition de la fonction pgcd
Var a , b , c: entier
pgcd(a, b) = a si b = 0 Debut
pgcd(a, b) = pgcd(b, a mod b) si b ≠ 0 Répéter
Lire( a )
Jusqu’à a > 0
• Définir les structures à utiliser pour résoudre le problème
Répéter
- Structure répétitive répéter..jusqu’à pour vérifier la valeur de a et b( Lire( b )
supérieure à 0) puisque le nombre d’itérations n’est pas connu Jusqu’à b > 0
TantQue (b ≠ 0 ) faire
La condition d’arrêt est a>0 (b>0)
c := a mod b
- Structure répétitive tantQue… faire pour calculer le pgcd la condition a := b
b ≠ 0 doit être vérifiée pour chaque itération b := c
FinTQ
Ecrire ( ‘’Le plus grand commun diviseur est : ‘’ , a )
• Ecrire l’algorithme factorielle correspondent
Fin
Exercice 7
1. Demander de lister les résultats calculés pour la résolution du problème ainsi que leurs types
• Guider les stagiaires dans l'écriture de l’algorithme en se basant sur les résultats obtenus précédemment
Exercice 7 (suite)
Algorithmelocation Répéter Ecrire (‘’ tarifForfaitKilo=‘’ +
tarifForfaitKilo)
Var Ecrire (‘’donner le nombre de jour’’
Fin
nbTotalKilo: entier Lire(nbJour)
Début Lire(ass)
Lire(t2) Sinon
• Guider les stagiaires à modifier l’algorithme en se basant sur les résultats obtenus …………………………………………
précédemment
Ecrire(‘’donner tarif t4’’)
Lire (t4)
………………………………………………
Fin
Exercice 7 (suite)
3. Amélioration de l’algorithme pour choisir le forfait le plus avantageux Algorithmelocation
……………………………………….
Début
…………………………………………
Si tarifForfaitKilo< TarifJournalier alors
Ecrire(‘’la forfait au kilomètre est plus avantageux’’)
Sinon
si tarifForfaitKilo> TarifJournalier alors
Compétences visées :
071,5heures
heures
CONSIGNES
1- Pour le formateur
2- Pour l’apprenant
3 - Conditions de réalisation
4 - Critères de réussite
Exercice 1
Faire la trace d’exécution de l’algorithme AlgParamètres suivant : ALgParamètres
Var
i, j : Entier
Début
i:= 1
j:=2
transmit(i,j)
Ecrire(”i = ”,i, ”j = ”,j)
Fin
marcher()
licorne
Exercice 2 Var
Var
tempsMarche : entier
Soit l’algorithme licorne suivant contenant la définition de chacune des
taille : entier
procédures dormir() et marcher(). Début
charge : entier
tempsMarche=60
Pour chacune des instruction d’écriture dites s’il s’agit d’une instruction
correcte ou non. Justifier votre réponse Ecrire(ecrire(tempsSommeil )
dormir()
Ecrire(tempsMarche)
var tempsSommeil :entier
Ecrire(charge)
Début
Ecrire(taille)
temps=120
Fin
Ecrire(tempsSommeil )
Ecrire(tempsMarche)
Début
Ecrire(charge)
Ecrire(ecrire(tempsSommeil )
Ecrire(taille)
Ecrire(tempsMarche)
Fin
Ecrire(charge)
Ecrire(taille)
Fin
Exercice 3
1. Ecrire une fonction qui permet de lire deux entiers X et Y strictement positifs puis apporter les modifications nécessaires pour transformer cette fonction en procédure
2. Ecrire une fonction qui permet de retourner la somme des diviseurs d’un entiers positif puis apporter les modifications nécessaires pour transformer cette fonction en
procédure
Exercice 4
Ecrire une procédure qui permet de dessiner un triangle isocèle d’étoiles de hauteur h en intégrant une procédure qui permet d’afficher une ligne.
*
***
*****
Exercice 5
Un rationnel est caractérisé par son :
— Numérateur (entier)
— Dénominateur (entier)
2. Une procédure somme-rat permettant de calculer et d’afficher la somme de deux nombres rationnels
3. Une procédure produit_rat permettant de calculer et d’afficher le produit de deux nombres rationnels
Indication: On considère la fonction nb_div (entier, entier) prédéfinie qui retourne le nombre de diviseur commun de deux entiers donnés.
Exercice 5 (suite)
Exercice 1
Espace mémoire défini pour les variables du programme principal Espace mémoire défini pour les variables de la procédure
i=1 a=1
101
j=2 b=2
102 102
i=1 j=102
63
Var Var
• Rappeler la différence entre variable globale et une variable
tempsMarche : entier
taille : entier
locale
charge : entier Début
• La portée d’une variable globale est totale : tout
tempsMarche=60
sous-algorithme du programme principal peut utiliser cette
dormir() Ecrire(ecrire(tempsSommeil )→NO(variable locale à
variable dormir())
var tempsSommeil :entier
• La portée d’une variable locale est uniquement le Ecrire(tempsMarche)→OK
Début
sous-algorithme qui la déclare Ecrire(charge)→OK
temps=120
Ecrire(taille)→OK
Ecrire(tempsSommeil )→OK
Fin
Ecrire(tempsMarche)→NO (variable locale à
marcher())
Ecrire(charge)→OK Début
Ecrire(taille)→Ok
Fin
Exercice 3
1. Demander la définition d’une fonction/procédure permettant de retourner un entier positif saisi au clavier
Contrairement à une procédure, une fonction a une valeur de retour. Une procédure est un bloc d'instruction qui a la possibil ité de modifier la valeur d'un ou de
plusieurs de ses arguments. Une fonction n'a pas cette possibilité-là.
Exercice 3 (suite)
2. Demander une définition d’une fonction/procédure permettant de retourner la somme des diviseurs d’un entier positif
• Demander l’écriture de l’algorithme principal faisant appel aux procédures et fonctions définies précédemment.
• Demander de proposer 2 versions. La première utilise uniquement les fonctions alors que la deuxième ne fait appel qu'aux procédures.
Exercice 3 (suite)
Exercice 4
Var j : entier
Ligne_étoile permet d’afficher une ligne d’étoile en
précisant le nombre d’espaces à considérer ainsi que le
(nb_espace : entier, Début
nombre d’étoiles nb_etoile : entier ) Pour i de 1 à h faire
• Proposer de définir la procédure triangle_etoiles
• Var j : entier
Ligne_etoile (h-i, 2*i – 1)
permettant de dessiner le triangle isocèle
FinPour
Exercice 5
Saisie_rat(var num : entier, var denom : entier) somme_rat( num1 : entier, denom1 : entier, num2 : entier, denom2 : entier,
Début var numS : entier, var denomS : entier )
Lire(denom) Fin
Fin
Inverse_rat( var num1 : entier, var denom1 : entier)
Exercice 5 (suite)
comparaison_rat( num1: entier, denom1 : entier, num2: entier, denom2 : entier ) est-irréductible( num1: entier, denom1 : entier) :booléen
Début Début
Si (num1* denom2 )>(num2* denom1 ) alors Si nb_div(num1,denom1)=1
Ecrire (‘’R1 est supérieur à R2’’) retourner vrai
Sinon Sinon
Si (num1* denom2 )<(num2* denom1 ) alors retourner faux
Ecrire (‘’R2 est supérieur à R1’’) Fin
Sinon
affiche_rat( num1: entier, denom1 : entier)
Ecrire (‘’R1 =R2’’)
Début
FinSi
Ecrire(num1 + ‘’/’’ + denom1)
Fin
Fin
Exercice 5 (suite)
Début
Si (num1* denom2 )>(num2* denom1 ) alors
Ecrire (‘’R1 est supérieur à R2’’)
Sinon
Si (num1* denom2 )<(num2* denom1 ) alors
Ecrire (‘’R2 est supérieur à R1’’)
Sinon
Exercice 5 (suite)
ManipRationnel Inverse_rat(num2,denom2)
var Ecrire (‘’l’inverse de R2 est’’)
Num1, denom1, num2, denom2 : entier affiche_rat(num2,denom2)
NumS, denomS : entier si est-irréductible(num2,denom2) alors
NumP, denomP : entier Ecrire(‘’R2 est irréductible’’)
Début Sinon
saisie_rat(num1,denom1) Ecrire(‘’R2 est non irréductible’’)
saisie_rat(num2,denom2) FinSi
somme_rat(num1,denom1, num2,denom2, NumS, denomS ) Fin
Ecrire (‘’La somme des deux rationnels est’’)
affiche_rat(NumS, denomS )
produit_rat(num1,denom1, num2,denom2, NumP, denomP )
Compétences visées :
• Manipuler les tableaux vecteurs
• Manipuler les matrices
• Manipuler les chaines de caractères
Recommandations clés :
• Utiliser les procédures et les fonctions pour faciliter la
résolution des problèmes
071,5heures
heures
CONSIGNES
1- Pour le formateur
2- Pour l’apprenant
3 - Conditions de réalisation
4 - Critères de réussite
Exercice 1
On souhaite écrire un algorithme pour manipuler un tableau T de taille N / N=20. L’algorithme contient un ensemble de procédu res et fonctions
2. Ecrire une procédure afficher_Tab() permettant d’afficher les éléments d’un tableau T passé en paramètre
3. Ecrire une fonction rechercher_Tab() qui permet de vérifier si un entier existe dans un tableau T ou non. La fonction retourne vrai si cet élément existe et faux sinon
4. Ecrire une procédure ajouterElement_Tab() permettant d’ajouter un élément à un tableau T donné en paramètre
6. Ecrire une fonction est-ordonné() qui étant donné un tableau contenant N entiers (N ≤ 100) (on suppose le tableau rempli) affiche :
Exercice 2
On souhaite programmer le jeu du pendu. Le but de ce jeu consiste à trouver un mot caché dont on connaît la taille, et ceci en proposant un caractère à chaque essai.
Si le joueur propose un caractère qui existe dans le mot on l’affiche où il se trouve dans le mot (pour toutes ses occurrences) et cet essai n'est pas compté. Si le
caractère n’existe pas dans le mot, cela compte pour un essai.
Pour programmer ce jeu, l’idée est d’utiliser 2 tableaux de caractères. Un premier tableau Tcar pour placer le mot à trouver et un autre tableau TEssai contenant l’état
du jeu.
Tessai est de même longueur que Tcar mais rempli par le caractère ‘*'. Lorsqu’un caractère est trouvé, le tableau TEssai est mis à jour: on place le caractère trouvé à la
place du ‘*’ pour chacune de ses occurrences.
A vous de jouer
1. Ecrire une fonction MotValide qui vérifie la validité d’un mot. Cette fonction retourne vrai si le mot est valide et faux si non sachant qu’un mot est valide si :
Indications:
• les codes ascii sont obtenus par l'instruction ascii("…") . Exemple ascii(‘A’)=65.
2. Ecrire la procédure convertirCH qui convertit un mot en un tableau de caractères. Chaque case du tableau contient un caractère du mot.
Exemple : mot=‘’oiseau’’
convertirCH
o i s e a u
Exercice 2 (suite)
3. Ecrire la procédure initialiserSolution qui prend en paramètre un tableau de caractères Tcar et qui demande à l'utilisateur de saisir le mot à trouver et qui remplit
Tcar par ce mot (utiliser la fonction MotValide et la procédure convertirCH). Cette procédure prend aussi en paramètre n: la taille du mot à trouver
4. Ecrire la procédure creerEssai qui permet remplir le tableau de caractères TEssai par le caractère ‘*'. Les paramètres de la procédure sont: n et TEssai
Exemple n=6
* * * * * *
5. Ecrire la procédure afficherC prenant en paramètre Tcar et n et affiche Tcar à l'écran comme une chaîne de caractères
6. Ecrire la fonction jouer prenant en paramètre la solution (tableau de caractères Tcar ) , le tableau de caractères TEssai, un caractère et n. Cette fonction retourne vrai
si le caractère est présent dans la solution et met à jour le tableau TEssai : le caractère doit remplacé à la bonne place le caractère ‘*' (pour toutes ses occurrences).
Le cas échéant, retourne faux.
Exercice 2 (suite)
Exemple :
Tcar :
o i s e a u
Tessai :
* * * * * *
Caractère=‘s’
Tessai :
* * s * * *
7. Ecrire la fonction estFini qui prend en paramètre TEssai et n. Elle retourne vrai si tous les caractères du mot ont été trouvés et faux si non.
Exercice 2 (suite)
Exercice 3
Écrire un algorithme qui lit 2 entiers N et P ( > 0 et ≤ 100) puis saisit N*P entiers et les stocke dans une matrice ligne par ligne. La matrice est d'une taille de N lignes et P
Colonnes.
Ensuite, l’algorithme affiche le contenu de la matrice ligne par ligne et alternativement de gauche à droite puis de droite à gauche.
Exercice 1
remplir_Tab ( Var T : Tab)
1. Procédure remplir_Tab() Var
i : entier
• Questionner sur le type de structure nécessaire pour remplir le tableau
Debut
Pour i de 1 à N Faire
Structure répétitive pour.. Faire puisque le nombre d’itérations est connu
Ecrire(‘’entrer un entier ‘’)
• Questionner sur le type de paramètre Lire(T[i])
Fin pour
Paramètre E/S (ajout du mot clé var)
Fin
afficher_Tab() (T : Tab)
2. Procédure afficher_Tab() var
• Questionner sur le type de structure nécessaire pour afficher le tableau i : entier
Debut
Structure répétitive pour.. Faire puisque le nombre d’itérations est connu Ecrire(« Les elements du tableau sont : »)
Pour i de 1 à N faire
• Questionner sur le type de paramètre Ecrire T[i])
Paramètre d’entrée Fin pour
Fin
Exercice 1 (suite)
Exercice 1 (suite)
Exercice 1 (suite)
Est_ordonné(T:Tab) : booléen
Var
6. Fonction est_ordonnée I, x : entier
test : booléen
• Demander de préciser le type de la structure itérative à utiliser pour la résolution de ce problème Début
test := vrai
• Quelle est la condition d'arrête de la structure itérative TantQue ? Puisque le nombre i := 1
Tant que i < N ET test Faire
d’itérations n’est pas connu à l’avance…
Si T[ i ] > T[ i+1 ] Alors
test := faux
• Donner une indication: Ajouter une variable booléenne Test qui est initialisée à vrai et prend faux si Finsi
T[i]>T[i+1] i := i+1
FinTQ
Exercice 1 (suite)
Fin
Exercice 2
MotValide(mot : chaine) :booléen
Var
1. fonction MotValide qui vérifie la validité d’un mot val : booléen
i :entier
• Questionner sur les types des structures nécessaires pour la définition de la Début
fonction Si (long(mot)<=25) ET (long(mot)>=4) alors
Structure conditionnelle pour vérifier la longueur d’un mot val=vrai
Structure itérative pour le parcourir du mot et la vérification des lettres majuscules i=1
TantQue (val=vrai ) faire
Si (65<=ascii(mot[i])) ET (90>=ascii(mot[i])) alors
i=i+1
Sinon
val=faux
FinTQ
Retourner val
Sinon
Retourner faux
Fin
Exercice 2 (suite)
2. procédure convertirCH qui convertit un mot en un tableau de caractères. Chaque case du tableau contient un caractère du mot.
var
i : entier
Début
Pour i de 1 à long(mot)
Tcar[i]mot[i]
FinPour
Fin
Exercice 2 (suite)
var
i : entier
Début
convertirCH(mot,Tcar)
FinSi
Fin
Exercice 2 (suite)
creerEssai (var TEssai : tableau [1..25] de caractère, n: entier) afficherC (var Tcar : tableau [1..25] de caractère, n: entier)
var var
i : entier i : entier
Début Début
FinPour FinPour
Fin Fin
Exercice 2 (suite)
6. Fonction jouer jouer (var Tcar : tableau [1..25] de caractère, TEssai : tableau [1..25] de caractère
c : caractère, n: entier) : booléen
• Questionner sur les paramètres de cette fonction et leurs types var
Exercice 2 (suite)
• Questionner sur le type de retour de cette fonction TantQue (b= vrai) et (i<=n) faire
Si TEssai [i]=‘*’ alors
Un booléen
bfaux
• Questionner sur les types des structures nécessaires sinon
i=i+1
Structure conditionnelle pour vérifier s’il existe encore une lettre non dévoilée
FinSi
Structure répétitive pour parcourir le tableau→ on utilise la structure Tant que
FinTQ
puisque on va pas forcément parcourir tout le tableau
Retourner b
Fin
Exercice 2 (suite)
Exercice 3
Exercice 3 (suite)
• Demander d’écrire un algorithme permettant un affichage accordéon de la matrice en se basant sur les étapes précédentes
Affiche_accordéon deb := 1
Var fin := P
M: tableau[1..100,1..100] d’entiers k:=1
N,P : entiers Pour i de 1 à N Faire
i , j, deb, fin, v : entier Pour j de deb à fin (pas= k) Faire
Début écrire( M[ i , j ] )
Lire(N) Finpour
Lire(P) Permuter(deb,fin)
saisie_matrice( M, N, P) k:=-k
affiche_matrice( M, N, P) Finpour
Fin
246 heures
heures
Activité 1
Transformer une suite d’instructions
algorithmiques en suite d’instructions
Python
Compétences visées :
• Manipuler les bases du langage de programmation Python (variable
d’entrée, variable de sortie les instructions d’affections, les
instructions d’entrées/sorties, les structures itératives les structures
conditionnelles etc.)
• Appliquer les bonnes pratiques de la programmation Python ainsi
que l’optimisation d’un code python
Recommandations clés :
• Faire une bonne lecture des exercices
• Réfléchir à une solution en pseudo-code et la traduire en Python
• Garantir une optimisation du code en appliquant les bonnes
pratiques, les commentaires, etc.
091,5heures
heures
CONSIGNES
1- Pour le formateur
2- Pour l’apprenant
4 - Critères de réussite
Exercice 1 :
• Afficher le pus petit, le plus grand entier saisi ainsi que la moyenne de tous les entiers Répéter
TantQue (n<1) ou (n>10)
saisis par l’utilisateur. Ecrire("entrer un entier positif:" )
lire(n)
• Afficher le nombre des entiers premiers parmi la suite des entiers saisis. Un nombre
FinTQ
premier n’est divisible que par 1 ou par lui-même.
Ecrire("voulez vous ajouter un autre entier? ")
• L’application propose un menu de choix offrant toutes les fonctionnalités décrites Ecrire("Tapez 1 si oui ")
lire(r)
précédemment.
Jusqu’à (r<>1)
Fin
101
Activité 1 :
Transformer une suite d’instructions
algorithmiques en suite d’instructions Python
Exercice 1 :
A vous de jouer
2. Proposer un algorithme pour chacune des fonctionnalités décrites et traduire chacun des algorithmes proposé en langage Python.
102
Activité 1 :
Transformer une suite d’instructions
algorithmiques en suite d’instructions Python
Exercice 2 :
SaisieEntiers
Nous souhaitons développer le jeu suivant en Python :
Var
nbEntier: entier
• A tour de rôle, 2 joueurs choisissent 3 entiers qui ne peuvent prendre que 3 valeurs : 0, 1 ou
2. Début
nbEntier=0
• Si la différence entre la somme des nombres choisis par chacun est : Ecrire("Premier Joueur à vous de jouer")
Tantque( nbEntier<3)
Repéter
• Pair: le joueur qui a proposé la plus grande somme d’entiers gagne.
Ecrire("entrer 0-1-2:")
jusqu'à (n<>0) ou (n<>1) ou (n<>2)
• Impair: le joueur qui a proposé la plus petite somme d’entiers gagne. nbEntier=nbEntier+1
FinTQ
nbEntier=0
Ecrire("Deuxième Joueur à vous de jouer")
Tantque( nbEntier<3)
Repéter
Ecrire("entrer 0-1-2:")
jusqu'à (n<>0) ou (n<>1) ou (n<>2)
nbEntier=nbEntier+1
FinTQ
Fin
Exercice 2 :
A vous de jouer
1. Traduire l’algorithme suivant permettant la saisie des entiers choisis par les 2 joueurs.
3. On souhaite améliorer le jeu comme suit: si la différence entre la somme des nombres choisis par chacun vaut :
Exercice 1 :
1 - Traduction de l’algorithme de saisie d’un nombre fini d’entiers compris entre 0 et 10
SaisieEntier r = '1'
Var while r == ‘1’: #structure while pour vérifier si l’utilisateur a encore des entiers à saisir
n, r : Entier n=0
Début while ( int(n) <1 ) or ( int(n) > 10): #structure while permettant de vérifier si n est entre 1 et 10
Répéter print ("entrer un entier positif:")
n:=0 n = input()
TantQue (n<1) ou (n>10) print ("voulez vous ajouter un autre entier?")
Ecrire("entrer un entier positif:" ) print ("Tapez 1 si oui")
lire(n) r = input() #récupérer le choix de l’utilisateur
FinTQ
Exercice 1 (suite) :
SommeInverse r = ‘1’
2- Algorithme d’affichage de la somme des inverses des Var sh = 0
entiers et sa traduction en Python n, r : Entier
Début while r == '1’:
• Questionner sur le type de la structure nécessaire en n:=0 n=0
Python pour traduire l’algorithme sh=0 while ( int(n) < 1 ) or ( int(n) > 10):
Répéter print("entrer un entier positif:")
La structure While (structure répétitive) n:=0 n=input()
TantQue (n<1) ou (n>10)
• Mettre l’accent sur la nécessite de respecter
Ecrire("entrer un entier positif:" ) sh = sh + 1 / int(n) #calculer la somme des inverses
l’indentation
lire(n) print ("voulez vous ajouter un autre entier?")
• Mettre l’accent sur la nécessité de commenter le FinTQ print ("Tapez 1 si oui")
code r = input()
sh=sh+1/n print('la somme des inverses= ',sh)
Ecrire("voulez vous ajouter un autre entier? ")
Ecrire("Tapez 1 si oui ")
lire(r)
Jusqu’à (r<>1)
Ecrire("la somme des inverses=",sh)
Fin
Ecrire("max"= ”,max)
Ecrire(”Min= ”,min)
Ecrire(”Moyenne= ”,somme/nb)
Fin
Exercice 1 (suite) :
while r=='1’: if ( int(n) < min ): #si un entier saisi est <min alors mise à jours de min
n=0 min=int(n)
while (int(n)<0) or (int(n)>10):
print("entrer un entier positif:") somme = somme + int(n) #calcul de la somme des entiers
n=input() print("voulez vous ajouter un autre entier?")
print("Tapez 1 si oui")
nb=nb+1 #incrémentation du nombre d’entiers saisi r = input() #saisie du choix de l’utilisateur
print ('Max=',max)
print ('Min=',min)
print ('Moyenne=',somme/nb)
Exercice 1 (suite) :
EntierPremier nb_div=0
Var i=2
n, r : Entier TantQue (i <= n/2) Faire
Si (n Mod i = 0) Alors
Début nb_div := nb_div + 1
n:=0 Finsi
nbpremier=0 i:= i + 1
FinTQ
Répéter
TantQue (n<1) ou (n>10) Si (nb_div = 0) Alors
Ecrire("entrer un entier positif:" ) nbpremier=nbpremier+1
lire(n) FinSi
FinTQ
Ecrire("voulez vous ajouter un autre entier? ")
Ecrire("Tapez 1 si oui ")
lire(r)
Jusqu’à (r<>1)
Exercice 1 (suite) :
r = '1’
• Traduction de l’algorithme EntierPremier en Python. nbpremier = 0
• Rappeler la syntaxe de la structure itérative en Python
while r == '1’:
• Mettre l’accent sur la nécessite de respecter l’indentation n=0
while ( int(n) < 0) or ( int(n) > 10):
• Mettre l’accent sur la nécessité de commenter le code print ("entrer un entier positif:")
n = input()
nb_div = 0
i=2
while ( i < = int(n) / 2):
if ( int(n) % i == 0 ): #recherche des diviseur de n
nb_div + = 1
i + =1
Exercice 1 (suite) :
3. L’application avec un menu de choix offrant toutes les fonctionnalités décrites précédemment.
Exercice 1 (suite) :
repchoix = ‘1’
while (repchoix =='1’): #structure while pour vérifier si l’utilisateur souhaite encore appliquer des fonctionnalités
print ("veillez saisir votre choix:")
print("1-Afficher somme des inverses")
print("2-Afficher Min, Max et moyenne")
print("3-Afficher le nombre des entiers premiers")
choix = input()
if(choix=='1’): #choix=1(somme des diviseurs)
print('la somme des inverses=',sh)
elif (choix=='2’):#choix=2(MinMax,moy)
print('Max=',max)
print('Min=',min)
print('Moyenne=',somme/nb)
elif (choix=='3’):#choix=3 (nombres premiers)
print("le nombre des nombre premiers=",nbpremier)
else:
print("choix incorrecte")
print("voulez vous continuez?")
print("tapez 1 si oui")
repchoix=input()
Exercice2 :
1-Traduction de l’algorithme SaisieEntiers en Python
nbEntier=0
print("premier Joueur à vous de jouer")
Exercice2
2. Développement de la première version du jeu
#-----------------Deuxième Joueur--------------
sommeJ1 = 0 #initialisation des sommes des entiers de J1 nbEntier=0
sommeJ2 = 0 # initialisation des sommes des entiers de J12 print("deuxième Joueur à vous de jouer")
#-----------------Premier Joueur-------------- while nbEntier<3:
nbEntier = 0 m=5
print ("premier Joueur à vous de jouer") while ( int (n) ! = 0) and ( int(n) ! = 1) and ( int (n) ! = 2 ):
while nbEntier < 3: print("entrer 0-1-2:")
n=5 n=input()
while ( int (n) ! = 0) and ( int(n) ! = 1) and ( int (n) ! = 2 ):
print("entrer 0-1-2:") sommeJ2 = sommeJ2 + int(m) #sommer les entiers saisis de J2
n=input() nbEntier = nbEntier + 1 #incrémenter le nombre des entiers de J2
sommeJ1 = sommeJ1 + int(n) #sommer les entiers saisis de J1 #Annoncer le gagant
nbEntier= nbEntier + 1 #incrémenter le nombre des entiers de J1 if ( ( sommeJ1 - sommeJ2 ) % 2 ) == 0 :
print("J1 a gagné le jeu")
else:
print("J2 a gagné le jeu")
Exercice2 (suite)
Recommandations clés :
151,5heures
heures
CONSIGNES
1- Pour le formateur
• Questionner sur les instructions d’écriture dans un fichier CSV (rappel du cours) et
sur la bibliothèque qu’il est nécessaire d’importer
2- Pour l’apprenant
4 - Critères de réussite
Exercice 1
On souhaite créer une application Python permettant la gestion des comptes bancaires dans une banque :
• Un compte bancaire est défini par un identifiant unique du titulaire, le numéro de compte et son solde
• Deux opérations de base sont possibles sur son compte: déposer et retirer de l’argent
• Aucune facilité de caisse n’est autorisée (i.e. le solde d’un compte ne peut pas être négatif)
• Les acteurs de cette application sont: l’agent de la banque et un client. Chaque client dispose d’un code secret pour accéder à son compte. On suppose que
chaque client a un seul compte
Nb :
• Le numéro de compte est un entier formé par le numéro de son propriétaire et un nombre aléatoire compris entre 0 et 100
Exemple : Si le numéro du client est 5 alors son numéro de compte est par exemple: 556 (où 5 est le numéro du client et 56 est un nombre aléatoire compris entre 0 et
100)
A travers un menu de choix, cette application offre à l’agent les fonctionnalités suivantes :
1. Ajouter un Compte
2. Supprimer un Compte
119
Activité 2 :
Manipuler les données
Exercice 1 (suite)
• A travers un menu de choix cette application offre à un client les fonctionnalités suivantes :
Indication : Utiliser la structure de données dictionnaire de Python pour la gestion des comptes et des clients
Exemple :
• Le dictionnaire Client qui associe à chaque numéro de client son code secret
Exemple : Client={1: ’’566’’, 2:’’836’’} signifie que le code secret du client numéro 1 est égal à 566 et le code secret du client numéro 2 est égal à 836
Exemple : ClientCompte {56:1,20:2} signifie que le numéro de compte du client 56 est 1et le numéro de compte du client 20 est 2
120
Activité 2 :
Manipuler les données
Exercice 1(suite)
1. On considère Client, Compte et ClientCompte les dictionnaires utilisés pour la gestion des comptes. Définir les fonctions suivantes relatives à l’agent de la banque :
• ajouterClient( numCl, MPC, numC, SoldeC) tels que: numCl est le numéro du nouveau client, MPC est son code secret, numC est le numéro de son compte et
SoldeC est le solde initial de son compte
2. Définir les fonctions suivantes relatives à un client de la banque(identifier les paramètres de ces fonctions)
3. Définir la fonction lambda genererNumCompte permettant de générer le numéro de compte d’un client à partir du numéro de ce client
4. Ecrire une fonction EcrireFichierCSV permettant d’enregistrer les numéros des clients et leurs codes secrets dans un fichier CSV
5. Ecrire une fonction manipSTS permettant de créer une liste, un tuple et un set de numéro de comptes à partir du dictionnaire ClientCompte
6. Ecrire un programme principal permettant de tester les fonctions définies précédemment. Proposer un menu de choix à l’agent e t aux clients de la banque
121
Activité 2 :
Correction
Exercice 1
1. Rappeler la structure de données dictionnaire et les instructions de sa manipulation . Un dictionnaire est une collection non ordonnée, modifiable et indexée. En
Python, les dictionnaires sont écrits avec des accolades, et ils ont des clés et des valeurs.
Client[numCl] = MPC
Compte[numC] = SoldeC
ClientCompte[numCl] = numC
def SupprimerClient(numCl):
Client.pop(numCl) #utiliser la fonction pop pour supprimer le client ayant le numéro numCl
ClientCompte.pop(numCl)
122
Activité 2 :
Correction
Exercice 1 (suite)
• Rappeler le fait qu’il est impératif de vérifier si le numéro du client existe et si le montant retiré est autorisé
123
Activité 2 :
Correction
Exercice 1 (suite)
#cette fonction permet de vérifier si un client ayant un #numéro numCl existe def modifierMPClient(numCl, ancienMP, nouveauMP):
if Client[numCl] == ancienMP: #traiter le cas où l’ancienMP est correcte
def rechercheClient(numCl): Client[numCl] = nouveauMP
if int(numCl) in ClientCompte: #vérifier si numCl est une clé dans ClientCompte else: #traiter le cas où l’ancienMP est incorrecte
return True print("MP incorrecte")
else:
return False def deposer(NumCl, soldeD):
x=ClientCompte[NumCl] #récupérer le numéro de compte du client
Compte[x] = Compte[x] + soldeD #ajouter le solde au compte
#cette fonction permet de vérifier si le MP du client est #correcte print(" Nouveau solde= " + Compte[x])
124
Activité 2 :
Correction
Exercice 1 (suite)
Une fonction Lambda est comme n’importe quelle fonction Python normale, sauf qu’elle n’a pas de nom lors de sa définition et qu’elle est contenue dans une ligne
• Questionner sur les bibliothèques qu’il est nécessaire d’importer pour générer le numéro de compte: Les bibliothèques math et random
import math
import random
LambdaNumCompte = lambda numcl: str(numCl) + str(math.floor(random.uniform(0 , 100)))
#math.floor envoie le plus grand entier inférieur ou égal à un nombre donné, random.uniffform(0,100) retourne un nombre aléatoire entre 0
et 100
4. La fonction EcrireFichierCSV qui permet d’enregistrer les numéros des clients et leurs codes secrets dans un fichier CSV
125
Activité 2 :
Correction
Exercice 1 (suite)
def manipSTS()
listC= [] #initialiser la liste
setC=set({}) #initialiser le set
for x, y in ClientCompte.items(): #parcourir les élément de ClientCompte
listC.append(y) #ajouter le numéro de compte à la liste
setC.add(y) #ajouter le numéro de compte au set
print("*Liste*")
print (listC)
print("*Set*")
print(setC)
print("**Tuple")
tupleC=tuple(listC) #transformer la liste en tuple
print(tupleC)
Exercice 1 (suite)
6. Le programme principal
if __name__ == '__main__’: # if (mp == "0000"):
#iinitailiastion des dictionnaires #.................................................................
Compte = {1: 20,2: 19,3: 100} Choix = False
Client = {1: '123',2: '566',3: '999'} while (Choix == False):
ClientCompte = {1: 1,2: 2,3: 3} numchoix = input("*********Tapez le numéro de votre choix*******\n")
if numchoix == "1":
choixAC = input("Si vous êtes un agent bancaire tapez 1 si vous êtes un client tapez 2 \n") Choix = True
resultat = False numCl = numCl + 1
resultatMP = False numC = LambdaNumCompte(numCl)
r = False solde = input("Donner le solde:")
numCl = 3 ajouterClient(numCl, "6666", int(numC), int(solde))
if choixAC == "1": #vérifier s'il s'agit d'un agent print("client ajouté avec succès!")
mp = input("Donner votre mot de passe:") elif numchoix == "2":
if (mp == "0000"): Choix = True
continuer=True numclientSup = input("Donner le numéro du client à supprimer")
while (continuer): SupprimerClient(int(numclientSup))
print("**************Menu**************") print("client supprimé avec succès!")
print("1-Ajouter un compte Cient") elif numchoix=="3":
print("2-Supprimer un compte client") Choix = True
print("3-Générer un fichier Client") print("Fichier Client généré avec succès")
EcrireFichierCSV()
else:
print("Tapez 1 ou 2")
else: # c'est le cas ou le mot de passe de l'agent est incorrecte
print("Mp incorrect")
127
Activité 2 :
Correction
Exercice 1 (suite)
128
Activité 2 :
Correction
Exercice 1 (suite)
if numchoix == "1": #if choixAC == "1": #vérifier s'il s'agit d'un agent
ChoixCorrecte = True #……………………………………………
x = ClientCompte[int(s)] #..............................................
print("Votre solde= ", Compte[x], "D") #elif choixAC == "2": #vérifier s'il s'agit d'un client
elif numchoix == "2": #------------------------------------------------------------
ChoixCorrecte = True #if (rechercheClient(int(s)) == True):
soldeD = input("Donner le montant à déposer:") #...........................................................................
deposer(int(s), float(soldeD)) #.......................................................................
print(Compte)
print("Solde déposé avec succès!") # if (VerifMPClient(s, mp) == True):
elif numchoix == "3": #.........................................................
ChoixCorrecte = True
soldeD = input("Donner le montant à retirer:") else:
retirer(int(s), float(soldeD)) print("Veuillez vérifier votre mot de passe") #MP incorrecte
print(Compte) else:
print("Solde retiré avec succès!") print("Veuillez vérifier votre numéro") #numéro de client inexistant
elif numchoix == "4":
print(Client) else: #c'est le cas où le client où l'agent n'a pas saisi 1 ou entrer à son menu
ChoixCorrecte = True print("Tapez 1 ou 2")
nouveauMP = input("Donner votre nouveau MP")
modifierMPClient(int(s), mp, nouveauMP)
print("mot de passe modifié avec succès!")
else:
print("Tapez 1, 2, 3 ou 4")
129
PARTIE 4
Déployer une solution Python
036 heures
heures
Activité 1
Déboguer le code Python
Compétences visées :
Recommandations clés :
1,5 heures
1,5 heures
CONSIGNES
1- Pour le formateur
• Rappeler les différents types d’erreurs.
• Rappeler les méthodes de gestion des erreurs en Python.
• Questionner sur la méthode pour exécuter un code dans le débogueur.
2- Pour l’apprenant
• Identifier les différents types d’erreurs
• Se rappeler des méthodes de gestion des erreurs.
• Définir la méthode pour exécuter un code dans le débogueur.
CONSIGNES
3 - Conditions de réalisation
4 - Critères de réussite
• Le stagiaire est-il capable de :
- Différencier entre les différents types d’erreurs (compilation/exécution)
- Gérer les exceptions en Python ?
- Suivre et visualiser l’exécution d’un code Python ?
Activité 1 :
Déboguer le code Python
Exercice 1 :
2. Exécuter le code après la correction des erreurs syntaxiques et vérifier le résultat obtenu. Calculer i=1
while (((i * int(a) ) % int(b) ) ! = 0):
par exemple le PGCD de 6 et 8 vous devez trouver 24. i =i + 1
Exercice 1 (suite) :
5. Lancer le débogueur de l’environnement IDLE pour suivre l’exécution du programme pour a=5, b=12 et mode d’ouverture du fichie r=‘a’ (utiliser l’option Pas-à-pas
détaillé)
6. Exécuter le débogueur intégré Python debugger (pdb) pour suivre l’exécution du programme
• Définissez un breakpoint au niveau de la boucle While afin de vérifier le contenu des variables du problème
Exercice 1 :
• Erreur2→EOL while scanning string iteral print au niveau de l’instruction ("Entrer la valeur de b:" )
3. Une erreur sémantique ou logique. Correction de l’erreur →ppcm=i*int(a) : il faut convertir la sortie de input en un entier
Exercice 1 (suite) :
5. Lancement de débogueur de l’environnement IDLE pour suivre l’exécution du programme (avec a=5, b=12)
Au niveau de la
Au niveau de la line 5 a=5,
line 2 a=5 b=12 et i=1
Incrémentation de i au niveau de la
Incrémentation de i au niveau de la
boucle while
boucle while
a=5
b=12
try:
i=1
while (((i*int(a))% int(b))!= 0):
import pdb;
pdb.set_trace()
i =i + 1
ppcm=i*int(a)
ligne = "PPCM de " + str(a) + " et " + str(b) + "=" + str(ppcm)
print(ligne)
print("Donner le mode d'ouverture du fichier : ")
print("a/w ou x")
mode='a'
f =open("PPCM.txt",mode)
f.write(ligne) Affichage de la valeur de i au niveau de chaque breakpoint
f.write("\n")
Compétences visées :
• Déployer une solution Python
Recommandations clés :
• Suivre convenablement toutes les étapes une par une pour
assurer le déploiement d’un solution Python la création de fichier
d’exécution et le génération de documentation
1,5 heures
1,5 heures
CONSIGNES
1- Pour le formateur
2- Pour l’apprenant
4 - Critères de réussite
Exercice 1 :
On désire réaliser une application qui évalue la force d’un mot de passe sachant qu’un mot de passe est une chaine de caractères qui ne comporte ni un espace ni une lettre
accentuée. La force d’un mot de passe est évaluée selon les critères suivants :
Pour calculer le score d’un mot de passe il faut calculer les bonus et les malus
Exercice 1 (suite) :
Exemple :
Exercice 1 (suite) :
• Le nombre de caractères non alphabétiques=6
• Le score final =141-14=127 >80 donc ce mot de passe est considéré ‘ très fort’
Exercice 1 (suite) :
Travail demandé :
1. Codage de l’application
3. Ecrire une fonction NbCAlpha(pass) qui retourne le nombre de caractères non alphabétiques
4. Ecrire une fonction LongMaj(pass) qui retourne la plus longue séquence de lettres majuscules
5. Ecrire une fonction LongMaj(pass) qui retourne la plus longue séquence de lettres minuscules
6. Ecrire une fonction score(pass) qui calcule le score d’un mot de passe
Exercice 1 (suite) :
4. Génération de documentation
1. Commenter le code développé en spécifiant pour chacune des fonctions: son objectif, ses paramètres et leurs types ainsi que l e type de retour de la fonction
en question
Exercice 1 :
1. Codage de l’application
def NbcAlpha(MP):
return len(MP)-nbCMaj(MP)-nbCMin(MP)
Exercice 1 (suite):
if __name__ == '__main__':
MP='P@cSI_promo2017'
score(MP)
Exercice 1 (suite) :
2. Déploiement et téléchargement de l’application
packaging_ScoreMP /
├---- LICENSE
├── pyproject.toml
├── README.md
├── setup.py
├── src/
│ └── package_ScoreMP /
│ ├── __init__.py
│ └── MPscore.py
Exercice 1 (suite) :
• Création du fichier pyproject.toml • Création du fichier setup.py
Exercice 1 (suite):
# Projet scoreMP
• Création des packages de distribution en exécutant cette commande sur l’invite de commande. La commande doit être exécutée à partir du même répertoire où se
trouve pyproject.toml en utilisant la commande :
py -m build
Exercice 1 (suite) :
2. Téléchargement de l’application sur TestPyPI
https://test.pypi.org/project/scoreMP-pkg-USER-NAME/0.0.1/
Exercice 1 (suite):
3. Création d’ un exécutable
pyinstaller MPscore.py
Exercice 1 (suite) :
4. Création de la documentation
• Rajout des commentaires dans le fichier ScoreMP.py contenant la description des différentes fonctions (exemple):
:paramètre chaine de caractères: le mot de passe :paramètre chaine de caractères: le mot de passe
:retour: le nombre de caractères minuscules dans le mot de passe :retour: le nombre de caractères majuscules dans le mot de passe
:rtype: entier :rtype: entier
""" """
nb=0 nb=0
for i in MP: for i in MP:
if 'a'<=i<='z': if 'A'<=i<='Z':
nb+=1 nb+=1
return nb return nb
Exercice 1 (suite) :
import os
import sys
# sys.path.insert(0, os.path.abspath('.'))
sys.path.append('C:/Users/DELL/packaging_ScoreMP/src/package_ScoreMP')
Spécifier le chemin du fichier
# -- Project information -----------------------------------------------------
scoreMP.py
project = 'scoreMP'
copyright = '2021, meriam'
author = 'meriam'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
Ajout de cette ligne pour assurer 'sphinx.ext.autodoc'
une génération automatique de la ]
doc
Exercice 1 (suite) :
• Création du fichier MP.rt suivant dans le dossier source contenant un appel de toutes les fonctions du projet
.. autofunction:: MPscore.nbCMin
.. autofunction:: MPscore.nbCMaj
.. autofunction:: MPscore.NbcAlpha
.. autofunction:: MPscore.longMaj
.. autofunction:: MPscore.longMin
.. autofunction:: MPscore.score
.. toctree::
:maxdepth: 2
:caption: Contents:
Ajout d’un lient vers MP.rt crée
./MP.rst
Exercice 1 (suite):
.\make html