introduction à python - lyceeenligne.free.frlyceeenligne.free.fr/img/pdf/exoisn-python.pdf ·...

26
Introduction à Python 2016 – 2017 5 TP Plans 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

Upload: dotuyen

Post on 30-Oct-2018

230 views

Category:

Documents


0 download

TRANSCRIPT

Introduction à Python2016 – 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 FichierTP 1 2 3 4 5

Vidéos Pyhtonneries 1-2-3 Pythonnerie 4 Pythonneries 5-6-11 Pythonneries 8-9Cours p2 à 13 + p34 p 14 à 18 p 18 à 26 p 26 à 31DM X X

source partielle : http://www.scribd.com/doc/59231293/poly-TD

Introduction à Python2016 – 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ôle if, for, ou while.

1 Implémentation : Le jeu du Plus ou moins.Implémenter et tester l’algorithme (en langagenaturel) ci-contre.

Note : En Python, pour générer aléatoirementun nombre, il faut d’abord importer la biblio-thèque random en placant en début de pro-gramme l’instruction from random import *.Ensuite, on obtient un entier aléatoire avec lafonction randint(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éel1 Traitement :2 nombre = aleatoire(0,100);3 test = 101;4 essai = 0;5 tant que test !=nombre faire6 Saisir test;7 essai = essai + 1;8 si test > nombre alors9 afficher "Trop grand"

10 sinon si test < nombre alors11 afficher "Trop petit"12 sinon13 afficher "Gagné en ",essai,"

essai(s)"14 fin_si15 fin_tq16 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 estrectangle 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 nombre A puis qui retourne le plus petit entier k 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 boucle for ? 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 a initialisée à la valeur 10.

2. En utilisant les fonctions type() et id(), donner le type de la variable a et son emplacement mémoire.

3. Affecter la valeur 1.5 × a à la variable a. Quel est son type et son emplacement mémoire ?

4. Ré-affecter la valeur 10 à la variable a. Quel est son type et son emplacement mémoire ? Compareravec la réponse à la question 2.

5. Affecter la valeur a

2à la variable a. 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 Valeura

valeuryz

TR

2. La ligne 10 déclenche une erreur. Pourquoi ?

1 a = 17

2 nombre = 34

valeur = 2.718

4 sp1 = " Informatique"

sp2 = "Sciences du Numérique"

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 puisqui 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 et c

seront saisis par l’utilisateur.

(b) Écrire un programme qui vous demande les coordonnées de 2 points A et B, puis qui vous ditsi 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 oules années séculaires divisibles par 400. Écrire un programme qui prend en entrée une année n

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 montantdes 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’utilisateurde 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 n puis affiche la somme des entiers de 1 à 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èrespuissances de 2.Exemple : valeur saisie 6 résultat 63(= 1 + 2 + 4 + 8 + 16 + 32).

iii. Modifier le programme pour qu’il calcule la somme des n premiers nombres impairs.Quel lien pouvez-vous établir entre la valeur obtenue et n ?

iv. Modifier le programme pour qu’il calcule la somme des n premiers cubes.

v. Modifier le programme pour qu’il affiche en sortie le plus petit entier n tel que∑

k=n

k=1 k3 > 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 quechaque 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 économiesaprès n anné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 2000euros.

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 for ci-dessous. Réécrire le programme en utilisant une boucle while.

(b) Une boucle for peut-elle toujours être remplacée par une boucle while.

10 For ou While ?Dans chacune des situations suivantes, indiquer si vous utiliseriez une boucle For ou une boucle While :

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 page 666 ;

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, lenombre 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 leré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 formule IMC =massetaille2

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 de18, 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’IMCet 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 lemultiplie par 3 et on ajoute 1. En répétant l’opération, on obtient une suite d’entiers positifs dont chacunne 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èqueou problème 3x+1) est l’hypothèse mathématique selon laquelle la suite de Syracuse de n’importe quelentier 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. Lenombre 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’instruction5%2 indique ce reste.

2. Modifier l’algorithme pour que le programme donne les n premières valeurs de la suite, le nombren étant saisi par l’utilisateur.

3. Modifier l’algorithme pour que le programme affiche toutes les valeurs de la suite jusqu’à la premièreobtention de la valeur 1.

4. Implémenter et tester les algorithmes.

Introduction à Python2016 – 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 unesituation. Laquelle ?

4. Était-il possible de remplacerla boucle while par une bouclefor ? Si oui, faites-le, sinon jus-tifier.

1 from random import randint

2

tirage = []

4 while len(tirage ) <7:

boule = randint (1 ,49)

6 if boule not in tirage:

tirage. append(boule)

8

print(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 boucle for 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ôlecontinu et une note d’examen final. La moyenne finale, pour chaque matière, est calculée suivant lapondé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 controlecontinu 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 moyennespondérées en utilisant les coefficients donnés.

Exemple :Controle continu CC 12 8 5,5 14 13 10,5 7 16 9Examen Exa 15 3 12 17 8 10 8 19 3Moyenne Moy 14 4,66 9,83 16 9,66 10,16 7,66 18 5

La note 14 a été obtenue par le calcul12 × 1 + 15 × 2

33. 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 obtenuune 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 commandessuivantes :k = [10, 15, 12]m = kn = m[ :]m[1] = 17n[0] = 19

2. Allumer l’écran, et vérifier !

3. Aller sur http://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 L contenant la liste indiquée dans l’énoncé.

2. Faire afficher le 3ième élément de la liste.

3. Ajouter le nombre 2 entre les éléments 1 et 3.

4. Ajouter 11, 13, 15 en fin de liste.

5. Créer une liste M qui contient les carrés des valeurs de la liste L.

6. Déterminer si le nombre 16 est un nombre de la liste M .

7. Supprimer la valeur 2 de la liste L.

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éfinitalors la liste par Animaux = [[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 à Python2016 – 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 return(d,e)

2 Écrire une fonction.

1. Écrire une fonction qui, pour un entier n passé en paramètre, retourne la somme des n premiersentiers.

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 troisdimensions longueur, largeur et hauteur en arguments. Si la hauteur n’est pas spécifiée, elle estconsidé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 maFonction(a=10 ,b=11):

2 global v1

v1 ,v2 = a,b

4 print(v1 ,v2)

6 v1 ,v2 = 1,2

print(v1 , v2)

8 maFonction(3, 4)

print(v1 , v2)

10 maFonction(5)

print(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 programmepermettant de dessiner le motif ci-dessous. Le ca-ractère, le nombre de répétition du triangle et lalongueur de la base du triangle seront passés en pa-ramètres du programme.Dans l’exemple, le caractère est l’étoile, le triangleest 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’afficherla 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 lasuite U définie par :

u0 = 1 et un+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 valeur n donné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. Écrivezl’algorithme du programme qui initialise un tableau d’entiers S, dont les éléments S[i] devront contenir lasomme 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 2837 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 base 2 et donne sa valeur enbase 10.

2. base 10 vers base 2.Écrire un algorithme pour un programme qui demande un nombre en base 10 et donne sa valeuren base 2.

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 indiquerasa 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 base 2 et donne sa valeur enbase 10.

2. base 10 vers base 2.Écrire un algorithme pour un programme qui demande un nombre en base 10 et donne sa valeuren base 2.

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 indiquerasa conversion dans le bsae correspondant au choix.

Introduction à Python2016 – 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 un receptionnaire d’évènements qui enregistre les actions faites par l’utilisateuret 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ère qui fournit plein d’exemples.

1 #! / usr / bin /env python2 # −∗− coding : utf −8 −∗−

4 from tkinter import * #importat ion de l a b i b l i o t h ï £ ¡ q u e Tkinter

6 def convertir ():

valeur = round (( value .get () -32) /1.8 ,1)

8 resultat . configure (text = " Temperature en degre : "+ str(valeur ))

10 # c r e a t i o n de l a f e n e t r e et c o n f i g u r a t i o n de son t i t r efenetre = Tk() # c r e a t i o n de l a f e n e t r e

12 fenetre . title (" Convertisseur de temperature")

14 #c r e a t i o n d ’ un champ textlabel1 = Label (fenetre , text =" Temperature en Fahrenheit")

16 resultat = Label ( fenetre , text = " Temperature en degre : ")

18 #c r e a t i o n d ’ un champ de s a i s i evalue = IntVar ()

20 value . set (50) #val eur par de f autentree = Entry (fenetre , textvariable=value , width =10)

22

# c r e a t i o n d ’ un ’ Canvas ’ contenant une image24 can1 = Canvas ( fenetre , width =80, height =100 , bg = ’white ’)

photo = PhotoImage ( file = "/ home/ buster2/ thermo .gif")

26 can1. create_image(50, 50, image =photo )

28 #c r e a t i o n de boutons Ãă c l i q u e rbouton1 = Button ( fenetre , text = " convertir", command = convertir )

30 bouton2 = Button ( fenetre , text = " quitter", command = fenetre .quit )

32 #a f f i c h a g e des o b j e t s c r e e scan1. pack( side=RIGHT )

34 label1 . pack ()

entree . pack ()

36 resultat .pack ()

bouton1 . pack ()

38 bouton2 . pack ()

40

#lancement de l a f e n e t r e et a t t e n t e des c l i c s42 fenetre . mainloop ()

44 # d e s t r u c t i o n de l a f e n ï £ ¡ t r e apr ï £ ¡ s l ’ avo i r q u i t t ï £ ¡ efenetre . 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èque import random puis randint(0,10) pour avoir un nombre entier aléa-

toire entre 0 et 10.

Introduction à Python2016 – 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 unfichier dont le nom correspond à la table choisie, écrit la table correspondante dans le fichier puisferme 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 lignesde 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 donnerune 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 contenudu 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 rechercheinfructueuse.

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 lesnoms, prénom, adresse, code postal et numéro de téléphone de différentes personnes. (Considérezpar exemple qu’il s’agit des membres d’un club. Lors de l’inscription d’un nouveau membre, leprogramme 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 denaissance 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 ilproposera 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éesles unes des autres de la manière la plus naturelle (les codes de fin de ligne ne doivent pas apparaître).

Introduction à Python2016 – 2017Exercices

TP1 – Variables et Structures de Contrôle Solutions

TP1 - Variables et Boucles - ex1

1 from random import *

2

nombre = randint(0 ,100)

4 test = 101

essai= 0

6 while test!= nombre :

essai = essai +1

8 test = int(input("faites un essai : "))

if test > nombre:

10 print("Trop grand")

elif test <nombre :

12 print("trop petit")

else:

14 print("Gagné en ",essai ," essais ")

TP1 - Variables et Boucles - ex3

1 # Les reponses au questions sont mises en commentaires (lignes rouges )

2 a = 10

print(a,type(a),id(a))

4 # 10 <class ’int’> 139703810519040

a = 1.5*a

6 print(a,type(a),id(a))

# 15.0 <class ’float ’> 139703328425520

8 a = 10

print(a,type(a),id(a))

10 # 10 <class ’int’> 139703810519040

a = a/2

12 print(a,type(a),id(a))

# 5.0 <class ’float ’> 139703328425520

14 b = "manger "

print(b,type(b),id(b))

16 # manger <class ’str’> 139703289017768

print (2*b)

18 # mangermanger

a+b

20 # TypeError: unsupported operand type(s) for +: ’float ’ and ’str’

# On obtient une erreur car on a voulu additionner un nombre et une chaine de

caractere.

TP1 - Variables et Boucles - ex2

1 # question 1a)

2 a = int(input("Quel nombre souhaitez - vous élever au carré ? "))

print("Le carré de",a, " est", a*a)

4 #on peut aussi utiliser :

print ("Le carré de {0} est {1}". format(a,a**2))

6

8 # question 1b)

vitesse = int( input("Quelle vitesse souhaitez -vous convertir ? "))

10 print(vitesse , "km/heure équivaut à", vitesse*1000/3600 , "m/s")

12 # question 2a)

AB = float(input("Entrez la valeur de l’hyptohénuse : "))

14 AC = float(input("Entrez la valeur du deuxième côté : "))

BC = float(input("Entrez la valeur du troisième côté : "))

16 if AB **2== AC **2+BC **2:

print(’Le triangle est rectangle’)

18 else :

print("Le triangle n’est pas rectangle")

20

# question 2b)

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 solutions réelles : ’,x1 ," et ", x2)

30 elif d==0:

x1=-b/(2*a);

32 print(’Il y a une seule solutions réelle : ’,x1)

else :

34 print("L’équation n’a pas de solutions")

36 question 3a)

A = int(input("Quel est le nombre a dépasser ? "))

38 k=0

while 2**k<A:

40 k +=1

print("k est égal à ",k," car 2^",k-1,"=" ,2**(k -1)," et 2^",k,"=" ,2**k)

42

# question 3b)

44 fin = int( input(" Quel est le début ? "))

for i in range(fin ,0 , -1):

46 print(i)

48 # question 3c)

mot = input("Entrez un mot : ")

50 for lettre in mot:

print(lettre ,end="--")

Introduction à Python2016 – 2017Exercices

TP2 – Notions de Liste Solutions

TP2 - Listes - ex1

1 # les réponses sont mises en commentaires ( lignes rouges )

2 # L’ajout de print(L) à la fin de chaque ligne permet d’avoir un affichage de

la réponse

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 for 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 Animaux = [’Singe ’, ’Lion’, ’Girafe ’,’ Elephant’]

2

print( Animaux)

4

Animaux = [[’Singe ’ ,5], [’Lion ’ ,1], [’Girafe ’ ,2],

6 [’Elephant’ ,3]]

8 print( Animaux)

Animaux[0][1]=6

10 print( Animaux)

TP2 - Listes - ex3

1 notes = []# création de la liste des notes

2

for i in range (9):

4 note = float( input(’Entrer votre note : ’))

notes.append (note)

6

print( notes)

TP2 - Listes - ex4

1 cc = []# création de la liste des notes controle continu

2 exa = []# création de la liste des notes examen

moy = []# création de la liste des moyennes

4

print(" Saisie des notes du controle continu")

6 for i in range (0 ,9):

note = float( input(" Entrer votre note : "))

8 cc.append (note)

10

print(" Saisie des notes d’examen ")

12 for i in range (0 ,9):

note = float( input(" Entrer votre note : "))

14 exa.append (note)

16 totalNote = 0 #pour calculer la moyenne

for i in range (0 ,9):

18 moy.append ((cc[i]+2*exa[i])/3)

totalNote += moy[i]

20 print(" Liste des moyennes",moy)

22 moyenne = totalNote/9

if moyenne >=10:

24 print("Recu !")

else :

26 print("Recalé !")

Introduction à Python2016 – 2017Exercices

TP3 – 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 trinome(a,b,c):

10 d = b**2 -4*a*c

if d >=0 :

12 print("2 solutions ; x1 ={0} et x2 ={1}". format ((-b-sqrt(d))/(2*a) ,(-b+

sqrt(d))/(2*a)))

else:

14 print("Pas de solutions réelles")

16 def suivant(n):

for i in range (n+1,n+11 ,1):

18 print(i,end=";")# utlisation de end=";" pour écriture sur une ligne

20 # Corps du programme (et test des fonctions)

print( somme (10))

22 print( volume (1 ,1 ,5))

print( volume (1 ,2))

24 trinome(1 ,2 , -3)

suivant(17)

TP3 - Fonctions - ex 2

1 def SaisirNote( nomListe):

2 print("saisie des notes de "+ nomListe)

liste = []

4 for i in range (0 ,2):

note = float(input("Entrer votre note : "))

6 liste.append (note)

print("Résumé des notes saisies pour "+ nomListe+" : ",liste)

8 return (liste)

10 def CalculerMoyenneMatiere(liste1 ,liste2 ):

listeResultat = []

12 for i in range (0 ,2):

listeResultat. append (( liste1 [i]+2* liste2[i]) /3)

14 print("Résumé des moyennes par matières : ",listeResultat)

return ( listeResultat)

16

def CalculerMoyenneGenerale(liste):

18 totalNote = 0 #pour calculer la moyenne

for i in range (0 ,2):

20 totalNote += liste[i]

print("La moyenne générale est de ",totalNote/2)

22 return ( totalNote/2)

24 def Decision(Note):

if moyenne >=10:

26 print("Recu !")

else :

28 print("Recalé !")

30 # Corps du programme

cc = SaisirNote(" controle continu")

32 exa = SaisirNote("l’examen")

moy = CalculerMoyenneMatiere(cc ,exa)

34 moyenne = CalculerMoyenneGenerale(moy)

Decision( moyenne)

TP3 - Fonctions - ex 4

1 def motif(car ,repet ,base):

2 for j in range( repet):

for i in range(1, base +1 ,1):

4 print(i*car)

6 motif(’*’ ,3,4)

Introduction à Python2016 – 2017Exercices

TP4 – Module Tkinter Solutions

TP4 - Conversion Temps

1 #!/usr/ bin/env python

2 # -*- coding : utf -8 -*-

4 from tkinter import * # importation de la bibliothèque Tkinter

6 def convertir():

valeur = 3600* int( entree1.get())+60* int(entree2.get())+int( entree3.get())

8 resultat. configure(text = "Temps en seconde : "+str( valeur ))

10 # creation de la fenetre et configuration de son titre

fenetre = Tk() # creation de la fenetre

12 fenetre.title(" Convertisseur de température")

14 # création d’un champ text

label1 = Label(fenetre , text=" Heure")

16 label2 = Label(fenetre , text=" Minute")

label3 = Label(fenetre , text=" Seconde")

18 resultat = Label(fenetre , text = "Temps en seconde : ")

20 # creation d’un champ de saisie

value1 = StringVar()

22 value2 = StringVar()

value3 = StringVar()

24 entree1 = Entry(fenetre , textvariable=value1 , width =30)

entree2 = Entry(fenetre , textvariable=value2 , width =30)

26 entree3 = Entry(fenetre , textvariable=value3 , width =30)

28 # creation de boutons à cliquer

bouton1 = Button (fenetre , text = " convertir", command = convertir)

30 bouton2 = Button (fenetre , text = " quitter", command = fenetre.quit)

32 # affichage des objets crées

label1 .pack();entree1.pack()

34 label2 .pack();entree2.pack()

label3 .pack();entree3.pack()

36 resultat.pack()

bouton1.pack(); bouton2.pack()

38

# lancement de la fenetre et attente des clics

40 fenetre. mainloop()

42 # destruction de la fenêtre après l’avoir quittée

fenetre. destroy()

TP4 - Cercles

1 # script cercle .py

2 from tkinter import *

import random

4

def Cercle ():

6 """ Dessine un cercle de centre (x,y) et de rayon r """

x = random . randint(0, Largeur)

8 y = random . randint(0, Hauteur)

r = ( Largeur+Hauteur)/80

10 Canevas. create_oval(x-r, y-r, x+r, y+r, outline=’blue’, fill=’blue’)

12 def Effacer():

""" Efface la zone graphique """

14 Canevas. delete(ALL)

16 # Création de la fenêtre principale ( main window )

Mafenetre = Tk()

18 Mafenetre.title(’Cercle ’)

20 # Création d’un widget Canvas (zone graphique)

Largeur = 80

22 Hauteur = 80

Canevas = Canvas (Mafenetre , width = Largeur , height =Hauteur , bg =’white ’)

24 Canevas.pack(padx =5, pady =5)

26 # Création d’un widget Button (bouton Go)

BoutonGo = Button (Mafenetre , text =’Go’, command = Cercle )

28 BoutonGo.pack(side = LEFT , padx = 10, pady = 10)

30 # Création d’un widget Button (bouton Effacer)

BoutonEffacer = Button (Mafenetre , text =’Effacer’, command = Effacer)

32 BoutonEffacer.pack(side = LEFT , padx = 5, pady = 5)

34 # Création d’un widget Button (bouton Quitter)

BoutonQuitter = Button (Mafenetre , text =’Quitter’, command = Mafenetre.

destroy)

36 BoutonQuitter.pack(side = LEFT , padx = 5, pady = 5)

38 Mafenetre.mainloop()

TP4 - AirePérimètre

1 #!/usr/ bin/env python

2 # -*- coding : utf -8 -*-

4 from tkinter import * # importation de la bibliothèque Tkinter

6 def calcul ():

rayon = int( entree .get())

8 aire = round (3.14* rayon*rayon ,2)

perimetre = round (2*3.14*rayon ,2)

10 label2 . configure(text = "L’aire est de "+str(aire))

label3 . configure(text = "Le périmètre est de "+str( perimetre))

12

# creation de la fenetre et configuration de son titre

14 fenetre = Tk() # creation de la fenetre

fenetre.title("Aire et Périmètre")

16

# création 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érimètre est de :")

22 # creation d’un champ de saisie

value = StringVar()

24 entree = Entry(fenetre , textvariable=value , width =30)

26

# creation de boutons à cliquer

28 bouton1 = Button (fenetre , text = " calculer", command = calcul)

bouton2 = Button (fenetre , text = " quitter", command = fenetre.quit)

30

# affichage des objets crées

32 label1 .pack()

entree .pack()

34 label2 .pack()

label3 .pack()

36 bouton1.pack(side = LEFT , padx = 10,pady = 5)

bouton2.pack(side = RIGHT , padx = 10, pady = 5)

38

# lancement de la fenetre et attente des clics

40 fenetre. mainloop()

42 # destruction de la fenêtre après l’avoir quittée

fenetre. destroy()

TP4 - TraceLignes

1 #! / usr/bin/env python

2 # -*- coding :Utf8 -*-

4 # Petit exercice utilisant la librairie graphique Tkinter

6 # définition des fonctions gestionnaires d’événements :

def drawline():

8 "Tracé d’une ligne dans le canevas can1"

global x1 , y1 , x2 , y2 , coul

10 can1. create_line(x1 ,y1 ,x2 ,y2 ,width=2, fill=coul)

12 # modification des coordonnées pour préparer la ligne suivante :

y2 , y1 = y2+10 , y1 -10

14

def changecolor():

16 " Changement aléatoire de la couleur du tracé"

global coul

18 pal=[’purple ’,’cyan’,’maroon ’,’green ’,’red’,’blue ’,’orange ’,’yellow ’]

c = randrange(8) # => génère un nombre aléatoire de 0 à 7

20 coul = pal[c]

22 # ------ Programme principal -------

from tkinter import *

24 from random import randrange

26 # les variables suivantes seront utilisées de manière globale :

x1 , y1 , x2 , y2 = 10, 190 , 190 , 10 # coordonnées de la ligne

28 coul = ’dark green ’ # couleur de la ligne

30 # Création du widget principal (" parent ") :

fen1 = Tk()

32 # création des widgets " enfants" :

can1 = Canvas (fen1 ,bg=’dark grey’,height =200 , width =200)

34 can1.pack(side=LEFT)

36 bou1 = Button (fen1 ,text=’Quitter’,command=fen1.quit)

bou1.pack(side= BOTTOM)

38 bou2 = Button (fen1 ,text=’Tracer une ligne ’,command= drawline)

bou2.pack()

40 bou3 = Button (fen1 ,text=’Autre couleur’,command= changecolor)

bou3.pack()

42

# démarrage de l’observateur d’évènements ( boucle principale) :

44 fen1. mainloop()

fen1. destroy()