Informatique Prise en main TP 1 Premiers pas avec un environnement Python Le shell Le shell peut être vu comme une calculatrice (assez basique initialement, seulement en mode texte). • Le shell interprète en direct les commandes qu’on lui donne, sans attendre. • On peut faire des calculs simples dans le shell. • Il y a peu de commandes de base, mais il est facile de l’enrichir. Par exemple, les constantes et les fonctions usuelles mathématiques seront ajoutées avec la bibliothèque math. • Avec les flèches haut et bas, on peut rappeler une commande précédente et la modifier avant de l’exécuter à nouveau. • Les commandes peuvent être sur plusieurs lignes. ▷ Exercice 1 : Vous pouvez tout de suite utiliser l’interpréteur comme une simple calculatrice de bureau. Veuillez donc vous-même tester et commenter les commandes ci-dessous : >>> 5+3 >>> 2 - 9 # les espaces sont optionnels >>> 7 + 3 * 4 # la hiérarchie des opérations mathématiques # est - elle respectée ? >>> (7+3) *4 >>> 20 / 3 # attention : ceci fonctionnerait différemment sous Python 2 >>> 20 // 3 >>> 20.5 / 3 >>> 8 ,7 / 5 # Erreur ! >>> sin (0) Éditeur Les environnements de développement possèdent tous en plus du shell un éditeur. Les avantages d’utilisation de l’éditeur sont multiples. • On peut taper plusieurs commandes à la suite, elles ne seront exécutées que lorsqu’on lancera le script. On va donc pouvoir écrire un algorithme complet avant de vérifier s’il marche. • On peut enregistrer le fichier pour revenir le modifier ou l’exécuter plus tard. • Il en beaucoup plus aisé de corriger un algorithme. Alors que dans le shell, il faudrait retaper toutes les lignes, ici, il suffit de modifier le fichier. • Un programme sera aussi plus lisible. En effet, on va pouvoir aérer le code et ajouter des commentaires dans le fichier qui ne serviront pas à l’ordinateur, mais qui expliqueront au codeur qui relira le code l’utilité de chacune des parties du programme. Les deux éditeurs qu’on va utiliser : • IDLE : éditeur inclus dans la distibution Python. • IEP : éditeur associé à l’environnement de développement Pyzo bien plus performant Les variables En Python, les variables permettent de stocker plus ou moins provisoirement toute sorte d’objets : des valeurs, des resultats de calculs, des fonctions. . . La syntaxe est la suivante : nom = expression 1 année 2016/2017 Informatique Prise en main TP 1 • Sous Python, les noms de variables doivent en outre obéir à quelques règles simples : → Un nom de variable est une séquence de lettres (a-z, A-Z) et de chiffres (0-9), qui doit toujours commencer par une lettre. → Seules les lettres ordinaires sont autorisées. Les lettres accentuées, les cédilles, les espaces, les caractères spéciaux tels que $, #, etc sont interdits, à l’exception du caractère _ (souligné). → La casse est significative (les caractères majuscules et minuscules sont distingués). Prenez l’habitude d’écrire l’essentiel des noms de variables en caractères minuscules (y compris la première lettre). Il s’agit d’une simple convention, mais elle est largement respectée. N’utilisez les majuscules qu’à l’intérieur même du nom, pour en augmenter éventuellement la lisibilité, comme dans tableDesMatieres. En plus de ces règles, il faut encore ajouter que vous ne pouvez pas utiliser comme nom de variables les 33 « mots réservés » ci-dessous (ils sont utilisés par le langage lui-même) : and as array break class continue def del elif else except False finally for from global if import in is lambda None nonlocal not or pass raise return True try while with yield • L’expression : elle peut prendre beaucoup de forme différentes – un entier, un flottant, un calcul, un calcul qui utilise d’autres variables définies auparavant, une liste, un tableau, une fonction, une chaine de caractères. . . Exemple : >>> n = 7 >>> msg = " Quoi de neuf ? " >>> pi = 3.14159 # définir la variable n et lui donner la valeur 7 # affecter la valeur " Quoi de neuf ?" à msg # assigner sa valeur à la variable pi Les exemples ci-dessus illustrent des instructions d’affectation Python tout à fait classiques. Après qu’on les ait exécutées, il existe dans la mémoire de l’ordinateur, à des endroits différents : • trois noms de variables, à savoir n, msg et pi ; • trois séquences d’octets, où sont encodées le nombre entier 7, la chaîne de caractères « Quoi de neuf ? » et le nombre réel 3,14159. ▷ Exercice 2 : Décrivez le plus clairement et le plus complètement possible ce qui se passe à chacune des trois lignes de l’exemple ci-dessous : >>> largeur = 20 >>> hauteur = 5 * 9.3 >>> largeur * hauteur 930 Affectation multiple On peut effectuer plusieurs affectations simultanées, ou multiples >>> >>> 6 >>> >>> 5 5 a ,b , c = 2 ,4 ,6 c a = b =5 a; b et compliquer un peu >>> a =2; b =3; >>> a , b = b , 3* b + a >>> b 11 Un petit raccourci >>> a =17 >>> a +=2 >>> a 19 2 année 2016/2017 Informatique Prise en main TP 1 On peut donc utiliser +=, -=, *=, /= pour raccourcir certaines affectations. Traduire un algorithme en Python La structuration du code repose sur l’indentation, i.e. sur le décalage plus ou moins marqué du début de la ligne. Les conditions Les comparaisons sont possibles à l’aide des opérateurs suivants : x x x x x x == y != y > y < y >= y <= y # # # # # # x x x x x x est est est est est est egal a y différent de y plus grand que y plus petit que y plus grand que , ou égal a y plus petit que , ou égal a y On peut combiner différents tests avec les opérateurs and, or et not >>> (1 <3) and (4 >2) True >>> (5 >8) or not (2 >4) True Comment traduire les briques de base d’un algorithme en Python ? • Le branchement conditionnel avec alternative : 1 2 3 4 if condition : bloc de commandes else : bloc de commandes • Le branchement conditionnel sans alternative : 1 2 if condition : bloc de commandes • La boucle « pour ». Pour signifier les bornes entre lesquelles la variable de boucle va varier, on utilise la commande range. → Si on écrit range(n), où n est un entier naturel, alors la variable prendra les valeurs de 0 à n − 1. → Si on écrit range(a,b), où a et b sont deux entiers naturels, alors la variable prendra les valeurs de a à b − 1. 1 2 for variable in range ( bornes ) : bloc de commandes • La boucle « tant que » : 1 2 while condition : bloc de commandes Quelques exemples 1 2 3 4 1 2 3 if age >= 18: print ( ’ majeur ’) else : print ( ’ mineur ’) for i in range (10) : j = i*i print ( j ) 3 année 2016/2017 Informatique 1 2 3 4 5 Prise en main TP 1 p = 0 while 3** p < 1000: p += 1 print ( ’ La plus petite puissance de 3 qui dépasse 1000 vaut ’) print (3** p ) Une petite différence de comportement entre le shell et l’éditeur Essayer de taper le script suivant dans le shell et dans un fichier (avant de l’exécuter) : 1 2 a = 2 a Si dans le shell, on tape juste le nom d’une variable, Python va évaluer cette variable et alors afficher le résultat. Alors que si on utilise un script, cette évaluation aura aussi lieu, mais en arrière plan. Aucune valeur n’est affichée. Dans un programme, on utilisera la commande print pour afficher la valeur d’une variable. 1 2 a = 2 print ( a ) Exercices ▷ Exercice 3 : Écrire un programme qui pour un réel x donné (affecté en première ligne de l’éditeur) affiche sa valeur absolue (sans utiliser la commande abs). ▷ Exercice 4 : Écrire un programme qui affiche un compte à rebours de 50 jusqu’à 0 (on le fera d’au moins deux façons différentes). ▷ Exercice 5 : Écrire un programme qui donne le signe d’un produit de deux nombres non nuls. Attention, on ne doit pas calculer le produit de ces deux nombres. ▷ Exercice 6 : Écrire un programme qui résout l’équation ax + b = 0 dans R où a et b sont deux réels saisis par l’utilisateur (on tapera le programme dans l’éditeur et on effectera les variables a et b avant d’évaluer le programme). Le tester avec (2, 3), (2, 0), (0, 2) et (0, 0). ▷ Exercice 7 : Écrire un programme qui calcule la somme des entiers de 1 jusqu’à 500. ▷ Exercice 8 : Soit (u n )n la suite définie par u 0 = 1 et ∀n ∈ N, u n+1 = 2u n − 3. Calculer u 8 puis u 20 . Calculer le premier terme de la suite strictement inférieur à −1000. ▷ Exercice 9 : Quelques algorithmes supplémentaires à programmer 1. reste de la division euclidienne de deux entiers naturels en utilisant que des soustractions. 2. quotient et reste de la division euclidienne (mêmes contraintes). 3. déterminer le maximum de 3 entiers a, b et c. 4. déterminer la parité d’un entier qelconque. 5. calcul des puissances entières d’un réel (puissances positives, puis quelconques). 4 année 2016/2017 Informatique Prise en main TP 1 Solutions ▷ Exercice 1 : >>> 5+3 8 # pas de surprise >>> 2 - 9 -7 >>> 7 + 3 * 4 19 # même priorité qu ’ en maths >>> (7+3) *4 40 # idem >>> 20 / 3 6 .6 6 6 66 6 6 6 66 66 6 67 # passage en flottant >>> 20 // 3 6 # c ’ est la division entière >>> 20.5 / 3 6. 833 3 33 33 33 3 3 33 3 # la virgule est un point >>> 8 ,7 / 5 (8 , 1.4) # on crée le couple 8 et 7/5 >>> sin (0) Traceback ( most recent call last ) : File " < stdin > " , line 1 , in < module > NameError : name ’ sin ’ is not defined ▷ Exercice 2 : • première instruction : on affecte la valeur 20 à la variable largeur • seconde instruction : le calcul 5 ∗ 9.3 est evalué et le résultat est affecté à hauteur • troisième instruction : le produit est effectué, le résultat est affiché mais stocké nulle part. ▷ Exercice 3 : 1 2 3 4 5 x = -2 if x >=0: print ( x ) else : print ( - x ) ▷ Exercice 4 : On peut le faire de plusieurs manières (il faut faire attention aux indices de début et de fin) : • avec une boucle for de 0 à 50 1 2 for i in range (51) : print (50 - i ) • avec une boucle while 1 2 3 4 compteur =50 while compteur >=0: print ( compteur ) compteur = compteur -1 • avec une boucle for avec un pas négatif de −1 (attention au dernier entier) 1 2 for i in range (50 , -1 , -1) : print ( i ) ▷ Exercice 5 : On peut le faire de différentes manières, avec plus ou moins de tests. On suppose que les deux nombres sont x et y. 5 année 2016/2017 Informatique 1 2 3 4 5 6 7 8 9 10 Prise en main if x >0: if y >0: print ( " produit else : print ( " produit else : if y >0: print ( " produit else : print ( " produit TP 1 positif " ) négatif " ) négatif " ) positif " ) ou bien 1 2 3 4 if (x >0 and y >0) or (x <0 and y <0) : print ( " produit positif " ) else : print ( " produit négatif " ) ▷ Exercice 6 : 1 2 3 4 5 6 7 if a ==0: if b ==0: print ( " tous les réels sont solution " ) else : print ( " aucune solution " ) else : print ( " une seule solution " ,-b / a ) ▷ Exercice 7 : On utilise un accumulateur auquel on ajoute les entiers les uns après les autres : 1 2 3 4 somme =0 for i in range (501) : somme += i print ( somme ) ▷ Exercice 8 : Il n’y a pas de type « suite ». Le principe est d’effectuer plusieurs fois le remplacement u devient 2u − 3 - il ne faut pas se tromper sur le nombre d’itérations : 1 2 3 4 u =1 for i in range (8) : # ou 20 u =2* u -3 print ( u ) On obtient −509 puis −2097149 pour u 20 . On peut afficher tous les termes : 1 2 3 4 u =1 for i in range (21) : print ( " rang " ,i , " : " ,u ) u =2* u -3 5 6 7 8 9 10 11 12 13 rang rang ... rang rang ... rang rang 0 1 : : 1 -1 8 9 : : -509 -1021 19 20 : : -1048573 -2097149 Remarque : pourquoi fait-on range(20) dans le premier cas, et range(21) lorsqu’on veut tout ? 6 année 2016/2017 Informatique 1 2 3 4 5 6 Prise en main TP 1 u = 1 i = 0 # pour connaître l ’ indice du terme recherché while u >= -1000: u = 2* u -3 i += 1 print ( " rang " ,i , " : " ,u ) 7 8 rang 9 : -1021 ▷ Exercice 9 : 1. On suppose que a est entier et b > 0 (on n’effectue pas les tests dans le programme). On traduit directement l’algorithme du cours 1 2 3 4 r=a # ce n ’ est pas du tout necessaire , mais cela permet de ne pas modifier a while r > b : r =r - b print ( r ) 2. On adapte le programme précédent en comptant le nombre de fois où l’on est passé dans la boucle 1 2 3 4 5 6 7 q =0 r=a while r > b : r =r - b q = q +1 print (q , r ) print (a , b * q + r ) # pour controler 3. pas de difficulté : on peut utiliser le fait que max(a, b, c) = max(max(a, b), c) 1 2 3 4 5 6 7 8 if a > b : m=a else : m=b if c > m : m=c # pas besoin de else m = m print ( m ) 4. Tout dépend des fonctions qu’on peut utiliser. Si on ne veut pas utiliser la division euclidienne de Python, il suffit de calculer le reste de la division par 2 et de regarder s’il est nul ou pas - on reprend le premier programme 1 2 3 4 5 6 7 r=a while r >2: r =r -2 if r ==1: print ( " impair " ) else : print ( " pair " ) On se rend compte que ce programme ne fonctionne pas avec des entiers négatifs. Puisque a et −a ont même parité, on peut combiner deux programmes : 1 2 3 4 5 6 7 8 9 10 11 if a >=0: r=a else r=-a # r contient la valeur absolue de a et est positif while r >2: r =r -2 if r ==1: print ( " impair " ) else : print ( " pair " ) 5. On se contente ici d’un algorithme naïf : on multiplie par x le nombre de fois nécessaire... 7 année 2016/2017 Informatique 1 2 3 4 5 6 7 Prise en main TP 1 # Données : # x : flottant # k : entier positif p =1 for i in range ( k ) : p=p*x print ( p ) On testera notamment les cas particuliers afin de voir si tout se passe bien (k = 0 et k = 1 notamment). Si on souhaite prendre en compte les exposants négatifs, on peut le faire ainsi (si k < 0, alors x k = 1−k ). x 1 2 3 # Données : # x : flottant # k : entier quelconque 4 5 6 7 8 9 10 11 12 13 14 if k >=0: exposant = k else : exposant = - k produit =1 for i in range ( exposant ) : produit = produit * x if k <0: produit =1/ produit print ( produit ) 8 année 2016/2017