E Bougnol, JJ Fleck, M Heckmann & M Kostyra, Kléber, PCSI& - I. Environnement de travail 1/4 Introduction à l’environnement de travail Avant de commencer, dirigez vous vers le site internet http://pcsi.kleber.free.fr/IPT/ et téléchargez le dossier zippé TP03_eleves.zip et dézippez-le (si windows ne l’a pas déjà fait pour vous). Stockez le dossier TP03/ dans un répertoire Info/ de votre dossier personnel (il y a normalement un lien sur le bureau qui pointe directement dessus). Partie I Environnement de travail Pour programmer, vous allez avoir besoin de vous familiariser avec votre environnement de développement (IDE en anglais pour Integrated Development Environment). Au lycée, l’environnement choisi est Pyzo. Commencez par identifier les différentes fenêtres qui vous sont accessibles: – La fenêtre principale devrait être celle où vous pouvez écrire et enregistrer votre code dans un fichier (dit « fichier source »). Elle possède des lignes numérotées sur la gauche qui vous permettent de vous repérer facilement dans le fichier, notamment quand Python vous signalera l’existence d’un bug dans votre programme. – La console est le Python interactif, c’est-à-dire que vous pouvez y rentrer des commandes pour tester leur comportement sans que ce soit sauvegardé dans un fichier (elle doit donc être cantonnée au rôle de test rapide). Elle est facilement reconnaissable au symbole >>> qui commence chacune des lignes où vous pouvez rentrer du code. C’est aussi à l’intérieur de celle-ci que sera exécuté le code de votre fichier principal. – La fenêtre d’aide est un accès direct à l’aide en ligne de Python dans laquelle vous pourrez rechercher diverses informations sur la syntaxe ou les conditions d’utilisation de commandes données. – Enfin, l’« Inspecteur » vous permet d’accéder directement à certaines parties de votre code une fois que votre fichier aura acquis une certaine structure (en particulier via l’écriture de fonctions) Avant de commencer à utiliser cet environnement, il est nécessaire de se familiariser avec lui en suivant le cheminement ci-après: – Ouvrez le fichier TP03_introduction_douce.py qui se trouve dans le sous-dossier Info/TP03/ de votre dossier personnel. – Écrivez print(’Hello World !’) dans la fenêtre principale (n’oubliez pas les apostrophes ni les parenthèses). – Repérez dans les menus comment sauvegarder votre fichier ainsi modifié et retenez le raccourci clavier (Ctrl-S). (NB: par la suite, il ne sera nécessaire de sauvegarder qu’avant de quitter le programme car l’exécution sauvegarde automatiquement les modifications effectuées précédemment. Néanmoins, il est toujours plus sûr de faire un petit Ctrl-S de temps en temps pour ne pas perdre toutes ses données si Windows plante..) – Repérez dans les menus comment exécuter votre code et retenez le raccourci clavier. ATTENTION: pour que les chemins d’accès soient correctement initialisés, il faut sélectionner « Exécuter en tant que script » ou « Run file as script » (Ctrl-Shift-E). Faites-le et vérifiez que Hello World ! s’imprime bien dans la console. Si au lieu de cela, il y a un message d’erreur, lisez-le bien et corrigez votre source en conséquence. En cas de problème, demandez des conseils au personnel encadrant. – Décommentez la ligne permettant de tester votre première fonction (sans l’avoir modifiée pour le moment) et exécutez le script. Python devrait vous tancer vertement. E Bougnol, JJ Fleck, M Heckmann & M Kostyra, Kléber, PCSI& - II. Quelques exercices d’entraînement 2/4 Hello World ! test_hello_world (test_TP03.HelloTest) ... FAIL ====================================================================== FAIL: test_hello_world (test_TP03.HelloTest) ---------------------------------------------------------------------Traceback (most recent call last): File ".../Info/TP03/test_TP03.py", line 15, in test_hello_world self.assertEqual(hello_world(),'Hello World !') AssertionError: 'Mais il va falloir changer des choses...' != 'Hello World !' - Mais il va falloir changer des choses... + Hello World ! ---------------------------------------------------------------------Ran 1 test in 0.121s FAILED (failures=1) – Retournez dans votre fichier source TP03_introduction_douce.py et modifiez-le pour que la fonction hello_world() renvoie bien ’Hello World !’ et non la chaîne qui y est présente 1 2 3 def hello_world(): ’’’Normalement, cela doit renvoyer Hello World !’’’ return ’Hello World !’ – Exécutez à nouveau (Ctrl-Shift-E) votre fichier. Python devrait à présent vous signaler que tout va bien test_hello_world (test_TP03.HelloTest) ... ok ---------------------------------------------------------------------Ran 1 test in 0.012s OK – Vous savez à présent comment ouvrir/enregistrer des fichiers, lancer des tests, etc. Vous êtes donc prêts pour affronter la suite. Partie II Quelques exercices d’entraînement Le fichier TP03_introduction_douce.py est déjà préécrit pour contenir des tests pour les fonctions qu’il vous faut écrire. Pour lancer les tests concernant un exercice particulier, il vous suffit de décommenter la ligne correspondante afin de vérifier votre avancée. Continuez à définir vos fonctions dans le même fichier TP03_introduction_douce.py et implémentez les diverses fonctions suivantes (faites attention aux conventions de nommage). On n’oubliera pas de commenter abondamment toutes les fonctions créées. E Bougnol, JJ Fleck, M Heckmann & M Kostyra, Kléber, PCSI& - 1 II. Quelques exercices d’entraînement 3/4 Simple fonction Écrire une fonction simple_fonction(x) qui renvoie la valeur de la fonction affine f telle que f (0) = 15 et f (10) = 0. 2 Fonction conditionnelle Programmer dans fonction_conditionnelle(x) la fonction f définie de la manière suivante: R −→ R si x < 0 1 f: x 7−→ x + 1 si x ∈ [ 0 ; 2 ] −3x si x > 2 3 Tables de multiplication Écrire une fonction table_mul(n,m) qui prend en argument deux entiers n et m et renvoie en sortie une chaîne de caractères1 qui contient la table de multiplication de m pour les n premiers entiers. Par exemple table_mul(11,15) doit renvoyer (sans espace, ni en début, ni en fin de ligne) sous forme de chaîne 1 fois 15 = 15 2 fois 15 = 30 3 fois 15 = 45 4 fois 15 = 60 5 fois 15 = 75 6 fois 15 = 90 7 fois 15 = 105 8 fois 15 = 120 9 fois 15 = 135 10 fois 15 = 150 11 fois 15 = 165 Il peut être utile de signaler que "\n" correspond au caractère indiquant un passage à la ligne dans une chaîne de caractère. 4 Positivité Construire une procédure booléenne positif(L) qui prend en entrée une liste L de nombres réels et qui retourne True si tous les termes de la liste sont positifs ou nuls et False dans le cas contraire. 5 Chiffres à sommer 1. Proposer une procédure somme_chiffres(n) qui renvoie la somme tous les chiffres de l’écriture décimale de l’entier n. Par exemple somme_chiffre(139) doit renvoyer 13 car 1 + 3 + 9 = 13. 2. Armé de cette procédure, écrivez-en deux autres: probleme_16() et probleme_20() qui, sans prendre aucun argument, renvoient les réponses respectives des problèmes 16 et 20 du projet Euler, voir http://projecteuler.net/problem=16 1 et http://projecteuler.net/problem=20 Ce qui veut dire que vous ne devez pas utiliser l’instruction print à l’intérieur de la fonction en question. E Bougnol, JJ Fleck, M Heckmann & M Kostyra, Kléber, PCSI& - 6 II. Quelques exercices d’entraînement 4/4 Quelle heure est-il ? Un site de voyage permet de calculer les temps de parcours entre deux villes sous forme d’une liste à 4 éléments [jours,heures,minutes,secondes] représentant respectivement les durées en jours, heures, minutes et secondes pour le voyage, le tout de manière unique, c’est-à-dire que 27 heures vaut en fait 1 jour et 3 heures. Néanmoins, si vous faites plusieurs escales, vous voudriez bien connaître la durée totale que vous aurez passée dans les transports. On va décomposer ce problème en plusieurs sous-problèmes plus simples à résoudre. 1. Écrire une fonction decomposition(duree) qui prend en argument une durée exprimée en secondes et renvoie une liste composée de quatre entiers sous la forme [jours,heures,minutes,secondes] 2. Écrire la fonction inverse secondes(L) qui prend en argument une liste L composée de quatre entiers sous la forme [jours,heures,minutes,secondes] pour renvoyer la valeur correspondante en secondes. 3. En utilisant les deux fonctions précédentes, écrire la fonction addition(L1,L2) qui va additionner correctement deux listes L1 et L2 à quatre élements du type [jours,heures,minutes,secondes] et renvoyer la liste du même type correspondant à la durée totale du voyage. 4. Écrire une fonction affichage(L) qui affiche le temps total passé en transport de manière un peu plus lisible. Par exemple affichage([3,22,10,54]) doit répondre Vous allez voyager un total de 3 jours, 22 heures, 10 minutes et 54 secondes NB: Pour ne pas compliquer les choses, on ne s’occupera pas des « s » en trop dans le cas où l’on devrait écrire « 1 heures » ou « 0 secondes »... 5. Enfin, écrire une fonction temps_total(liste_de_durees) qui prend en argument une liste (de taille arbitraire) de durées sous la forme [jours,heures,minutes,secondes] et renvoie le temps total de parcours à l’aide de la fonction affichage(L) précédente. I occasionally do this with mile markers on the highway. .com