1 Prise en main de l environnement informatique Se connecter avec vos identifiants. Lancer le programme scilab. Vérifier que pour scilab 3 + 4 est bien égal à 7. Refermer scilab. 2 L environnement Spyder Lancer le programme spyder. C est avec ce programme que nous allons effectuer l essentiel du tronc commun d informatique. Vous devez vous retrouver face à un environnement ressemblant à peu près à ça : En particulier il y a 3 sous fenêtres : la sous fenêtre de gauche qui est l éditeur de texte, la sous fenêtre en bas à droite qui est la console, et la sous fenêtre en haut à droite dont nous verrons certaines utilisations. 2.1 Le mode console La console peut comporter plusieurs onglets : sélectionner l onglet avec un prompt (trois chevrons, ou encore >>>) En même temps, dans la fenêtredes explorateurs, sélectionner l onglet Explorateur de variables. Dans la console, taper les instructions suivantes : >>> a = 3 >>> b = a+2 Vérifier que dans l explorateur de variables deux variables a et b ont été mémorisées, respectivement avec les valeurs 3 et 5. 1/10
Taper le programme suivant en respectant scrupuleusement la syntaxe, les retours à la ligne et les tabulations : un retour à la ligne est notée [Entrée] et une tabulation est notée [Tab], c est la touche avec une double flèche à gauche du clavier) : >>> a = 8 [Entrée] >>> if a%2 == 0 : [Entrée]... [Tab] print "a est pair" [Entrée]... else : [Entrée]... [Tab] print "a est impair" [Entrée]... [Entrée] Attention au double symbole ==. Normalement vous verrez apparaître le message "a est pair" Attention aussi au rôle fondamental des tabulations sous Python : si vous en oubliez le programme ne fonctionnera pas. Attention enfin au fait qu un bloc comprenant des indentations ne s exécutera dans la console que s il se termine par un dernier retour à la ligne : c est le rôle de la dernière touche [Entrée] sur une ligne vide. On sait qu on est à l intérieur d une structure avec des indentations quand le prompt >>> est remplacé par..., on revient au prompt normal en validant une ligne vide, ce qui provoque la validation (et l exécution) du bloc. 2.2 L éditeur de texte 2.2.1 Choisir l emplacement des sauvegardes Se placer désormais dans l éditeur de texte en cliquant dedans avec la souris. Aller dans Fichier > Enregistrer sous, créer dans Mes Documents un répertoire TP0 et sauvegarder dans le fichier TP0 1.py Par contre éviter la sauvegarde dans le fichier.spyder qui est parfois proposée par défaut (c est un répertoire caché). 2.2.2 Taper et exécuter un programme : la touche [F5] L éditeur est fait pour taper tout un programme, au lieu de valider les instructions une à une. Il n y a pas de prompt >>>. Les lignes écrites avec un espace au début sont les lignes indentées : 4 espaces correspondent exactement à 1 indentation ([Tab]), il faut impérativement qu il y ait au début de chaque ligne le nombre précis de tabulations. Parfois Python positionne lui même ces indentations, auquel cas il ne faut pas en rajouter. Parfois aussi Python positionne par défaut une tabulation superflue en début de ligne : dans ce cas il faut impérativement supprimer cette indentation superflue de début de ligne en appuyant sur la touche [Del]. Taper précisément le code suivant : a = 8 if a % 2 == 0 : print "a est pair" else : print "a est impair" a = a + 1 2/10
print "maintenant a vaut", a if a % 2 == 0 : print "a est pair" else : print "a est impair" Vous pouvez gagner du temps en effectuant un copié collé sur le bloc de 4 lignes qui se répète deux fois : if...print...else...print. Attention à une différence importante avec le mode console : ici un bloc comprenant des indentations n a pas besoin de validation d une ligne vide pour pouvoir s exécuter. Exécuter ce programme en appuyant sur la touche [F5]. Un onglet s ouvre au niveau de la console : c est une console uniquement en sortie du programme exécuté dans l éditeur. Normalement vous obtenez les messages suivants : a est pair maintenant a vaut 9 a est impair Les instructions print du programme écrivent leur message dans cette console en sortie ; cependant vous ne pouvez pas entrer d instruction dans cette console de sortie. Pour revenir à la console d entrée sortie il faudrait changer d onglet dans la console. 2.2.3 Changer de fichier source Sauvegarder le code de l éditeur avec Fichiers > enregistrer ou en appuyant sur [Ctrl+S]). Si vous avez bien effectué le travail de choix du répertoire de sauvegarde, elle est faite dans Mes documents/tp0/tp0_1.py Revenez dans l éditeur. Modifiez la première ligne a = 8 par a = 9. Sauvegardez. Cette nouvelle sauvegarde modifie le fichier TP0 1.py, l ancienne version est donc perdue. Imaginons qu on veuille modifier notre programme en gardant la première version. Changez la ligne a = 9 par a = 15, aller dans le menu Fichier Enregistrer sous et sauvegarder sous le nom TP0 2.py Désormais il y a deux fichiers, chacun avec une version différente du programme. 2.2.4 Ouvrir un programme Ouvrir la version 1 en allant dans Fichier Ouvrir (ou de manière similaire en appuyant sur l icône correspondante dans la barre de fichiers, ou en appuyant sur [Ctrl+O]). Choisir le fichier TP0 1.py, désormais vous avez deux onglets dans l éditeur, chacun avec une version du programme. Il est possible de fermer des onglets inutiles : fermez par exemple la version 2. Il est aussi possible d ouvrir un onglet vierge de l éditeur, ou bien avec Fichier Nouveau fichier, ou bien avec [Ctrl+N], ou bien avec l icône correspondante dans la barre de fichiers. 3/10
2.2.5 Exécution de portions de texte dans l éditeur : la touche [F9] Dans l éditeur ouvrir un onglet vierge de texte. Rentrer le programme suivant (en respectant bien les tabulations, les retours à la ligne et les lignes vides). Les lignes commençant par le symbole # sont des commentaires : elles servent seulement à comprendre le programme lors de le relecture par un humain, et ne sont pas prises en compte par l interpréteur Python. # Exercice 1 : une instruction conditionnelle x = 56 if x < 3 : x = 2*x else : x = x-1 print "Maintenant x vaut", x # Exercice 2 : calcul de norme import math x = 3 y = 4 math.sqrt (x**2 + y**2) Exécuter ce programme avec la touche [F5]. Constater que le message de l instruction print de l exercice 1 est bien affichée dans la console de sortie, mais que le calcul de norme de l exercice 2 n apparaît nulle part (ce calcul est effectué mais n est pas utilisé par une instruction print) : normalement le seul message affiché est Maintenant x vaut 55. Dans la fenêtre des explorateurs aller sur l onglet Explorateur de variables et constater qu aucune variable n a été enregistrée. Maintenant nous allons exécuter uniquement l exercice 2 : avec la souris, surligner tout le code de l exercice 2, mais pas le code de l exercice 1. Appuyer sur la touche [F9] : tout le code surligné est réinjecté en entrée dans la console. Le résultat final de l exercice 2 (5.0) apparaît dans la console : en effet l évaluation d une expression est affichée en mode console (contrairement au mode éditeur + [F5]). Constater que dans l explorateur de variables les variables x et y sont bien affectées. Essayer de faire pareil avec l exercice 1 : surligner à la souris uniquement le code de l exercice 1 et appuyer sur [F9]. Surprise : ça ne marche pas! L explication est que le code de l éditeur de texte est réinjecté en mode console avant d être exécuté, et donc que la structure indentée commençant par if doit finir par une ligne vide. Rajouter cette ligne vide (juste avant print) : # Exercice 1 : une instruction conditionnelle x = 56 if x < 3 : x = 2*x else : x = x-1 print "Maintenant x vaut", x 4/10
Recommencer la manipulation : surligner et appuyer sur [F9]. Cette fois ci l exécution se fait correctement, et dans l explorateur de variables la variable x prend la valeur 55 (donc le code de l exercice 2 n a pas été exécuté). En résumé : en validant le code de l éditeur avec la touche [F5], vous pouvez exécuter un programme en entier de façon simple, et la gestion des retours à la ligne correspond à celle des vrais codes en Python. Par contre si on veut tester des petits morceaux de code séparés, on est obligé d utiliser autant d onglets qu il y a de portions de code à tester. Par ailleurs le code est difficile à déboguer (c est à dire à corriger en cas d erreur). Il existe bien un mode débogueur, mais son usage est peu pratique. À l opposé, la touche [F9] permet d exécuter facilement de petites portions de code et permet un usage simple de l explorateur de variables ; en contrepartie son usage est peu approprié aux longs programmes, et elle nécessite de rajouter une ligne vide à la fin de chaque structure indentée (ce qui n existe pas normalement dans les programmes en Python). 3 L aide en ligne Le langage Python dispose d une importante documentation sur Internet. En général on trouve facilement sur les sites dédiés ou sur les forums toute la documentation nécessaire. En particulier le site docs.python.org possède une documentation détaillée. La version de Python utilisée ici est Python 2.7 : on ira donc sur http://docs.python.org/2.7/ 4 Calculs algébriques usuels sous Python Il faut connaître les principales fonctions de calcul algébrique sous Python. Essayez (à partie de l éditeur ou en mode console, comme vous voulez) les calculs suivants : >>> 3 + 4 # Addition 7 >>> 3-4 # Soustraction -1 >>> 3*4 # Multiplication 12 >>> 3 ** 4 # Puissance 81 Remarque : les espaces autour des symboles d opération sont facultatifs : on peut les mettre si on veut pour améliorer la lisibilité. Néanmoins, il est interdit de mettre un espace en début d instruction. Un espace en début d instruction serait considéré comme une indentation du code, ce qui correspond sous Python à une imbrication comme nous le verrons plus tard. En ce qui concerne la division c est plus compliqué. Comparez les instructions suivantes : >>> 9 / 2 4 >>> 9.0 / 2 5/10
4.5 >>> 9 / 2.0 4.5 >>> 9.0 / 2.0 4.5 Les calculs 9.0 / 2, 9 / 2.0 et 9.0 / 2.0 conduisent à des quotients exacts de divisions alors que 9 / 2 conduit à un quotient de division euclidienne. Pour comprendre cette différence de comportement, saisissons les instructions suivantes : >>> type (9) <type int > >>> type (9.0) <type float > Les valeurs manipulées par Python sont cataloguées selon différents types. Le type int désigne une valeur entière (en anglais : integer) alors que le type float désigne une valeur réelle, ou plus exactement une approximation d un réel par un décimal. float est un raccourci de floating point number : nombre à virgule flottante. Le comportement de l opérateur de division / dépend donc du typage de ses paramètres. Si les deux nombres sont de type int alors / effectue une division euclidienne et la valeur de retour est de type int. Si au moins l un des deux nombres est de type float alors / effectue une division exacte (aux erreurs d arrondi près) et la valeur de retour est de type float. Si on souhaite effectuer une division exacte avec des nombres entiers, on commence par transformer un nombre en float avec l opérateur float(). Il existe aussi l opérateur int() qui convertit un float en int, en tronquant la partie décimale. >>> 9 / 2 # division d une valeur int par une valeur int 4 >>> float(9) # conversion d une valeur int en float 9.0 >>> float(9) / 2 # maintenant la division devient exacte 4.5 >>> int (9.0) # conversion d une valeur float en int 9 >>> int (9.7) 9 >>> int (-9.2) -9 Pour que les choses soient un peu plus compliquées il faut savoir qu à partir de la version 3 de Python (ici nous utilisons la version 2.7) l opérateur / effectue une division exacte, même si les deux paramètres sont de type int. Par exemple l expression 9/4 s évaluera en 2 sous Python 2.7, mais en 2.25 sous Python 3. Dans tous les cas on peut effectuer une division euclidienne avec // : l expression 9//4 s évaluera en 2, que l on soit sous Python 2.7 ou sous Python 3. 6/10
Le module math de la bibliothèque standard Les fonctions mathématiques usuelles x x, sin, cos,... sont disponibles dans la bibliothèque standard de Python : ce ne sont pas des fonctions qui existent dans le noyau de Python mais elles ont déjà été programmées ; pour pouvoir les utiliser il faut les charger depuis le module math de la bibliothèque standard avec une instruction import. Voici un descriptif (non exhaustif) des principales fonctions du module math : >>> sqrt (4) Traceback (most recent call last): NameError: name sqrt is not defined >>> from math import * # charger toutes les fonctions du module math >>> sqrt (2) 1.4142135623730951 >>> pi 3.141592653589793 >>> e 2.718281828459045 >>> cos(pi) -1.0 >>> sin(pi) # remarquez les erreurs d arrondi 1.2246063538223773e-16 >>> exp(2) 7.38905609893065 >>> floor (3.6) # partie entiere 3.0 >>> ceil (3.6) # partie entiere superieure 4.0 >>> fabs (-3.6 ) # valeur absolue 3.6 >>> factorial (5) 120 >>> log(4) 1.3862943611198906 7/10
>>> log (4, 2) # logarithme en base 2 2.0 >>> pow (3, 4) # mise a la puissance 81.0 >>> acos (1.) # fonction arccos 0.0 >>> asin(1.) # fonction arcsin 1.5707963267948966 >>> atan (1.) # arctan 0.7853981633974483 >>> atan2 (2, -1) # atan2 (y, x) calcule un argument de x+iy 2.0344439357957027 >>> cosh(2) # cosinus hyperbolique 3.7621956910836314 >>> sinh (2) # sinus hyperbolique 3.6268604078470186 >>> tanh (3) # tangente hyperbolique 0.9950547536867305 Les parenthèses servent ou bien à délimiter les paramètres d une fonction, ou bien à définir des règles de priorité dans les calculs. Par connaître les règles précises de priorité dans les calculs en l absence de parenthèses, on se réfèrera à la documentation officielle de Python. Il s agit en gros des règles de priorité usuelles : la puissance est prioritaire sur le produit qui est prioritaire sur l addition. >>> from math import cos >>> cos 1 # syntaxe incorrecte : il manque les parentheses cos 1 # pour delimiter les parametres ^ SyntaxError: invalid syntax >>> cos (1) # syntaxe correcte 0.5403023058681398 >>> 1 + 3 * 5 # la multiplication est prioritaire sur l addition 16 >>> (1 + 3) * 5 20 8/10
5 Exercices 1) Le plan est muni d un repère orthonormé direct. Soient deux vecteurs u et v de coordonnées respectives (x u, y u ) et (x v, y v ). On admettra le résultat mathématique suivant : Le déterminant de u t de v est det( u, v ) = x u y v x v y u. det( u, v ) = 0 si et seulement si u et v sont colinéaires. det( u, v ) > 0 si et seulement si ( u, v ) est directe, c est à dire si et seulement si l angle ( u, v ) possède une mesure dans ]0, π[. det( u, v ) < 0 si et seulement si ( u, v ) est indirecte, c est à dire si et seulement si l angle ( u, v ) possède une mesure dans ] π, 0[. Soient trois points non alignés A(x A, y A ), B(x B, y B ) et M(x, y). Écrire une commande if qui permet de savoir si ( AB, AM) est directe ou non. Tester votre programme avec : ( ) ( ) ( ) 10 2 7 a) A, B et M 10 2 5 ( ) ( ) ( ) 10 2 3 b) A, B et M 10 2 5 (ici ( AB, AM) est directe) (ici ( AB, AM) est indirecte) 2) On suppose de plus dans cette question que la droite (AB) n est pas horizontale : y A y B. Écrire une instruction if qui permet de savoir si le point M est à droite ou non de la droite (AB). Attention : comme on peut le voir sur le schéma ci dessous, M peut être à droite de la droite (AB) alors que M est à gauche d un des deux points A et B. Par ailleurs, on ne sait pas si A est au dessus de B ou si c est B qui est au dessus de A. A- +M B- Tester votre programme avec : ( ) ( ) 10 2 a) A, B et M 10 2 droite de (AB)) ( ) ( ) 10 2 b) A, B et M 10 2 gauche de (AB)) ( ) 7 (ici M est à 5 ( ) 3 (ici M est à 5 3) On se donne trois points non alignés A, B et C. Soit M un quatrième point qui n appartient ni à la demi droites [AB) ni à la demi droite [AC). Écrire une instruction qui permet de savoir si le point M appartient à la partie saillante ou rentrante du secteur angulaire ( BAC). 9/10
-B Partie saillante A - C Partie rentrante 10/10