TP2 : Prise en main de Python L objectif principal de ce premier TP est de présenter sommairement Python. C est un langage de programmation informatique (au même titre que le langage C, ou C++, ou Java, ou le langage de programmation de votre calculatrice... ). C est par son intermédiaire que nous verrons les bases de l algorithmique cette année. Découvrir Pyzo Python est un langage de programmation ; ce n est donc ni un logiciel ni un programme. Cette année, nous utiliserons Pyzo comme environnement de travail pour commencer à programmer en langage Python. Vous pourrez le télécharger gratuitement à l adresse suivante : http://www.pyzo.org/ A l ouverture, s ouvre un mini-guide décrivant l environnement dans lequel vous allez travailler. Vous arrivez ensuite sur la fenêtre d accueil suivante : Très grossièrement, on peut faire le parallèle avec votre calculatrice, qui vous sert à effectuer des opérations de base et également à faire tourner des programmes (résolution d une équation du second degré). Les opérations de base sont ici directement effectuées dans le shell, et les programmes rédigés dans l éditeur (de code). Opérations basiques dans le shell L objectif de cette première activité est de vous assurer que la syntaxe de Python ne diffère pas de celle que vous connaissez déjà avec votre calculatrice. Le but est de taper dans le shell l instruction donnée dans la colonne de gauche, et d observer et d être critique face au résultat obtenu. N oubliez pas de taper sur Entrée pour valider une instruction ; observez que vous pouvez utiliser les flèches directionnelles et du clavier pour retrouver l historique des instructions déjà tapées. 1
5 + 9 2 * 8 2 ** 8 17 / 5 17 // 5 17 % 5 2 * pi a + b 'a' + 'b' 3 * 'MPSI' 4 * 12 4 * '12' ' 123456123456123456123456123456123456123456123456' Création de plages d entiers Comme vous le savez sans doute déjà, on utilise souvent les boucles lorsque l on fait de la programmation. Nous aurons l occasion d y revenir, mais en attendant rappelons qu une boucle fait intervenir une certaine variable (ou compteur) qui va parcourir une certaine plage de valeurs entières. La commande range permet de générer ces plages, comme l illustrent les exemples ci-dessous. list (range(8)) list (range(4,9)) list (range(4,9,3)) [0,1,2,3,4,5,6,7,8,9,10] [3,5,7,9,11,13] [9,19,29,39,49,59,69,79,89,99] Remarque : Les instructions précédentes ont permis de créer des listes d entiers. Une autre commande utile pour les listes est la commande len (abréviation de length) qui permet de connaître la longueur d une liste. Ex 1 Combien y a-t-il de nombres pairs compris (au sens large) entre 0 et 100? Ex 2 Combien y a-t-il de multiples de 17 compris entre 170 et 2023? Différents types de données Comme vous l avez déjà observé dans le premier exercice, le langage Python fait intervenir des objets de natures ou de types différents. Le résultat de l opération 2 * 12 n est pas celui de l opération 2 * 12. Pour chaque type de donnée, un certain nombre d opérations seront définies : il est par exemple permis de faire la somme de deux mots (ex : Bon + jour! ), mais pas la multiplication ou la division par 3... La commande type permet de connaître (comme son nom l indique) le type d un objet et de savoir quelles opérations il sera légitime de lui appliquer. 2
type( 5 ) type( 2.5 ) type( 2,5 ) type( 1/3 ) type( 1//3 ) type( 5.00 ) type( '5' ) type( 'Bonjour' ) type( Bonjour ) type( 3 > 2 ) type( 3 = 2 ) type( 3 == 2 ) type( list ( range(10) ) ) Les différents types rencontrés sont : On peut également convertir une expression d un type donné dans un autre type. Il suffit alors d utiliser respectivement les fonctions list, tuple, str, float et int qui transforment dans la mesure du possible en un objet de type liste, n-uplet, chaîne de caractères, flottant et entier. float ( 5 ) int ( 2.5 ) int ( -2.5 ) str ( 2.5 ) tuple( ' toto ' ) list ( ' toto ' ) float ( ' toto ' ) tuple( list ( ' toto ' ) ) tuple( list ( (1,2,3) ) ) str ( list ( ' toto ' ) ) str ( 3 > 2 ) Affecter une valeur à une variable Pour donner une valeur à une variable, rien de plus simple en Python. L instruction x = 2 permet à la fois de créer une variable x et de lui affecter la valeur 2. Et rien n empêche de travailler avec d autres types que des nombres. 3
x = 3 x ** 2 type( x ) type( x / 2 ) y = 'Abc' y + y 4 * y type( y ) x == y x == 3 Ex 3 Créer une variable a et lui affecter la valeur 2 ; créer une variable b et lui affecter la valeur 3. Puis proposer plusieurs méthodes pour échanger les valeurs de a et b. Adresse d une variable Pour obtenir l adresse en mémoire d une variable, on utilise l instruction id. a = 10 ; id(a) ; b = 5 ; id(b) a = 10 ; id(a) ; b = a ; id(b) a = 10 ; id(a) ; b = 10 ; id(b) a = 10 ; id(a) ; b = 5 ; id(b) ; b = b + b ; id(b) Le type booléen Une variable de type booléen ne peut prendre que deux valeurs True et False. Comme vous le savez encore, lorsque l on dispose d un booléen (d une assertion) P, on peut définir sa négation ; et si l on a deux booléens, on peut définir leur conjonction [P et Q] et leur disjonction [P ou Q]. Les syntaxes respectives de ces opérateurs en Python sont les suivantes : not(p) désigne l assertion non P ; P and Q désigne l assertion [P et Q] ; P or Q désigne l assertion [P ou Q]. 4
3 == 2 + 1 9 == 3 ** 2-1 > 0 a == 3 ( 1.5 ** 2 ) ** (1/2) == ( 1.5 ** (1/2)) ** 2 (1 + 2 ** (-54)) - 1 == 0 (1-1 ) + 2 ** (-54) == 0 5 in list ( range(8) ) a + b == ab 'a' + 'b' == 'ab' Remarque : Attention au = et au ==. Le premier sert à affecter une valeur à une variable, le second sert à comparer deux expressions. Utilisation de l éditeur Si la fenêtre de commande est utile pour les opérations élémentaires, l éditeur se révèle indispensable dès qu il s agit d effectuer des tâches plus complexes. Et pour rentrer directement dans le vif du sujet, mentionnons deux commandes indispensables en programmation : la commande print : cette première instruction sert à afficher un texte, un nombre, une liste... Son intérêt est évident : imaginez que vous ayez dans votre calculatrice un programme qui calcule les solutions d une équation mais qui ne vous les donne pas! la commande input : celle-ci sert à interagir avec l utilisateur, et à récupérer des données saisies au clavier. Exemple : Voici un premier programme basique, qui consiste simplement à faire afficher le texte Hello world Pour réaliser ce programme, il suffit de taper dans l éditeur la commande : print( 'Hello world' ) Si rien ne se passe, essayez de trouver un moyen de débloquer la situation... Exemple : Après la commande print, la commande input. Pour débuter, un nouvel exemple simple : print( 'Tapez un mot au clavier' ) Mot = input() print( ' Vous avez écrit ',Mot) Ex 4 En vous inspirant de l exemple précédent, écrire un programme qui demande à l utilisateur son prénom, et qui renvoie comme message Bonjour prénom!. Ex 5 Modifiez le programme précédent pour qu il affiche aussi la phrase : Vous avez un bien joli prénom de xxx lettres (où xxx désigne effectivement le nombre de lettres du prénom). Ex 6 Écrire un programme qui demande à l utilisateur un nombre N et qui retourne comme résultat son double. 5
Pour aller (un peu) plus loin Ex 7 Créer un programme générant l affichage suivant : A AA AAA AAAA AAAAA AAAAAA AAAAAAA Ex 8 Code ASCII Dans un ordinateur, chaque caractère (lettre de l alphabet, signe de ponctuation... ) est codé par un certain entier (compris entre 0 et 255) appelé son code ASCII. Par exemple le code ASCII de la lettre A est 65. La commande en Python permettant d avoir le code ASCII d un caractère est ord ; et inversement, la commande associant à un entier N le caractère dont le code ASCII est N est chr. Explicitement : l instruction ord( A ) va retourner l entier 65, qui est le code ASCII du caractère A ; l instruction chr(65) va retourner la lettre A. Muni de ces informations : 1. Trouver les codes ASCII des lettres minuscules. 2. Écrire un programme très court générant l affichage : Le code ASCII de la lettre A est 65 Le code ASCII de la lettre B est 66 Le code ASCII de la lettre C est 67 Le code ASCII de la lettre Z est 90 3. Écrire un programme qui demande à l utilisateur de saisir un mot, et qui retourne comme affichage (si l utilisateur a tapé MPSI) : La 1 -ere lettre de votre mot est M La 2 -eme lettre de votre mot est P La 3 -eme lettre de votre mot est S La 4 -eme lettre de votre mot est I votre mot comporte 4 lettres Ex 9 Un dernier triangle pour la route Créer un programme générant l affichage ci-dessous : 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6
TP2 : Prise en main de Python Ex 10 Lapins et suite de Fibonacci Etant donné un couple de bébés lapins, combien de couples de lapins obtiendra t-on après un nombre N de mois, sachant que chaque couple produit chaque mois un nouveau couple, lequel ne devient productif qu au bout de deux mois? Evidemment, énoncé tel quel, on voit mal comment écrire un programme répondant au problème... Cela étant, vous pouvez imaginer quel va être le nombre de couples au bout d un mois, de deux mois, de trois mois etc... Essayez! Vous pourrez vérifier vos calculs au bas de cette page. 1 En attendant, voici quelques éléments de réponse à la question posée. Notons un le nombre de couples au bout de N mois. Les hypothèses de l énoncé imposent u0 = 1 et u1 = 1. Puis on a la relation de récurrence : n N, un+2 = un+1 + un Muni de ces informations, écrire un programme permettant de calculer le nombre de couples de lapins au bout d un nombre de mois choisi par l utilisateur. Remarques : â La suite (un ) étudiée dans cet exemple s appelle la suite de Fibonacci, du nom d un mathématicien du début du 13ème siècle (ça ne date pas d hier) qui a utilisé cette suite pour décrire l évolution d une population de lapins (il n y avait pas tellement de distractions à l époque). â Les nombres de la suite de Fibonacci interviennent curieusement souvent dans la nature (nombre de pétales d un tournesol, d une marguerite... ) ; vous pouvez utiliser Internet pour vous en convaincre. En outre, les termes de cette suite possèdent un incroyable nombre de propriétés, dont (au moins) une est liée au nombre d or : le rapport de 2 termes consécutifs de la suite de Fibonacci a pour limite le nombre d or (qui, pour mémoire, est égal à (1 + 5)/2, très approximativement 1,6). â La suite (un ) modélise assez grossièrement l évolution de la population de lapins... D une part en effet, elle est censée être valide pour toute valeur de n, ce qui suppose donc que les lapins sont immortels. D autre part, on est obligé de présupposer que les deux lapins du couple initial se trouvent mutuellement séduisants. 1. Au bout de N = 0 mois : 1 couple ; pour N = 1, 1 couple ; pour N = 2, 2 couples ; pour N = 3, 3 couples ; pour N = 4, 5 couples ; pour N = 5, 8 couples... Une magnifique illustration du calcul de ces premiers termes est consultable en ligne à l adresse : http ://therese.eveilleau.pagesperso-orange.fr/pages/truc mat/textes/lapins.htm Pour éviter de retaper cette adresse, lancez une recherche Fibonacci lapins sur Google ; c est le premier lien. 7