1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en raison de sa simplicité et son efficacité. Généralement, on pourra procéder de deux façons, que ce soit directement en tapant des lignes de commandes dans une console dédiée (à la manière d une calculatrice) ou alors en construisant des modules de fonctions dans un fichier texte qu on pourra appeler par la suite. Les logiciels permettant ce travail sont nombreux et on fera ici le choix d utiliser les logiciels Spyder ou Pyzo qui autorisent l affichage de différentes fenêtres très pratiques: Dans les deux cas, on pourra trouver: uneconsole interactive: elle permetàl utilisateur d entrerdes lignes decommande quiserontdirectement exécutées. un éditeur de scripts: il permet de programmer des modules de fonctions qui devront être compilés, afin d être appelés dans l interface interactive pour être utilisés. 2 Utilisation de la console en mode interactif 2.1 Calcul numérique Dans la console interactive, les différentes instructions devront être entrées après le prompt principal >>> avant d être interprétées. Comme une calculatrice, les opérations usuelles et leurs priorités sont aisément reconnues: >>> -5+11*6 61 >>> (7+11)*4 72 Bien entendu, on peut entrer plusieurs instructions à la suite à condition de les séparer à l aide du symbole ;, les résultats sont alors présentés sur des lignes séparées: >>> 10/3; 10//3; 10%3 3.3333333333333335 3 1 On notera la différence entre la division sur les nombres réels et la division sur les nombres entiers pour laquelle le symbole // renvoie le quotient dans la division euclidienne, alors que le reste est obtenu avec le symbole %. De la même façon, on fera attention au calcul de la puissance d un nombre réel:
>>> 9**2 Par ailleurs, on retiendra que les flèches du clavier et nous permettent de reprendre les instructions précédentes en parcourant la feuille de travail et que le symbole nous renvoie le dernier résultat affiché... mais celui-ci ne fonctionne que dans le mode interactif: >>> 9**2; 2.2 Gestion des variables et affectation Dans de nombreux problèmes, on sera amené à définir des objets ou à mémoriser des valeurs. Pour plus de clarté, on pourra définir des variables en utilisant le symbole d affectation = de la façon suivante: nom de la variable = valeur et qu on distinguera de l évaluation booléenne == qui teste une condition logique: >>> resultat = 11 # on affecte la valeur 11 au résultat >>> resultat == 10 # on vérifie si l égalité est vraie ou fausse False On remarque quelques habitudes de programmation: le nom des variables est souvent simple, écrit en minuscule et on respectera l insertion d espace autour du signe = pour l affectation. De plus, on pourra prendre l habitude de commenter les lignes de code grâce au symbole #. On peut alors utiliser les variables définies pour d autres instructions même si on fera attention à l ordre dans lequel on a défini nos variables: >>> resultat*a NameError: name a is not defined >>> a = 128; resultat*a 1408 Comme de nombreux langages, Python autorise la réaffectation, c est à dire qu on peut modifier la valeur donnée à l identificateur: >>> a = a+1; a 129 Par contre, pour libérer le nom d une variable, on utilise la fonction del: >>> del(a); a NameError: name a is not defined Enfin, on pourra aussi retenir que l affichage de la valeur de la variable se fait ici par un simple appel, mais on sera obligé d utiliser la fonction print pour forcer l affichage dans un programme: >>> a = 12; b = a**2; print(b) 144 2.3 Typage dynamique Quand on définit une variable en Python, il n est pas utile d en préciser son type. En effet, pour chaque objet manipulé, le langage lui associe automatiquement une classe qu on obtient avec la fonction type: >>> a = 144/12; a; type(a) 12.0 <class float > 2
>>> b = bonjour ; b; type(b) bonjour <class str > Parmi les plus courantes, on peut distinguer: la classe des nombres entiers définie comme class int pour integer la classe des nombres réels, dits à virgule flottante définie comme class float pour floating number la classe des chaînes de caractères définie comme class str pour string la classe des listes, qui regroupe des objets structurés et définie comme class list pour list On fera donc très attention à la classe des objets manipulés car ils n auront pas les mêmes attributs: pour un objet donné, et donc une classe donnée, on pourra faire appel à certaines fonctions particulières plutôt que d autres: on parle parfois des fonctions ou méthodes associées. 2.4 Un avantage de Python: l affectation multiple Dans la plupart des langages, une variable désigne une boîte dans laquelle on stocke une valeur et il faut éviter d en écraser le contenu... En Python, une variable n est rien d autre qu un identificateur ou une étiquette attachée à un objet. Cette différence nous autorise alors à faire des affectations multiples. Par exemple, il est tout à faite possible de faire des affectations simultanées: >>> a = b = 7; a,b; a+b (7,7) 14 De la même façon, on peut mener des affectations en parallèle: >>> c,d,e = bonjour, les, mpsi ; c,d,e; c+d+e ( bonjour, les, mpsi ) bonjourlesmpsi On remarque justement que l opérateur + agit différemment pour la classe des chaînes de caractère: il permet ici de les concaténer. Exemple 1 - Echange des contenus de deux variables 1. Déterminer le résultat obtenu pour ces lignes d instructions: >>> x = 8; x = x+2; y = x**2 >>> x,y >>> x = 8; x,y = x+2,x**2 >>> x,y 2. On attache deux variables x et y à des valeurs données. En utilisant une variable auxiliaire aux, écrire une ou plusieurs lignes d instructions qui échange les contenus de x et y. 3. Même question sans utiliser de variable auxiliaire. 3 Utilisation de l éditeur de scripts 3.1 Mise en place d un programme et exécution Pour construire un programme dans le langage Python, il suffira de rédiger les séquences d instruction comme on le ferait dans l interface, et cela tout en essayant de garder nos habitudes: on n hésitera pas à rédiger des commentaires avec le symbole # tout au long du programme pour en faciliter sa compréhension, mais aussi sa construction, on respectera la syntaxe du langage Python: saut de ligne, utilisation des symboles : et ;, indentation... c est cette structure physique qui sera interprétée par l interface. Par exemple, pour construire une fonction module qui pour des composantes données (a, b) calcule le module du nombre complexe a + ib associé, on entre la séquence suivante en commençant par la commande def et en respectant l indentation: def module(a,b): # calcul du module On prendra alors soin d enregistrer le fichier sous un nom explicite module.py avant de le lancer depuis l éditeur grâce au raccourci clavier F5 ou Execution. S il n y a pas d erreur de syntaxe, il suffit alors d appeler le programme dans la console en donnant des valeurs effectives aux arguments formels a et b: 3
>>> runfile( C:/WinPython-32bit-3.3.2.3 >>> module(3,4) 5.0 3.2 Gestion des entrées et sorties La plupart du temps, on cherchera donc à construire des programmes fonctionnels, c est à dire des programmes qui, à partir d arguments formels, renvoient un ou plusieurs résultats. Ainsi, les paramètres du programme seront évalués à l appel de la fonction. Cependant, il existe une autre commande très intéressante: input permettant de dialoguer avec l utilisateur pour obtenir une valeur au cours du programme, et dont l affectation par défaut est du type str. Par exemple, on peut construire un programme qui affiche une subdivision de l intervalle [a, b], mais en demandant à l utilisateur de renseigner le nombre de points souhaité: def module(): # ici la fonction n attend aucun argument a,b = float(input( partie réelle? )),float(input( partie imaginaire? )) On remarquera l utilisation de la commande float qui convertit la chaîne de caractère entrée par l utilisateur en un nombre réel. Ainsi, si on lance le programme, on obtient: >>> module() partie réelle? 3 partie imaginaire? 4 5.0 De la même façon, nous avons vu que la commande return interrompt l exécution du programme pour renvoyer le résultat donné. Et bien, il est aussi tout à fait possible d afficher des valeurs au cours du programme, et ceci avec la fonction intégrée print: def module(): # ici la fonction n attend aucun argument a,b = float(input( partie réelle? )),float(input( partie imaginaire? )) print( le module de,a, +i,b, est ) 3.3 Définition d une programme simple: la fonction mathématique Comme sur une calculatrice, on pourra utiliser l éditeur pour définir des fonctions mathématiques simples avant de les évaluer. Par exemple, on peut construire la fonction suivante: def f(x): # on définit f dont l argument formel est x return 1/(x**2+x) # et qui à x associe 1/(x 2 + x) Encore une fois, on fera attention à la syntaxe associée à cette commande. Sous Python, le saut de ligne après le symbole : et l indentation, correspondant à 4 espaces, sont fondamentaux. L évaluation de la fonction f s effectue encore par un simple appel de celle-ci en donnant aux arguments des valeurs effectives: >>> f(1), f(2) (0.5, 0.16666666666666666) Par contre, on devra veiller aux valeurs interdites; à défaut, l interface renverra une erreur à l exécution: >>> f(0) ZeroDivisionError: division by zero On pourra corriger la définition de f à l aide d un test rapide en début de programme: def f(x): if x == 1 or x == 0: print("c est une valeur interdite!") else: return 1/(x**2+x) # il s agit d un test booléen 4
Exemple 2 - Racines d un polynôme du second degré à coefficients réels On considère un polynôme du second degré à coefficients réels p(x) = ax 2 +bx+c. 1. Construire un programme trinome qui, pour les valeurs a, b, c données, renvoie les racines réelles du polynôme p. 2. Modifier le programme précédent afin d obtenir les racines éventuellement complexes de p. Exemple 3 - Valeurs approchées du zéro d une fonction On cherche ici à déterminer une valeur approchée de α, unique zéro de la fonction définie par f(x) = xln(x) 1 sur [1,2]. 1. Justifier que l équation f(x) = 0 possède une unique solution sur [1, 2]. 2. Expliquer cette séquence d instructions: >>> L = [1+k/10 for k in range(0,11)]; [f(x) for x in L] 3. Définir la fonction f donnée dans l éditeur, puis utiliser celle-ci pour déterminer les valeurs approchées à 10 3 près par défaut et par excès du réel α. Exemple 4 - Tableau de valeurs d une fonction Construire un programme table qui, pour un intervalle [a, b] donné, renvoie le tableau de valeurs de la fonction carrée, mais en demandant le nombre de points souhaité. 5