Introduction à Python
2016 – 2017 5 TPPlans des séquences TP 10h00
• TP 1 : Variable (lecture - écriture) et structures de contrôle (If - For - While)
• TP 2 : Gestion de liste
• TP 3 : Création et utilisation de fonctions
• TP 4 : Module Graphique Tkinter
• TP 5 : Gestion de Fichiers
Variables/Boucles Listes Fonctions Tkinter Fichier
TP 1 2 3 4 5
Vidéos Pyhtonneries 1-2-3 Pythonnerie 4 Pythonneries 5-6-11 Pythonneries 8-9
Cours p2 à 13 + p34 p 14 à 18 p 18 à 26 p 26 à 31
DM X X
source partielle : http://www.scribd.com/doc/59231293/poly-TD
Introduction à Python
2016 – 2017 TP 1Variables et Structures de Contrôle Exercices
À la fin de ce TP, vous devez être capable :
• de saisir ou d’afficher une donnée ;
• de créer et modifier une variable ;
• de mettre en place une structure de contrôleif,for, ouwhile. 1 Implémentation : Le jeu du Plus ou moins.
Implémenter et tester l’algorithme (en langage naturel) ci-contre.
Note : En Python, pour générer aléatoirement un nombre, il faut d’abord importer la biblio- thèque random en placant en début de pro- gramme l’instructionfrom random import *.
Ensuite, on obtient un entier aléatoire avec la fonctionrandint(0,100).
L’algorithme correspond à un jeu dans lequel : 1. l’ordinateur "choisit" un nombre "au hasard"
entre 0 et 100,
2. l’utilisateur fait une proposition à laquelle 3. l’ordinateur répond plus "plus grand" ou
"plus petit" suivant la valeur de la proposi- tion.
4. l’utilisateur refait une proposition jusqu’à avoir trouvé la bonne réponse.
5. l’ordinateur indique le nombre d’essais effec- tués.
Données :test,nombre: nombre réel
1 Traitement :
2 nombre= aleatoire(0,100);
3 test= 101;
4 essai= 0;
5 tant quetest!=nombrefaire
6 Saisirtest;
7 essai=essai+ 1;
8 sitest > nombrealors
9 afficher "Trop grand"
10 sinon sitest < nombrealors
11 afficher "Trop petit"
12 sinon
13 afficher "Gagné en ",essai,"
essai(s)"
14 fin_si
15 fin_tq
16 fin
2 Écrire sur papier le code correspondant à chacune des situations suivantes.
1. Lecture et écriture de données.
Programme qui demande un nombre à l’utilisateur, puis qui calcule et affiche le carré de ce nombre.
Exemple :Saisie : 5 Affichage : Le carré de 5 est 25.
2. Structure alternative.
Programme qui demande les longeurs des trois côtés d’un triangle et indique si le triangle est rectangle ou non.
Exemple :Saisies : 3 ;4 ;5 Affichage : Le triangle 3,4,5 est rectangle.
3. Structure répétitive.
(a) Programme qui demande un nombreA puis qui retourne le plus petit entierk tel que 2k> A.
Exemple :Saisie : 17 Affichage : k= 5 car 24 = 16 et 25 = 32.
(b) Est-il possible d’écrire le programme avec une bouclefor? Si oui, le faire, sinon justifier.
3 Implémenter les codes de l’exercice précédent et tester les programmes obtenus.
4 Typage des variables
1. Définir une variable ainitialisée à la valeur 10.
2. En utilisant les fonctionstype()etid(), donner le type de la variableaet son emplacement mémoire.
3. Affecter la valeur 1.5×aà la variablea. Quel est son type et son emplacement mémoire ?
4. Ré-affecter la valeur 10 à la variablea. Quel est son type et son emplacement mémoire ? Comparer avec la réponse à la question 2.
5. Affecter la valeur a2 à la variablea. Quel est son type et son emplacement mémoire ? 6. Définir la variable b=”manger”. Quel est le type et l’emplacement mémoire de b? 7. Que vaut 2×b?
8. Que vaut a+b? pourquoi ? 5 QCM.
• sur les variables :
http://fabrice.sincere.free.fr/qcm/qcm.php?nom=qcm_python3x_1
• sur les structures conditionnelles :
http://fabrice.sincere.free.fr/qcm/qcm.php?nom=qcm_python3x_2
• sur les structures répétitives :
http://fabrice.sincere.free.fr/qcm/qcm.php?nom=qcm_python_loop 6 Travail maison pour la prochaine séance.
Soit le script Python donné ci-contre en colonne de droite : 1. Donner le type et la valeur des variables sui-
vantes après exécution des instructions ci- dessus.
Variable Type Valeur a
valeur y z TR
2. La ligne 10 déclenche une erreur. Pourquoi ?
1 a = 17
2 nombre = 34 valeur = 2.718
4 sp1 = " I n f o r m a t i q u e "
sp2 = " S c i e n c e s du N u m é r i q u e"
6 y = nombre / a z = nombre / valeur
8 TR = sp1 + " et " + sp2 f = sp1 * 2
10 e = sp1 + 2
Pour travailler encore sur les notions de base 7 Écrire sur papier le code correspondant à chacune des situations suivantes.
1. Lecture et écriture de données.
(a) Programme qui demande une vitesse en km/h puis qui l’affiche en m/s.
(b) Programme qui demande à l’utilisateur un temps en jours, heures, minutes, et secondes puis qui affiche ce temps en seconde.
2. Structure alternative.
(a) Programme qui résout une équation du second degréax2+bx+c= 0. Les coefficient a,b etc seront saisis par l’utilisateur.
(b) Écrire un programme qui vous demande les coordonnées de 2 pointsA etB, puis qui vous dit si la droite (AB)coupe l’axe des abscisses.
(c) Années bisextiles : Les années bissextiles sont les années non séculaires divisibles par 4 ou les années séculaires divisibles par 400. Écrire un programme qui prend en entrée une annéen et qui affiche en sortie si elle est bissextile.
(d) Les soldes !Dans un magasin, durant les soldes, une remise de 10% est accordée si le montant des dépenses est supérieur ou égal à 100 euros et de 20% s’il est supérieur à 200 euros.
Écrire un programme qui prend en entrée le montant des achats et affiche le prix a payer.
3. Structures répétitives.
(a) Écrire l’algorithme puis le programme où l’utilisateur doit entrer un nombre positif.
(b) Écrire l’algorithme puis le programme qui choisit un mot de passe puis demande à l’utilisateur de saisir le mot de passe tant que celui-ci n’est pas correct.
(c) Programme qui demande un nombre puis effectue le compte à rebours de ce nombre.
Exemple :Saisie : 5 Affichage : 5 – 4 – 3 – 2 – 1 – 0 !
(d) Programme qui demande un mot puis épelle ce mot.
Exemple :Saisie : Maman Affichage : M – A – M – A – N.
(e) i. Programme qui demande un nombre npuis affiche la somme des entiers de1 à n.
Exemple :Saisie : 5 Affichage : 15(= 1 + 2 + 3 + 4 + 5).
ii. Écrire l’algorithme puis le programme permettant de calculer la somme des n premières puissances de2.
Exemple : valeur saisie 6 résultat63(= 1 + 2 + 4 + 8 + 16 + 32).
iii. Modifier le programme pour qu’il calcule la somme des npremiers nombres impairs.
Quel lien pouvez-vous établir entre la valeur obtenue et n?
iv. Modifier le programme pour qu’il calcule la somme des npremiers cubes.
v. Modifier le programme pour qu’il affiche en sortie le plus petit entierntel quePk=nk=1k3> M. (M est un nombre entré par l’utilisateur).
(f) Un montant de 1000 euros est placé en banque avec intéret composé de 5% (ce qui signifie que chaque année on ajoute 5% du montant des économies de l’année précédente au total).
i. Écrire l’algorithme puis le programme permettant de calculer le montant des économies après nannées, oùn est un nombre entré par l’utilisateur.
ii. Modifier le programme pour qu’il indique le nombre d’année nécessaire pour atteindre 2000 euros.
8 exo ou boucle if ou for mal ecrite et a modifier
Pour aller plus loin 9 Transformer For en While
1. (a) On considère la boucle forci-dessous. Réécrire le programme en utilisant une bouclewhile.
(b) Une bouclefor peut-elle toujours être remplacée par une bouclewhile.
10 For ou While ?
Dans chacune des situations suivantes, indiquer si vous utiliseriez une boucle Forou une boucleWhile: 1. Afficher la table de multiplication d’un nombre ;
2. Demander à l’utilisateur une valeur positive ;
3. Accorder trois essais pour l’utilisateur d’une carte bancaire ; 4. Augmenter la température jusqu’à obtenir 200;
5. Tourner 10 fois autour d’un rond point ; 6. Diviser un nombre par 2 jusqu’a obtenir 1 ;
7. Additionner les nombre de 1 à 100 (c’est à dire calculer 1 + 2 + 3 +· · ·+ 100) ; 8. Accélerer jusqu’a atteindre 90km/h ;
9. Tourner les pages d’un livres jusqu’à la page666;
10. Creuser un trou de 72 mètres sachant que l’on creuse 8 m à l’heure.
11 Suite de Fibonacci.
La « Suite de Fibonacci » est une suite classique en mathématique définie de la manière suivante :
• Les deux premiers termes sont 1 et 1 ;
• chaque terme suivant est égal à la somme des deux termes qui le précèdent.
Les premiers termes sont donc
1−1−2−3−5−8−13−21−34. . .
1. Écrire l’algorithme du programme qui donne les n premiers termes de la suite de Fibonacci, le nombre nétant saisi par l’utilisateur.
2. Ré-écrire l’algorithme en utilisant une boucle while.
3. Implémenter et tester les algorithmes.
12 Un nombre parfait est un nombre naturel n non nul qui est égal à la somme de ses diviseurs stricts (n exclus).Exemple : 6 = 1 + 2 + 3.
Écrire en langage algorithmique un programme qui affiche vrai si n est un nombre parfait, faux sinon.
13 conversion en base 2 14 conversion base 2 vers 10
15 Écrire puis l’algorithme permettant de simuler le fonctionnement d’une calculatrice simple (+, -, *, /).
Dans cet exercice, l’utilisateur saisira les deux opérandes, l’opérateur et le programme lui affichera le résultat correspondant. Dans le cas d’une division, on vérifiera bien que le dénominateur est non nul !
ISN pour le . . ./. . ./. . .
Devoir Maison
1 Indice de masse corporelle.
L’Indice de Masse Corporelle se calcule par la formuleIM C= masse
taille2 où la masse est en kilogrammes et la taille en mètres. Un IMC est considéré comme normal s’il est compris entre 18,5 et 25. En dessous de 18, la personne est en sous-poids et au-dessus de 25, elle est en surpoids.
1. Écrire l’algorithme du programme qui demande la taille et le poids d’un individu et retourne l’IMC et la catégorie correspondante.
2. Écrire l’algorithme du programme qui demande la taille et retourne l’intervalle de masse corres- pondant à un IMC normal.
3. Implémenter et tester les algorithmes. Les programmes seront enregistrés dans des fichiers distincts.
Les noms des fichiers doivent être explicites (exemple :Roger-exo1-question2.py).
2 Suite de Syracuse.
La « Suite de Syracuse » est une suite classique en mathématique.
On part d’un nombre entier plus grand que zéro ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiplie par 3 et on ajoute 1. En répétant l’opération, on obtient une suite d’entiers positifs dont chacun ne dépend que de son prédécesseur.
Par exemple, à partir de 14, on construit la suite des nombres : 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2 . . . C’est ce qu’on appelle la suite de Syracuse du nombre 14.
La conjecture de Syracuse (encore appelée conjecture de Collatz, conjecture d’Ulam, conjecture tchèque ou problème 3x+1) est l’hypothèse mathématique selon laquelle la suite de Syracuse de n’importe quel entier strictement positif atteint à un moment donné le nombre 1 (et donc repète le cycle 1, 4, 2, 1 . . .).
1. Écrire l’algorithme d’un programme affichant les 20 premières valeurs de la suite de Syracuse. Le nombre de départ sera saisi par l’utilisateur.
Note : Un nombre est pair si et seulement si le reste dans la division par 2 est 0. En python, l’instruction 5%2 indique ce reste.
2. Modifier l’algorithme pour que le programme donne les npremières valeurs de la suite, le nombre nétant saisi par l’utilisateur.
3. Modifier l’algorithme pour que le programme affiche toutes les valeurs de la suite jusqu’à la première obtention de la valeur 1.
4. Implémenter et tester les algorithmes.
Introduction à Python
2016 – 2017 TP 2Notions de Liste Exercices
À la fin de ce TP, vous devez être capable :
• de savoir manipuler une liste (ajout/suppression/affichage d’éléments)
• de créer une liste ;
• de parcourir une liste ou accéder à un élément particulier ;
1 On considère le programme ci-contre.
1. À quel jeu fait référence le pro- gramme ?
2. Quel est le rôle de la ligne 3 ? 3. La ligne 6 permet d’éviter une
situation. Laquelle ?
4. Était-il possible de remplacer la boucle while par une boucle for? Si oui, faites-le, sinon jus- tifier.
1 f r o m random i m p o r t randint
2
tirage = []
4 w h i l e len( tirage ) <7:
boule = randint (1 ,49)
6 if boule not in tirage : tirage . append ( boule )
8
p r i n t( tirage )
2 Création et remplissage d’une liste.
Créer un programme (dans un fichier) qui demande et enregistre les 9 notes d’un élève dans une liste.
Une bouclefor est exigée.
3 Utilisation de listes.
Lors de sa scolarité un étudiant obtient, pour chacune des 9 matières qu’il a suivie, une note de contrôle continu et une note d’examen final. La moyenne finale, pour chaque matière, est calculée suivant la pondération.
• Contrôle continu : coefficient 1
• Examen terminal : coefficient 2
1. Modifier le programme de l’exercice précédent pour qu’il permette la saisie des notes du controle continu dans une liste CC et des notes de l’examen final dans une liste Exa.
2. Compléter le programme pour qu’il crée un troisième liste, notée Moy, contenant les moyennes pondérées en utilisant les coefficients donnés.
Exemple :
Controle continu CC 12 8 5,5 14 13 10,5 7 16 9
Examen Exa 15 3 12 17 8 10 8 19 3
Moyenne Moy 14 4,66 9,83 16 9,66 10,16 7,66 18 5
La note14 a été obtenue par le calcul 12×1 + 15×2 3
3. Compléter le programme pour qu’il affiche la moyenne du tableau Moy.
4. Compléter le programme pour qu’il affiche “Reçu” ou “Recalé” suivant que le candidat a obtenu une moyenne supérieure à 10 ou non.
4 Compréhension de liste.
1. Éteindre l’écran puis « deviner » les valeurs de t1, t2 et t3 après avoir tapé les commandes suivantes : t1 = [x**2 for x in range(10)]
t2 = [x+1 for x in t1]
t3 = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
2. Allumer l’écran, et vérifier.
5 Copie de liste.
1. Éteindre l’écran puis « deviner » les valeurs des listes k, m, n après avoir tapé les commandes suivantes :
k = [10, 15, 12]
m = k n = m[ :]
m[1] = 17 n[0] = 19
2. Allumer l’écran, et vérifier !
3. Aller surhttp://www.pythontutor.com, entrer le code précédent, et visualiser pas-à-pas l’exécution.
6 Principe du Pendu.
On considère la liste mot = [chaussette, pantalon, vélo, cartable]. Écrire l’algorithme puis le pro- gramme qui choisit aléatoirement un mot dans la liste, indique la longueur du mot choisit, puis demande à l’utilisateur une lettre et indique si cette lettre est dans le mot qui a été sélectionné.
Pour travailler encore sur les notions de base 7 Manipulation de listes.
On considère la liste de nombres
1,3,5,7,9 Dans une console Idle :
1. Définir une variable Lcontenant la liste indiquée dans l’énoncé.
2. Faire afficher le 3ième élément de la liste.
3. Ajouter le nombre2 entre les éléments 1et 3.
4. Ajouter 11, 13,15 en fin de liste.
5. Créer une listeM qui contient les carrés des valeurs de la liste L.
6. Déterminer si le nombre 16 est un nombre de la listeM. 7. Supprimer la valeur 2 de la listeL.
8. Supprimer la 4ieme valeur de la liste L.
9. Faire afficher les 3 premières valeurs de la liste.
10. Faire afficher de la quatrième à la sixième valeur de la liste.
11. Faire afficher les 6 dernières valeurs de la liste.
8 Gestion d’un zoo.
1. Dans un zoo, les animaux présents sont répertoriés informatiquement dans la liste Animaux = [Singe, Lion, Girafe, Elephant].
Définir cette liste puis faire afficher les animaux présents dans le zoo.
2. On améliore cette liste de façon à savoir combien d’animaux de chaque sorte il y a. On redéfinit alors la liste parAnimaux = [[Singe,5], [Lion,1], [Girafe,2], [Elephant,3]].
(a) Définir la liste puis faire afficher les animaux présents et leur nombre.
(b) Un singe étant né, mettre à jour la liste.
Introduction à Python
2016 – 2017 TP 3Notions de fonctions Exercices
À la fin de ce TP, vous devez être capable :
• d’utiliser des fonctions pour récupérer des valeurs ;
• de définir une fonction et d’écrire proprement un programme contenant des fonctions ;
• de savoir passer des paramètres (éventuellement par défault) à une fonction ;
1 Paramètres.
On considère le programme ci-contre.
1. Quel est le retour de rep(1,2,3) ? 2. Quel est le retour de rep(1,2) ?
3. Implémenter le code et vérifier vos réponses.
1 def rep (a ,b , c =5) :
2 d = a + c
e = b + c
4 r e t u r n(d , e )
2 Écrire une fonction.
1. Écrire une fonction qui, pour un entier npassé en paramètre, retourne la somme des n premiers entiers.
Rappel :1 + 2 + 3 +...+n= n(n+ 1)
2 .
2. Écrire une fonction qui renvoie le volume d’une boîte parallélépipédique dont on fournit les trois dimensions longueur, largeur et hauteur en arguments. Si la hauteur n’est pas spécifiée, elle est considérée par défault égale à 1 unité.
3 Variable locale/globale.
On considère le programme ci-contre.
1. Quel est l’affichage de la ligne 7 ? 2. Quel est l’affichage de la ligne 8 ? 3. Quel est l’affichage de la ligne 9 ? 4. Quel est l’affichage de la ligne 10 ? 5. Quel est l’affichage de la ligne 11 ?
6. Implémenter le code et vérifier vos réponses.
1 def m a F o n c t i o n( a =10 , b =11) :
2 g l o b a l v1
v1 , v2 = a , b
4 p r i n t( v1 , v2 )
6 v1 , v2 = 1 ,2 p r i n t( v1 , v2 )
8 m a F o n c t i o n(3 , 4) p r i n t( v1 , v2 )
10 m a F o n c t i o n (5) p r i n t( v1 , v2 )
4 QCM à l’adresse http://fabrice.sincere.free.fr/qcm/qcm.php?nom=qcm_python_function
5 Écrire en un minimum de lignes un programme permettant de dessiner le motif ci-dessous. Le ca- ractère, le nombre de répétition du triangle et la longueur de la base du triangle seront passés en pa- ramètres du programme.
Dans l’exemple, le caractère est l’étoile, le triangle est répété 3 fois et sa base est de longueur 4.
1 *
2 **
***
4 ****
*
6 **
***
8 ****
*
10 **
***
12 ****
6 Gestion de fonctions.
Lors du TP2, vous avez écrit un programme permettant, suite à la saisie des notes d’un étudiant, d’afficher la moyenne par matière, puis la moyenne générale, et enfin si l’étudiant était admis ou non.
Réécrire proprement ce programme en utilisant quatre fonctions : 1. une fonction SaisirNote() ;
2. une fonction CalculerMoyenneMatiere() ; 3. une fonction CalculerMoyenneGenerale() ; 4. une fonction Decision() ;
Pour travailler encore sur les notions de base
7 1. Écrire une fonction qui retourne la valeur absolue d’un nombre passsé en argument.
2. Écrire un programme qui calcule et retourne un tableau contenant les 10 premiers termes de la suiteU définie par :
u0 = 1 etun+1 = un
n+ 1.
3. Écrire la fonction qui renvoie les racines réelles (si elles existent) d’un polynôme du second degré décrit par 3 coefficients réels a, b et c. Les solutions seront affichées à l’écran.
4. Écrire une fonction qui affiche les dix nombres suivants la valeurndonnée en paramètre.
Par exemple, si l’utilisateur entre le nombre 17, le programme affichera les nombres de 18 à 27.
Pour ceux qui sont en avance
8 On suppose avoir déclaré un tableau de 10 entiers T dont les valeurs ont été initialisées. Écrivez l’algorithme du programme qui initialise un tableau d’entiers S, dont les éléments S[i] devront contenir la somme des éléments de T entre T[0] et T[i] (T[i] compris). T : 2 7 0 3 1 6 4 5 9 8 S : 2 9 9 12 13 19 23 28 37 45
ISN pour le . . ./. . ./. . .
Devoir Maison
Changement de base.
1. base 2 vers base 10.
Écrire un algorithme pour un programme qui demande un nombre en base2et donne sa valeur en base 10.
2. base 10 vers base 2.
Écrire un algorithme pour un programme qui demande un nombre en base 10 et donne sa valeur en base2.
3. Implémenter les deux algorithmes précédents dans des fonctions. Le nombre à convertir sera passé en argument.
4. Écrire un programme qui propose à l’utilisateur 3 choix :
• choix 1 : convertir en base 10
• choix 2 : convertir en base 2
• choix 3 : quitter
Pour le choix 1 et choix 2, le programme demandera ensuite à l’utilisateur un nombre et indiquera sa conversion dans le bsae correspondant au choix.
ISN pour le . . ./. . ./. . .
Devoir Maison
Changement de base.
1. base 2 vers base 10.
Écrire un algorithme pour un programme qui demande un nombre en base2et donne sa valeur en base 10.
2. base 10 vers base 2.
Écrire un algorithme pour un programme qui demande un nombre en base 10 et donne sa valeur en base2.
3. Implémenter les deux algorithmes précédents dans des fonctions. Le nombre à convertir sera passé en argument.
4. Écrire un programme qui propose à l’utilisateur 3 choix :
• choix 1 : convertir en base 10
• choix 2 : convertir en base 2
• choix 3 : quitter
Pour le choix 1 et choix 2, le programme demandera ensuite à l’utilisateur un nombre et indiquera sa conversion dans le bsae correspondant au choix.
Introduction à Python
2016 – 2017 TP 4TP4 – Module Tkinter Exercices
1 Principe
La gestion d’interface graphique présente deux complexités :
• L’écriture du script est beaucoup, beaucoup plus longue ;
• La succession des actions ne correspond plus à la lecture chronologique des fonctions, mais le pro- gramme lance unreceptionnaire d’évènementsqui enregistre les actions faites par l’utilisateur et applique les instructions associées à ces actions.
2 Exemple
L’exemple ci-dessous présente une infime partie des commandes de Tkinter. Il en existe beaucoup d’autres.
Pour des compléments, voir le site apprendre-python.com ou le chapitre 8 du livre de Gerard Swimmen (sous Licence Creative Commons) ou le site de Fabrice Sincèrequi fournit plein d’exemples.
1 #! / u s r / bi n / env python
2 #−∗− c o d i n g : u t f−8 −∗−
4 f r o m tkinter i m p o r t * #i m p o r t a t i o n de l a b i b l i o t h ï £ ¡ q u e T k i n t e r
6 d e f convertir () :
valeur = r o u n d(( value . get () -32) /1.8 ,1)
8 resultat . configure ( text = " T e m p e r a t u r e en degre : "+s t r( valeur ) )
10 # c r e a t i o n de l a f e n e t r e e t c o n f i g u r a t i o n de son t i t r e fenetre = Tk () # c r e a t i o n de l a f e n e t r e
12 fenetre . title (" C o n v e r t i s s e u r de t e m p e r a t u r e ")
14 #c r e a t i o n d ’ un champ t e x t
label1 = Label ( fenetre , text =" T e m p e r a t u r e en F a h r e n h e i t ")
16 resultat = Label ( fenetre , text = " T e m p e r a t u r e en degre : ")
18 #c r e a t i o n d ’ un champ de s a i s i e value = IntVar ()
20 value .s e t(50) #v a l e u r par d e f a u t
entree = Entry ( fenetre , t e x t v a r i a b l e = value , width =10)
22
# c r e a t i o n d ’ un ’ Canvas ’ c o n t e n a n t une image
24 can1 = Canvas ( fenetre , width =80 , height =100 , bg =’ white ’) photo = PhotoImage (f i l e = " / home / b u s t e r 2 / thermo . gif ")
26 can1 . c r e a t e _ i m a g e (50 , 50 , image = photo )
28 #c r e a t i o n de boutons Ãă c l i q u e r
bouton1 = Button ( fenetre , text = " c o n v e r t i r ", command = convertir )
30 bouton2 = Button ( fenetre , text = " q u i t t e r", command = fenetre . quit )
32 #a f f i c h a g e des o b j e t s c r e e s can1 . pack ( side = RIGHT )
34 label1 . pack () entree . pack ()
36 resultat . pack () bouton1 . pack ()
38 bouton2 . pack ()
40
#l ancement de l a f e n e t r e e t a t t e n t e des c l i c s
42 fenetre . mainloop ()
44 # d e s t r u c t i o n de l a f e n ï £ ¡ t r e a p r ï £ ¡ s l ’ a v o i r q u i t t ï £ ¡ e fenetre . destroy ()
Résultat :
3 Exercices
Écrire les algorithmes puis les programmes permettant de réaliser les interfaces graphiques suivantes : 1 – Conversion de durée
2 – Tracer des points au hasard dans une fenêtre
3 – Calcul du périmètre et de l’aire
4 – Tracer des segments en changeant de couleur
On pourra utiliser les méthodes suivantes :
• can1.create_oval(x1-20,y1-20,x1+20,y1+20,width=2,fill=coul)pour tracer un cercle dans can1 ;
• can1.delete(ALL) pour effacer tous les tracés de can1 ;
• can1.create_line(x1,y1,x2,y2,width=2,fill=coul) pour tracer un segment dans can1 ;
• Importer la bibliothèqueimport random puisrandint(0,10) pour avoir un nombre entier aléa- toire entre 0 et 10.
Introduction à Python
2016 – 2017 TP 5TP5 – Gestion de fichier Exercices
À la fin de ce TP, vous devez être capable :
• de créer puis écrire dans un fichier ;
• d’ouvrir, lire puis fermer un fichier ;
• d’utiliser un fichier au format CSV.
1 Gestion de fichier.
Écrire un programme qui éxécute les actions suivantes : 1. Création et écriture.
Programme (ou fonction) qui demande à l’utilisateur la table de multiplication à calculer, crée un fichier dont le nom correspond à la table choisie, écrit la table correspondante dans le fichier puis ferme le fichier.
2. Ouverture, lecture, fermeture.
Programme (ou fonction) qui affiche le contenu d’un fichier dont le nom a été demandé à l’utilisa- teur. Tester votre fonction sur le fichier de l’exercice 1.
3. Est-il possible de créer une fonction qui, pour un fichier de la question 1, insère entre deux lignes de multiplication une ligne indiquant la demi-valeur des lignes encadrantes (Par exemple, la ligne
“5x2.5=12.5” doit être inséré entre les lignes “5x2=10’ et “5x3=15”) ? Si oui, le faire, si non donner une explication technique.
2 Le format CSV.
1. Saisir avec un tableur l’exemple de la leçon puis l’exporter au format CSV.
2. Écrire ensuite un programme comportant deux fonctions. L’une permettant d’afficher le contenu du fichier, l’autre permettant d’ajouter une entrée au fichier.
3. Ajouter une fonction au programme précédent permettant de rechercher si un élève existe et d’af- ficher ses résultats. Si l’élève n’existe pas, le programme doit retourner un message de recherche infructueuse.
4. Défis :
(a) Ajouter une fonction au programme permettant d’ajouter un devoir.
(b) Ajouter une fonction permettant d’afficher et d’ajouter la moyenne.
Pour ceux qui sont en avance.
3 Gestion d’un fichier de membre.
1. Écrivez un programme qui permette de créer un fichier texte dont les lignes contiendront chacune les noms, prénom, adresse, code postal et numéro de téléphone de différentes personnes. (Considérez par exemple qu’il s’agit des membres d’un club. Lors de l’inscription d’un nouveau membre, le programme demande et enregistre toutes les informations de la personne).
2. Ajouter une fonction qui recopie le fichier utilisé dans l’exercice précédent, en y ajoutant la date de naissance et le sexe des personnes (l’ordinateur devra afficher les lignes une par une et demander à l’utilisateur d’entrer pour chacune les données complémentaires).
3. Ajouter une fonction qui permette d’extraire de ce fichier les lignes qui correspondent à un utilisa- teur bien déterminé.
4 Écrire un programme qui demandera d’abord à l’utilisateur d’entrer le nom du fichier. Ensuite il proposera le choix, soit d’enregistrer de nouvelles lignes de texte, soit d’afficher le contenu du fichier.
L’utilisateur devra pouvoir entrer ses lignes de texte successives en utilisant simplement la touche <Enter>
pour les séparer les unes des autres. Pour terminer les entrées, il lui suffira d’entrer une ligne vide (c’est-à- dire utiliser la touche <Enter> seule). L’affichage du contenu devra montrer les lignes du fichier séparées les unes des autres de la manière la plus naturelle (les codes de fin de ligne ne doivent pas apparaître).
Introduction à Python
2016 – 2017 Exercices TP1 – Variables et Structures de Contrôle SolutionsTP1 - Variables et Boucles - ex1
1 from random import *
2
nombre = r a n d i n t (0 ,100)
4 test = 101 essai = 0
6 w h i l e test != nombre : essai = essai +1
8 test = int(input(" faites un essai : ") ) if test > nombre :
10 print(" Trop grand ") e l i f test < nombre :
12 print(" trop petit ") e l s e:
14 print(" Gagné en ", essai ," essais ")
TP1 - Variables et Boucles - ex3
1 # Les r e p o n s e s au q u e s t i o n s sont mises en c o m m e n t a i r e s ( lignes rouges )
2 a = 10
print(a ,type( a ) ,id( a ) )
4 # 10 < class ’ int ’> 1 3 9 7 0 3 8 1 0 5 1 9 0 4 0 a = 1.5* a
6 print(a ,type( a ) ,id( a ) )
# 15.0 < class ’ float ’> 1 3 9 7 0 3 3 2 8 4 2 5 5 2 0
8 a = 10
print(a ,type( a ) ,id( a ) )
10 # 10 < class ’ int ’> 1 3 9 7 0 3 8 1 0 5 1 9 0 4 0 a = a /2
12 print(a ,type( a ) ,id( a ) )
# 5.0 < class ’ float ’> 1 3 9 7 0 3 3 2 8 4 2 5 5 2 0
14 b = " manger "
print(b ,type( b ) ,id( b ) )
16 # manger < class ’ str ’> 1 3 9 7 0 3 2 8 9 0 1 7 7 6 8 print(2* b )
18 # m a n g e r m a n g e r a + b
20 # T y p e E r r o r: u n s u p p o r t e d o p e r a n d type ( s ) for +: ’ float ’ and ’ str ’
# On o b t i e n t une erreur car on a voulu a d d i t i o n n e r un nombre et une chaine de c a r a c t e r e.
TP1 - Variables et Boucles - ex2
1 # q u e s t i o n 1 a )
2 a = int(input(" Quel nombre souhaitez - vous élever au carré ? ") ) print(" Le carré de ",a , " est ", a * a )
4 # on peut aussi u t i l i s e r :
print (" Le carré de {0} est {1} ".format( a , a **2) )
6
8 # q u e s t i o n 1 b )
v i t e s s e = int(input(" Quelle v i t e s s e souhaitez - vous c o n v e r t i r ? ") )
10 print( vitesse , " km / heure é q u i v a u t à ", v i t e s s e *1000/3600 , " m / s ")
12 # q u e s t i o n 2 a )
AB = float(input(" Entrez la valeur de l ’ h y p t o h é n u s e : ") )
14 AC = float(input(" Entrez la valeur du d e u x i è m e côté : ") ) BC = float(input(" Entrez la valeur du t r o i s i è m e côté : ") )
16 if AB **2== AC **2+ BC **2:
print(’ Le t r i a n g l e est r e c t a n g l e ’)
18 e l s e :
print(" Le t r i a n g l e n ’ est pas r e c t a n g l e")
20
# q u e s t i o n 2 b )
22 from math import sqrt
a = float(input(" Entrez la valeur de a : ") )
24 b = float(input(" Entrez la valeur de b : ") ) c = float(input(" Entrez la valeur de c : ") )
26 d = b **2 -4*a * c if d >0:
28 x1 =( - b - sqrt ( d ) ) /(2* a ) ; x2 =( - b + sqrt ( d ) ) /(2* a )
print(’ Il y a deux s o l u t i o n s r é e l l e s : ’,x1 ," et ", x2 )
30 e l i f d ==0:
x1 = - b /(2* a ) ;
32 print(’ Il y a une seule s o l u t i o n s réelle : ’, x1 ) e l s e :
34 print(" L ’ é q u a t i o n n ’a pas de s o l u t i o n s")
36 q u e s t i o n 3 a )
A = int(input(" Quel est le nombre a d é p a s s e r ? ") )
38 k =0
w h i l e 2**k < A :
40 k +=1
print(" k est égal à ",k ," car 2^ ",k -1 ," = ",2**( k -1) ," et 2^ ",k ," = ",2** k )
42
# q u e s t i o n 3 b )
44 fin = int(input(" Quel est le début ? ") ) f o r i in range( fin ,0 , -1):
46 print( i )
48 # q u e s t i o n 3 c )
mot = input(" Entrez un mot : ")
50 f o r lettre in mot :
print( lettre , end =" --")
Introduction à Python
2016 – 2017 ExercicesTP2 – Notions de Liste Solutions
TP2 - Listes - ex1
1 # les r é p o n s e s sont mises en c o m m e n t a i r e s ( lignes rouges )
2 # L ’ ajout de print ( L ) à la fin de chaque ligne permet d ’ avoir un a f f i c h a g e de la r é p o n s e
L = [1 ,3 ,5 ,7 ,9];print( L )
4 # [1 , 3 , 5 , 7 , 9]
L [2]
6 # 5
L . insert (1 ,2) ;print( L )
8 # [1 , 2 , 3 , 5 , 7 , 9]
L = L + [11 ,13 ,15];print( L )
10 # [1 , 2 , 3 , 5 , 7 , 9 , 11 , 13 , 15]
M = [ el **2 f o r el in L ]; M
12 # [1 , 4 , 9 , 25 , 49 , 81 , 121 , 169 , 225]
16 in M
14 # False
L . remove (2) ;print( L )
16 # [1 , 3 , 5 , 7 , 9 , 11 , 13 , 15]
L . pop (3) ;print( L )
18 # [1 , 3 , 5 , 9 , 11 , 13 , 15]
L [:3]
20 # [1 , 3 , 5]
L [3:6]
22 # [9 , 11 , 13]
L [ -6:]
24 # [3 , 5 , 9 , 11 , 13 , 15]
TP2 - Listes - ex2
1 A n i m a u x = [’ Singe ’, ’ Lion ’, ’ Girafe ’,’ E l e p h a n t ’]
2
print( A n i m a u x)
4
A n i m a u x = [[’ Singe ’,5] , [’ Lion ’,1] , [’ Girafe ’,2] ,
6 [’ E l e p h a n t ’,3]]
8 print( A n i m a u x) A n i m a u x [ 0 ] [ 1 ] = 6
10 print( A n i m a u x)
TP2 - Listes - ex3
1 notes = []# c r é a t i o n de la liste des notes
2
f o r i in range(9) :
4 note = float(input(’ Entrer votre note : ’) ) notes . append ( note )
6
print( notes )
TP2 - Listes - ex4
1 cc = []# c r é a t i o n de la liste des notes c o n t r o l e c o n t i n u
2 exa = []# c r é a t i o n de la liste des notes examen moy = []# c r é a t i o n de la liste des m o y e n n e s
4
print(" Saisie des notes du c o n t r o l e c o n t i n u")
6 f o r i in range(0 ,9) :
note = float(input(" Entrer votre note : ") )
8 cc . append ( note )
10
print(" Saisie des notes d ’ examen ")
12 f o r i in range(0 ,9) :
note = float(input(" Entrer votre note : ") )
14 exa . append ( note )
16 t o t a l N o t e = 0 # pour c a l c u l e r la m o y e n n e f o r i in range(0 ,9) :
18 moy . append (( cc [ i ]+2* exa [ i ]) /3) t o t a l N o t e += moy [ i ]
20 print(" Liste des m o y e n n e s", moy )
22 m o y e n n e = t o t a l N o t e /9 if m o y e n n e >=10:
24 print(" Recu ! ") e l s e :
26 print(" Recalé ! ")
Introduction à Python
2016 – 2017 ExercicesTP3 – Notions de fonctions Solutions
TP3 - Fonctions - ex 1
1 from math import * # import moduel math pour la racine carrée
2
def somme ( n ) :
4 return( n *( n +1) /2)
6 def volume (l ,L , h = 1) : return( L * l * h )
8
def t r i n o m e(a ,b , c ) :
10 d = b **2 -4* a * c if d >=0 :
12 print(" 2 s o l u t i o n s ; x1 ={0} et x2 ={1} ".format(( -b - sqrt ( d ) ) /(2* a ) ,( - b + sqrt ( d ) ) /(2* a ) ) )
e l s e:
14 print(" Pas de s o l u t i o n s r é e l l e s")
16 def s u i v a n t( n ) :
f o r i in range ( n +1 , n +11 ,1):
18 print( i , end =" ; ")# u t l i s a t i o n de end =";" pour é c r i t u r e sur une ligne
20 # Corps du p r o g r a m m e ( et test des f o n c t i o n s) print( somme (10) )
22 print( volume (1 ,1 ,5) ) print( volume (1 ,2) )
24 t r i n o m e (1 ,2 , -3) s u i v a n t (17)
TP3 - Fonctions - ex 2
1 def S a i s i r N o t e( n o m L i s t e) :
2 print(" saisie des notes de "+ n o m L i s t e) liste = []
4 f o r i in range(0 ,2) :
note = float(input(" Entrer votre note : ") )
6 liste . append ( note )
print(" Résumé des notes s a i s i e s pour "+ n o m L i s t e+" : ", liste )
8 return( liste )
10 def C a l c u l e r M o y e n n e M a t i e r e ( liste1 , liste2 ) : l i s t e R e s u l t a t = []
12 f o r i in range(0 ,2) :
l i s t e R e s u l t a t . append (( liste1 [ i ]+2* liste2 [ i ]) /3)
14 print(" Résumé des m o y e n n e s par m a t i è r e s : ", l i s t e R e s u l t a t ) return( l i s t e R e s u l t a t )
16
def C a l c u l e r M o y e n n e G e n e r a l e ( liste ) :
18 t o t a l N o t e = 0 # pour c a l c u l e r la m o y e n n e f o r i in range(0 ,2) :
20 t o t a l N o t e += liste [ i ]
print(" La m o y e n n e g é n é r a l e est de ", t o t a l N o t e /2)
22 return( t o t a l N o t e /2)
24 def D e c i s i o n( Note ) : if m o y e n n e >=10:
26 print(" Recu ! ") e l s e :
28 print(" Recalé ! ")
30 # Corps du p r o g r a m m e
cc = S a i s i r N o t e(" c o n t r o l e c o n t i n u")
32 exa = S a i s i r N o t e (" l ’ examen ")
moy = C a l c u l e r M o y e n n e M a t i e r e ( cc , exa )
34 m o y e n n e = C a l c u l e r M o y e n n e G e n e r a l e ( moy ) D e c i s i o n( m o y e n n e)
TP3 - Fonctions - ex 4
1 def motif ( car , repet , base ) :
2 f o r j in range( repet ) :
f o r i in range(1 , base +1 ,1) :
4 print( i * car )
6 motif (’* ’,3 ,4)
Introduction à Python
2016 – 2017 ExercicesTP4 – Module Tkinter Solutions
TP4 - Conversion Temps
1 # !/ usr / bin / env python
2 # -* - coding : utf -8 -* -
4 from t k i n t e r import * # i m p o r t a t i o n de la b i b l i o t h è q u e T k i n t e r
6 def c o n v e r t i r () :
valeur = 3600*int( e n t r e e 1. get () ) +60*int( e n t r e e 2. get () ) +int( e n t r e e 3. get () )
8 r e s u l t a t. c o n f i g u r e ( text = " Temps en s e c o n d e : "+str( valeur ) )
10 # c r e a t i o n de la f e n e t r e et c o n f i g u r a t i o n de son titre f e n e t r e = Tk () # c r e a t i o n de la f e n e t r e
12 f e n e t r e. title (" C o n v e r t i s s e u r de t e m p é r a t u r e ")
14 # c r é a t i o n d ’ un champ text
label1 = Label ( fenetre , text =" Heure ")
16 label2 = Label ( fenetre , text =" Minute ") label3 = Label ( fenetre , text =" S e c o n d e")
18 r e s u l t a t = Label ( fenetre , text = " Temps en s e c o n d e : ")
20 # c r e a t i o n d ’ un champ de saisie value1 = S t r i n g V a r ()
22 value2 = S t r i n g V a r () value3 = S t r i n g V a r ()
24 e n t r e e 1 = Entry ( fenetre , t e x t v a r i a b l e = value1 , width =30) e n t r e e 2 = Entry ( fenetre , t e x t v a r i a b l e = value2 , width =30)
26 e n t r e e 3 = Entry ( fenetre , t e x t v a r i a b l e = value3 , width =30)
28 # c r e a t i o n de b o u t o n s à c l i q u e r
b o u t o n 1 = Button ( fenetre , text = " c o n v e r t i r", c o m m a n d = c o n v e r t i r )
30 b o u t o n 2 = Button ( fenetre , text = " q u i t t e r", c o m m a n d = f e n e t r e. quit )
32 # a f f i c h a g e des objets crées label1 . pack () ; e n t r e e 1. pack ()
34 label2 . pack () ; e n t r e e 2. pack () label3 . pack () ; e n t r e e 3. pack ()
36 r e s u l t a t. pack ()
b o u t o n 1. pack () ; b o u t o n 2. pack ()
38
# l a n c e m e n t de la f e n e t r e et a t t e n t e des clics
40 f e n e t r e. m a i n l o o p ()
42 # d e s t r u c t i o n de la f e n ê t r e après l ’ avoir q u i t t é e f e n e t r e. d e s t r o y ()
TP4 - Cercles
1 # script cercle . py
2 from t k i n t e r import * import random
4
def Cercle () :
6 """ D e s s i n e un cercle de centre ( x , y ) et de rayon r """
x = random . r a n d i n t(0 , L a r g e u r)
8 y = random . r a n d i n t(0 , H a u t e u r) r = ( L a r g e u r+ H a u t e u r) /80
10 C a n e v a s. c r e a t e _ o v a l (x -r , y -r , x +r , y +r , o u t l i n e=’ blue ’, fill =’ blue ’)
12 def E f f a c e r () :
""" Efface la zone g r a p h i q u e """
14 C a n e v a s. delete ( ALL )
16 # C r é a t i o n de la f e n ê t r e p r i n c i p a l e ( main window ) M a f e n e t r e = Tk ()
18 M a f e n e t r e . title (’ Cercle ’)
20 # C r é a t i o n d ’ un widget Canvas ( zone g r a p h i q u e) L a r g e u r = 80
22 H a u t e u r = 80
C a n e v a s = Canvas ( Mafenetre , width = Largeur , height = Hauteur , bg =’ white ’)
24 C a n e v a s. pack ( padx =5 , pady =5)
26 # C r é a t i o n d ’ un widget Button ( bouton Go )
B o u t o n G o = Button ( Mafenetre , text =’ Go ’, c o m m a n d = Cercle )
28 B o u t o n G o. pack ( side = LEFT , padx = 10 , pady = 10)
30 # C r é a t i o n d ’ un widget Button ( bouton E f f a c e r)
B o u t o n E f f a c e r = Button ( Mafenetre , text =’ E f f a c e r ’, c o m m a n d = E f f a c e r)
32 B o u t o n E f f a c e r . pack ( side = LEFT , padx = 5 , pady = 5)
34 # C r é a t i o n d ’ un widget Button ( bouton Q u i t t e r)
B o u t o n Q u i t t e r = Button ( Mafenetre , text =’ Q u i t t e r ’, c o m m a n d = M a f e n e t r e.
d e s t r o y)
36 B o u t o n Q u i t t e r . pack ( side = LEFT , padx = 5 , pady = 5)
38 M a f e n e t r e . m a i n l o o p ()
TP4 - AirePérimètre
1 # !/ usr / bin / env python
2 # -* - coding : utf -8 -* -
4 from t k i n t e r import * # i m p o r t a t i o n de la b i b l i o t h è q u e T k i n t e r
6 def calcul () :
rayon = int( entree . get () )
8 aire = round(3.14* rayon * rayon ,2) p e r i m e t r e = round( 2 * 3 . 1 4 * rayon ,2)
10 label2 . c o n f i g u r e( text = " L ’ aire est de "+str( aire ) )
label3 . c o n f i g u r e( text = " Le p é r i m è t r e est de "+str( p e r i m e t r e) )
12
# c r e a t i o n de la f e n e t r e et c o n f i g u r a t i o n de son titre
14 f e n e t r e = Tk () # c r e a t i o n de la f e n e t r e f e n e t r e. title (" Aire et P é r i m è t r e")
16
# c r é a t i o n d ’ un champ text
18 label1 = Label ( fenetre , text =" Entrez la valeur du rayon ? ") label2 = Label ( fenetre , text =" L ’ aire est de : ")
20 label3 = Label ( fenetre , text =" Le p é r i m è t r e est de : ")
22 # c r e a t i o n d ’ un champ de saisie value = S t r i n g V a r ()
24 entree = Entry ( fenetre , t e x t v a r i a b l e = value , width =30)
26
# c r e a t i o n de b o u t o n s à c l i q u e r
28 b o u t o n 1 = Button ( fenetre , text = " c a l c u l e r", c o m m a n d = calcul ) b o u t o n 2 = Button ( fenetre , text = " q u i t t e r", c o m m a n d = f e n e t r e. quit )
30
# a f f i c h a g e des objets crées
32 label1 . pack () entree . pack ()
34 label2 . pack () label3 . pack ()
36 b o u t o n 1. pack ( side = LEFT , padx = 10 , pady = 5) b o u t o n 2. pack ( side = RIGHT , padx = 10 , pady = 5)
38
# l a n c e m e n t de la f e n e t r e et a t t e n t e des clics
40 f e n e t r e. m a i n l o o p ()
42 # d e s t r u c t i o n de la f e n ê t r e après l ’ avoir q u i t t é e f e n e t r e. d e s t r o y ()
TP4 - TraceLignes
1 # ! / usr / bin / env python
2 # -* - coding : Utf8 -* -
4 # Petit e x e r c i c e u t i l i s a n t la l i b r a i r i e g r a p h i q u e T k i n t e r
6 # d é f i n i t i o n des f o n c t i o n s g e s t i o n n a i r e s d ’ é v é n e m e n t s : def d r a w l i n e () :
8 " Tracé d ’ une ligne dans le c a n e v a s can1 "
global x1 , y1 , x2 , y2 , coul
10 can1 . c r e a t e _ l i n e ( x1 , y1 , x2 , y2 , width =2 , fill = coul )
12 # m o d i f i c a t i o n des c o o r d o n n é e s pour p r é p a r e r la ligne s u i v a n t e : y2 , y1 = y2 +10 , y1 -10
14
def c h a n g e c o l o r () :
16 " C h a n g e m e n t a l é a t o i r e de la c o u l e u r du tracé "
global coul
18 pal =[’ purple ’,’ cyan ’,’ maroon ’,’ green ’,’ red ’,’ blue ’,’ orange ’,’ yellow ’]
c = r a n d r a n g e (8) # = > génère un nombre a l é a t o i r e de 0 à 7
20 coul = pal [ c ]
22 # - - - P r o g r a m m e p r i n c i p a l - - - - from t k i n t e r import *
24 from random import r a n d r a n g e
26 # les v a r i a b l e s s u i v a n t e s seront u t i l i s é e s de m a n i è r e g l o b a l e : x1 , y1 , x2 , y2 = 10 , 190 , 190 , 10 # c o o r d o n n é e s de la ligne
28 coul = ’ dark green ’ # c o u l e u r de la ligne
30 # C r é a t i o n du widget p r i n c i p a l (" parent ") : fen1 = Tk ()
32 # c r é a t i o n des w i d g e t s " e n f a n t s" :
can1 = Canvas ( fen1 , bg =’ dark grey ’, height =200 , width =200)
34 can1 . pack ( side = LEFT )
36 bou1 = Button ( fen1 , text =’ Q u i t t e r ’, c o m m a n d= fen1 . quit ) bou1 . pack ( side = BOTTOM )
38 bou2 = Button ( fen1 , text =’ Tracer une ligne ’, c o m m a n d= d r a w l i n e) bou2 . pack ()
40 bou3 = Button ( fen1 , text =’ Autre c o u l e u r ’, c o m m a n d= c h a n g e c o l o r ) bou3 . pack ()
42
# d é m a r r a g e de l ’ o b s e r v a t e u r d ’ é v è n e m e n t s ( boucle p r i n c i p a l e) :
44 fen1 . m a i n l o o p () fen1 . d e s t r o y ()