Langages Informatiques Programmation avec le langage Python Un outil commode au service de l’ingénieur Xavier Dupré Avant-propos Quelques années passées à initier les élèves à l’informatique avec différents langages me poussent à dire que le langage Python est sans doute un langage qui s’apprend plus vite sans pour autant être limité. Les ordinateurs ont progressé et il n’est plus souvent nécessaire d’utiliser des langages tels que le C certes plus rapide et plus connu mais aussi plus difficile à maîtriser. A partir de 2004, le langage Python a été utilisé à l’ENSAE1 pour initier les élèves à la programmation et, depuis cette date,j’aipuobserverunregaind’intérêtdesélèvespourcettematièrequis’appuyait auparavant sur le langage C. Certains étudiants avouent même s’être amusés; leur projet de programmation n’est plus centré sur un langage mais sur les résultats qu’il permet d’obtenir. Le langage Python suffit pour la plupart des besoins d’un ingénieur et permet de réaliser beaucoup plus rapidement des programmes informatiques qui fonctionnent sur les principaux systèmes d’exploitation. Internet fournit également un panel très large de librairies pour faire du calcul scientifique, des jeux ou encore des sites Internet. Il suffit parfois de quelques minutes pour télécharger une extension et s’en servir.Malgrécesavantages,ilexistepeudelivresdelanguefrançaisesurcelangage, beaucoupmoinsqueceuxécritsenlangueanglaisedontquelquesunsseulementsont traduits. Ce livre n’aborde pas des sujets comme la programmation web ou l’utilisation conjointe des langages Python et SQL. La description du langage couvre les be- soins qui sont ceux d’un ingénieur, c’est-à-dire une personne dont la programma- tion ne constitue pas l’essentiel de son travail. Chaque notion est illustrée par des exemples2. Ceux-ci sont particulièrement présents lors de l’introduction de notions pas toujours évidentes à comprendre comme les threads, les interfaces graphiques et l’utilisation de C++. Le livre se ferme sur plusieurs chapitres ne contenant que des exercices et leurs corrections. Ces exercices sont de deux types : des travaux dirigés et des problèmes courts. Ces derniers ont été posés lors des examens à l’ENSAE et ont été conçus pour préparer les élèves à répondre aux questions techniques lors des entretiens d’embauche. Le langage Python évolue assez vite, il est de plus en plus utilisé ce qui explique la multitude d’informations qu’on peut trouver sur Internet. Le site officiel3 recense la plupart des extensions (plus d’une centaine) accessibles gratuitement. Il existe également de nombreux sites d’aide comme WikiPython4 qui recense des exemples deprogrammessurdessujetsvariés.L’anglaisestlalangued’échangeparexcellence 1. Ecole Nationale de la Statistique et de l’Administration Economique, http://www.ensae.fr/ 2. L’ensemble de ces exemples est accessible depuis le site http://www.xavierdupre.fr. 3. http://www.python.org/ 4. http://wikipython.flibuste.net/ dans le monde informatique et le langage Python n’y échappe pas même si les moteurs de recherches retournent presque toujours des résultats en français pour des requêtes concernant Python, à condition toutefois d’y insérer un mot de syntaxe exclusivement française. Il n’est pas utile de lire tous les chapitres pour savoir programmer. Le chapitre 1 décrit l’installation du langage Python et son utilisation via des éditeurs de texte. Les chapitres 2 et 3 introduisent les premiers concepts, à partir de là, il est déjà possible d’écrire des programmes conséquents et notamment de lire les chapitres 11 à 12 pour s’exercer. Les chapitres 4 et 5 s’intéressent à la programmation objet, qui n’est pas indispen- sable dans un premier temps. La programmation est utilisée en tant qu’outil pour atteindre un objectif, réaliser une étude ou tester un modèle. Nombreux sont les élèves qui choisissent de contourner les classes et les objets sans pour autant nuire à la qualité de leur travail; les programmes qu’ils conçoivent sont sans doute moins lisibles mais ils parviennent à l’objectif fixé. Le chapitre 6 présente comment créer ses propres extensions. Les derniers para- graphes ne concernent que des utilisateurs experts puisqu’ils parlent de l’utilisation conjointe des langages Python et C++ à partir d’un exemple conçu à cet effet et utilisable en peu de temps5. Cette technique est intéressante dans des domaines où les calculs doivent être impérativement très rapides comme en finance, matière à laquelle sont formés les étudiants de l’ENSAE. Le chapitre 7 introduit les fichiers où comment conservées des résultats sur disque dur. Le chapitre 8 présente les interfaces graphiques et le chapitre 9 les threads. Les chapitres10à12necontiennentquedesexercicesetproblèmessurlesquelsplusieurs promotions de l’ENSAE ont été évaluées. 5. Concernantcepoint,cetexempletéléchargeablepermetdeconstruireentièrementunmodule Python écrit en C++, l’ajout d’une fonctionnalité ne prenant que quelques minutes. Cet exemple fonctionnesousMicrosoftWindows avecMicrosoftVisualC++,ilutiliselalibrairieBoostPython. Microsoft Windows est le système d’exploitation le plus courant dans les sociétés. Table des matières partie I Le langage Python 9 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.1 Ordinateur et langages . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2 Présentation du langage Python . . . . . . . . . . . . . . . . . . . . . 12 1.3 Installation du langage Python . . . . . . . . . . . . . . . . . . . . . 14 1.4 Installation d’un éditeur de texte . . . . . . . . . . . . . . . . . . . . 18 1.5 Premier programme . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.6 Installation d’extensions (ou modules externes) . . . . . . . . . . . . 23 1.7 Outils connexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2. Types et variables du langage Python . . . . . . . . . . . . . . . . . . . . . 31 2.1 Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2 Types immuables (ou immutable) . . . . . . . . . . . . . . . . . . . . 32 2.3 Types modifiables (ou mutable) . . . . . . . . . . . . . . . . . . . . . 42 2.4 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3. Syntaxe du langage Python (boucles, tests, fonctions) . . . . . . . . . . . . 57 3.1 Les trois concepts des algorithmes. . . . . . . . . . . . . . . . . . . . 57 3.2 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.3 Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.4 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.5 Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.6 Fonctions usuelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.7 Constructions classiques . . . . . . . . . . . . . . . . . . . . . . . . . 87 4. Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.1 Présentation des classes : méthodes et attributs . . . . . . . . . . . . 93 4.2 Constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.3 Apport du langage Python . . . . . . . . . . . . . . . . . . . . . . . . 99 4.4 Opérateurs, itérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.5 Méthodes, attributs statiques et ajout de méthodes . . . . . . . . . . 108 4.6 Copie d’instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.7 Attributs figés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.8 Héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.9 Compilation de classes . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.10 Constructions classiques . . . . . . . . . . . . . . . . . . . . . . . . . 134 5. Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 5.1 Principe des exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . 138 5.2 Définir ses propres exceptions . . . . . . . . . . . . . . . . . . . . . . 145 5.3 Exemples d’utilisation des exceptions . . . . . . . . . . . . . . . . . . 146 6. Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6.1 Modules et fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6.2 Modules internes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 6.3 Modules externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 6.4 Python et les autres langages . . . . . . . . . . . . . . . . . . . . . . 157 6.5 Boost Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 7. Fichiers, expressions régulières, dates . . . . . . . . . . . . . . . . . . . . . 169 7.1 Format texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 7.2 Fichiers zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 7.3 Manipulation de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . 175 7.4 Format binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 7.5 Paramètres en ligne de commande . . . . . . . . . . . . . . . . . . . 182 7.6 Expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . 184 7.7 Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 7.8 Problème de jeux de caractères . . . . . . . . . . . . . . . . . . . . . 191 8. Interface graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 8.2 Les objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 8.3 Disposition des objets dans une fenêtre . . . . . . . . . . . . . . . . . 206 8.4 Evénements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 8.5 D’autres fenêtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 8.6 Constructions classiques . . . . . . . . . . . . . . . . . . . . . . . . . 219 9. Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.1 Premier thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.2 Synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 9.3 Interface graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 9.4 Files de messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 partie II Enoncés pratiques, exercices 237 10.Exercices pratiques pour s’entraîner. . . . . . . . . . . . . . . . . . . . . . 238 10.1 Montant numérique, montant littéral . . . . . . . . . . . . . . . . . . 238 10.2 Représentation des données, partie de dames. . . . . . . . . . . . . . 242 10.3 Reconnaître la langue d’un texte . . . . . . . . . . . . . . . . . . . . 245 10.4 Carrés magiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 10.5 Tri rapide ou quicksort . . . . . . . . . . . . . . . . . . . . . . . . . . 261 11.Exercices pratiques pour s’évaluer . . . . . . . . . . . . . . . . . . . . . . . 270 11.1 Recherche dichotomique . . . . . . . . . . . . . . . . . . . . . . . . . 270 11.2 Ajouter un jour férié . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 11.3 Fréquentation d’un site Internet . . . . . . . . . . . . . . . . . . . . 276 12.Exercices écrits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 12.1 Premier énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 12.2 Second énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 12.3 Troisème énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 12.4 Quatrième énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 12.5 Exercices supplémentaires . . . . . . . . . . . . . . . . . . . . . . . . 319 Index 324 Première partie LE LANGAGE PYTHON Les programmes informatiques sont souvent l’aboutissement d’un raisonnement, d’une construction, d’une idée, parfois imprécise mais dont le principe général est compris. Et pour valider cette idée, on utilise un langage de programmation qui ne tolère jamais l’imprécision, qui refuse de comprendre au moindre signe de ponctua- tion oublié, qui est d’une syntaxe si rigide. On reste parfois indécis devant une erreur qui se produit avec un exemple qu’on a pourtant recopié sans ajout. On compare les deux versions sans faire attention aux petits détails qui ne changent rien pour le concepteur et beaucoup pour le langage. C’est un espace en plus ou en moins, un symbole : oublié... Il est fréquent de ne pas vérifier ces petits détails lorsqu’on commence à programmer. Et ils découragent souvent. On s’habitue peu à peu au fait qu’il ne faut pas confondre parenthèses et crochets, qu’il manque des guillemets, qu’il y a une lettre en plus, ou en moins. Lorsque sa syntaxe n’est pas respectée, le langage de programmation ne cherche jamais à comprendre l’intention du programmeur. Il faut penser à la vérifier en premier lorsqu’une erreur se produit. Les messages d’erreur, obscurs au premier abord, donnent néanmoins un bon indice pour corriger un programme. Et si cela ne suffisait pas, il ne faut pas hésiter à recopier ce message dans un moteur de recherche sur Internet pour y trouver une indication dès les premiers résultats, et le plus souvent en français. Cette première partie est consacrée à la description du langage Python. Il est parfois utile de reproduire un des exemples, de le faire fonctionner, de le modifier, d’y introduiredeserreurspuisdelescorriger.Plustard,dansdepluslongsprogrammes, les mêmes erreurs seront plus difficiles à déceler et l’expérience montre qu’on fait presque toujours les mêmes erreurs. Chapitre 1 Introduction Ce chapitre s’intéresse tout d’abord à l’installation du langage Python et à la réa- lisation d’un premier programme avec des instructions dont le sens est intuitif. Les derniers paragraphes présentent de nombreuses extensions disponibles sur Internet. Elles rendent le langage Python très attractif dans des domaines variés. Ces exten- sions témoignent que ce langage emporte l’adhésion de nombreux informaticiens qui en retour assurent sa pérennité. Il permet de relier facilement différents éléments, différentes applications. C’est une des raisons de son succès. 1.1 Ordinateur et langages Il est rare aujourd’hui de ne pas avoir déjà entendu ou lu les termes informatiques définis ci-dessous. C’est un rapide rappel. 1.1.1 L’ordinateur On peut considérer simplement qu’un ordinateur est composé de trois ensembles : le microprocesseur, la mémoire, les périphériques. Cette description n’a pas varié en cinquante ans depuis qu’un scientifique du nom de von Neumann l’a imaginée. Le microprocesseur est le cœur de l’ordinateur, il suit les instructions qu’on lui donne et ne peut travailler qu’avec un très petit nombre d’informations. Sa vitesse se mesure en GigaHertz (GHz) qui correspondent au nombre d’opérations qu’il est capable d’effectuer en une seconde et en nombre de cœurs qui détermine le nombre d’opérations en parallèle qu’il est capable d’exécuter. On lui adjoint une mémoire aveclaquelleiléchangesansarrêtdesdonnées.Sacapacitésemesureenoctets(kilo- octets, mégaoctets, gigaoctets ou leurs abréviations Ko, Mo, Go1). Ces échanges entre processeur et mémoire sont rapides. Les périphériques regroupent tout le reste (écran, clavier, souris, disque dur, im- primante...). Ils sont principalement de deux types : les périphériques de stockages (disque dur, DVD) et ceux qui nous permettent de dialoguer avec l’ordinateur, que ce soit pour afficher, sonoriser (écran, enceintes) ou pour recevoir (souris, clavier, webcam, micro...). 1. Un kilo-octets équivaut à 1024=210 octets, un Mo à 1024 Ko et un Go à 1024 Mo.
Description: