# Programmation Python/Version imprimable1

* Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
* Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
* Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.
Une version à jour et éditable de ce livre est disponible sur Wikilivres, une bibliothèque de livres pédagogiques, à l'URL : https://fr.wikibooks.org/wiki/Programmation_Python

# Avant-propos
## Choix d'un premier langage de programmation

Le but de ce livre est de vous permettre d'apprendre à programmer à partir du langage Python. Pourquoi Python ? Il existe en effet plusieurs centaines de langages de programmation, chacun avec ses avantages et ses inconvénients. Parmi ces derniers, on compte :
* Ils sont liés à des environnements de programmation (c'est-à-dire des logiciels) propriétaires.
Cela signifie donc, non seulement que l'institution scolaire désireuse de les utiliser devrait acheter une licence de ces logiciels pour chaque poste de travail (ce qui risque de se révéler assez coûteux), mais surtout que les utilisateurs souhaitant exercer leurs compétences de programmation ailleurs qu'à l'école seraient implicitement forcés d'en acquérir eux aussi des licences.
* Ce sont des langages spécifiquement liés au seul système d'exploitation Windows. Ils ne sont pas « portables » sur d'autres systèmes (Unix, MacOS, etc.). Cela ne cadre pas avec un projet pédagogique qui ambitionne d'inculquer une formation générale (et donc diversifiée) dans laquelle les invariants de l'informatique seraient autant que possible mis en évidence.
Nous avons alors décidé d'examiner l'offre alternative, c'est-à-dire celle qui est proposée gratuitement dans la mouvance de l'informatique libre (open source). Copiable et modifiable librement au gré de son acquéreur, il est généralement le produit de la collaboration bénévole de centaines de développeurs enthousiastes dispersés dans le monde entier. Son code source étant "épluché" par de très nombreux spécialistes (étudiants et professeurs universitaires), un logiciel libre se caractérise la plupart du temps par un bon niveau de qualité technique. Le plus célèbre des logiciels libres est le système d'exploitation GNU/Linux, dont la popularité ne cesse de s'accroître de jour en jour.
Ce que nous avons trouvé nous a enthousiasmé : non seulement il existe dans le monde de l'open source des interpréteurs et des compilateurs gratuits pour toute une série de langages, mais le véritable cadeau réside dans le fait que ces langages sont modernes, performants, portables (c'est-à-dire utilisables sur différents systèmes d'exploitation tels que Windows, Linux, ou MacOS), et fort bien documentés.
Le langage dominant y est sans conteste C. Ce langage s'impose comme une référence absolue, et tout informaticien sérieux doit s'y frotter tôt ou tard. Il est malheureusement très rébarbatif et compliqué, trop proche de la machine. Sa syntaxe est peu lisible et fort contraignante. La mise au point d'un gros logiciel écrit en langage C est longue et pénible. (Les mêmes remarques valent aussi dans une large mesure pour le langage Java).
Pour nos débuts dans l'étude de la programmation, il nous semble préférable d'utiliser un langage de plus haut niveau, c'est-à-dire plus proche du langage humain que du langage machine, donc plus lisible et moins contraignant.
Après avoir successivement examiné et expérimenté quelque peu les langages Perl et Tcl/Tk , nous avons finalement décidé d'adopter Python, langage très moderne à la popularité grandissante.

## La démarche du programmeur

Le but de ce cours est de vous apprendre à penser et à réfléchir comme un analyste-programmeur. Ce mode de pensée combine des démarches intellectuelles complexes, similaires à celles qu'accomplissent les mathématiciens, les ingénieurs et les scientifiques.
Comme le mathématicien, l'analyste-programmeur utilise des langages formels pour décrire des raisonnements (ou algorithmes). Comme l'ingénieur, il conçoit des dispositifs, il assemble des composants pour réaliser des mécanismes et il évalue leurs performances. Comme le scientifique, il observe le comportement de systèmes complexes, il ébauche des hypothèses explicatives, il teste des prédictions.
Il s'agit là d'une compétence de haut niveau, qui implique des capacités et des connaissances diverses : être capable de (re)formuler un problème de plusieurs manières différentes, être capable d'imaginer des solutions innovantes et efficaces, être capable d'exprimer ces solutions de manière claire et complète.
La programmation d'un ordinateur consiste en effet à « expliquer » en détail à une machine ce qu'elle doit faire, en sachant d'emblée qu'elle ne peut pas véritablement « comprendre » un langage humain, mais seulement effectuer un traitement automatique sur des séquences de caractères.
Un programme n'est rien d'autre qu'une suite d'instructions, encodées en respectant de manière très stricte un ensemble de conventions fixées à l'avance que l'on appelle un langage informatique. La machine est ainsi pourvue d'un mécanisme qui décode ces instructions en associant à chaque « mot » du langage une action précise.
Vous allez donc apprendre à programmer, activité déjà intéressante en elle-même parce qu'elle contribue à développer votre intelligence. Mais vous serez aussi amené à utiliser la programmation pour réaliser des projets concrets, ce qui vous procurera certainement de très grandes satisfactions.

## Langage machine, langage de programmation

À strictement parler, un ordinateur n'est rien d'autre qu'une machine effectuant des opérations simples sur des séquences de signaux électriques, lesquels sont conditionnés de manière à ne pouvoir prendre que deux états seulement (par exemple un potentiel électrique maximum ou minimum). Ces séquences de signaux obéissent à une logique du type « tout ou rien » et peuvent donc être considérés conventionnellement comme des suites de nombres ne prenant jamais que les deux valeurs 0 et 1. Un système numérique ainsi limité à deux chiffres est appelé système binaire.
Sachez dès à présent que dans son fonctionnement interne, un ordinateur est totalement incapable de traiter autre chose que des nombres binaires. Toute information d'un autre type doit être convertie, ou codée, en format binaire. Cela est vrai non seulement pour les données que l'on souhaite traiter (les textes, les images, les sons, les nombres, etc.), mais aussi pour les programmes, c'est-à-dire les séquences d'instructions que l'on va fournir à la machine pour lui dire ce qu'elle doit faire avec ces données.
Le seul « langage » que l'ordinateur puisse véritablement « comprendre » est donc très éloigné de ce que nous utilisons nous-mêmes. C'est une longue suite de 1 et de 0 (les "bits") souvent traités par groupes de 8 (les « octets »), 16, 32, ou même 64. Ce « langage machine » est évidemment presque incompréhensible pour nous. Pour « parler » à un ordinateur, il nous faudra utiliser des systèmes de traduction automatiques, capables de convertir en nombres binaires des suites de caractères formant des mots-clés (anglais en général) qui seront plus significatifs pour nous.
Ces systèmes de traduction automatique seront établis sur la base de toute une série de conventions, dont il existera évidemment de nombreuses variantes.
Le système de traduction proprement dit s'appellera interpréteur ou bien compilateur, suivant la méthode utilisée pour effectuer la traduction (voir ci-après). On appellera langage de programmation un ensemble de mots-clés (choisis arbitrairement) associé à un ensemble de règles très précises indiquant comment on peut assembler ces mots pour former des « phrases » que l'interpréteur ou le compilateur puisse traduire en langage machine (binaire).
Suivant son niveau d'abstraction, on pourra dire d'un langage qu'il est « de bas niveau » (ex : Assembleur) ou « de haut niveau » (ex : Pascal, Perl, Smalltalk, Clarion, Java…). Un langage de bas niveau est constitué d'instructions très élémentaires, très « proches de la machine ». Un langage de haut niveau comporte des instructions plus abstraites ou, plus « puissantes ». Cela signifie que chacune de ces instructions pourra être traduite par l'interpréteur ou le compilateur en un grand nombre d'instructions machine élémentaires.
Le langage que vous allez apprendre en premier est Python. Il s'agit d'un langage de haut niveau, dont la traduction en codes binaires est complexe et prend donc toujours un certain temps. Cela pourrait paraître un inconvénient. En fait, les avantages que présentent les langages de haut niveau sont énormes : il est beaucoup plus facile d'écrire un programme dans un langage de haut niveau ; l'écriture du programme prend donc beaucoup moins de temps ; la probabilité d'y faire des fautes est nettement plus faible ; la maintenance (c'est-à-dire l'apport de modifications ultérieures) et la recherche des erreurs (les « bugs ») sont grandement facilitées. De plus, un programme écrit dans un langage de haut niveau sera souvent portable, c'est-à-dire que l'on pourra le faire fonctionner sans grosses modifications sur des machines ou des systèmes d'exploitation différents. Un programme écrit dans un langage de bas niveau ne peut jamais fonctionner que sur un seul type de machine : pour qu'une autre l'accepte, il faut le réécrire entièrement.

## Compilation et interprétation

Le programme tel que nous l'écrivons à l'aide d'un logiciel éditeur (une sorte de traitement de texte spécialisé) sera appelé désormais programme source (ou code source). Comme déjà signalé plus haut, il existe deux techniques principales pour effectuer la traduction d'un tel programme source en code binaire exécutable par la machine : l'interprétation et la compilation.
* Dans la technique appelée interprétation, le logiciel interpréteur doit être utilisé chaque fois que l'on veut faire fonctionner le programme. Dans cette technique en effet, chaque ligne du programme source analysé est traduite au fur et à mesure en quelques instructions du langage machine, qui sont ensuite directement exécutées. Aucun programme objet n'est généré.
* La compilation consiste à traduire la totalité du texte source en une fois. Le logiciel compilateur lit toutes les lignes du programme source et produit une nouvelle suite de codes que l'on appelle programme objet (ou code objet). Celui-ci peut désormais être exécuté indépendamment du compilateur et être conservé tel quel dans un fichier (« fichier exécutable »).
Chacune de ces deux techniques a ses avantages et ses inconvénients :
L'interprétation est idéale lorsque l'on est en phase d'apprentissage du langage, ou en cours d'expérimentation sur un projet. Avec cette technique, on peut en effet tester immédiatement toute modification apportée au programme source, sans passer par une phase de compilation qui demande toujours du temps.
Par contre, lorsqu'un projet comporte des fonctionnalités complexes qui doivent s'exécuter rapidement, la compilation est préférable : il est clair en effet qu'un programme compilé fonctionnera toujours nettement plus vite que son homologue interprété, puisque dans cette technique l'ordinateur n'a plus à (re)traduire chaque instruction en code binaire avant qu'elle puisse être exécutée.
Certains langages modernes tentent de combiner les deux techniques afin de retirer le meilleur de chacune. C'est le cas de Python et aussi de Java. Lorsque vous lui fournissez un programme source, Python commence par le compiler pour produire un code intermédiaire, similaire à un langage machine, que l'on appelle bytecode, lequel sera ensuite transmis à un interpréteur pour l'exécution finale. Du point de vue de l'ordinateur, le bytecode est très facile à interpréter en langage machine. Cette interprétation sera donc beaucoup plus rapide que celle d'un code source.
Les avantages de cette méthode sont appréciables :
* Le fait de disposer en permanence d'un interpréteur permet de tester immédiatement n'importe quel petit morceau de programme. On pourra donc vérifier le bon fonctionnement de chaque composant d'une application au fur et à mesure de sa construction.
* L'interprétation du bytecode compilé n'est pas aussi rapide que celle d'un véritable code binaire, mais elle est très satisfaisante pour de très nombreux programmes, y compris graphiques.
* Le bytecode est portable. Pour qu'un programme Python ou Java puisse s'exécuter sur différentes machines, il suffit de disposer pour chacune d'elles d'un interpréteur adapté.
Tout ceci peut vous paraître un peu compliqué, mais la bonne nouvelle est que tout ceci est pris en charge automatiquement par l'environnement de développement de Python. Il vous suffira d'entrer vos commandes au clavier, de frapper <Enter>, et Python se chargera de les compiler et de les interpréter pour vous.

## Mise au point d'un programme - Recherche des erreurs (« debug »)

La programmation est une démarche très complexe, et comme c'est le cas dans toute activité humaine, on y commet de nombreuses erreurs. Pour des raisons anecdotiques, les erreurs de programmation s'appellent des « bugs » (ou « bogues », en France), et l'ensemble des techniques que l'on met en œuvre pour les détecter et les corriger s'appelle debug (ou déboguage).
En fait, il peut exister dans un programme trois types d'erreurs assez différentes, et il convient que vous appreniez à bien les distinguer :

### Erreurs de syntaxe

Python ne peut exécuter un programme que si sa syntaxe est parfaitement correcte. Dans le cas contraire, le processus s'arrête et vous obtenez un message d'erreur. Le terme syntaxe se réfère aux règles que les auteurs du langage ont établies pour la structure du programme.
Tout langage comporte sa syntaxe. Dans la langue française, par exemple, une phrase doit toujours commencer par une majuscule et se terminer par un point. ainsi cette phrase comporte deux erreurs de syntaxe
Dans les textes ordinaires, la présence de quelques petites fautes de syntaxe par-ci par-là n'a généralement pas d'importance. Il peut même arriver (en poésie, par exemple), que des fautes de syntaxe soient commises volontairement. Cela n'empêche pas que l'on puisse comprendre le texte.
Dans un programme d'ordinateur, par contre, la moindre erreur de syntaxe produit invariablement un arrêt de fonctionnement (un « plantage ») ainsi que l'affichage d'un message d'erreur. Au cours des premières semaines de votre carrière de programmeur, vous passerez certainement pas mal de temps à rechercher vos erreurs de syntaxe. Avec de l'expérience, vous en commettrez beaucoup moins.
Gardez à l'esprit que les mots et les symboles utilisés n'ont aucune signification en eux-mêmes : ce ne sont que des suites de codes destinés à être convertis automatiquement en nombres binaires. Par conséquent, il vous faudra être très attentifs à respecter scrupuleusement la syntaxe du langage.
Il est heureux que vous fassiez vos débuts en programmation avec un langage interprété tel que Python. La recherche des erreurs y est facile et rapide. Avec les langages compilés (tel C++), il vous faudrait recompiler l'intégralité du programme après chaque modification, aussi minime soit-elle.

### Erreurs sémantiques

Le second type d'erreur est l'erreur sémantique ou erreur de logique. S'il existe une erreur de ce type dans un de vos programmes, celui-ci s'exécute parfaitement, en ce sens que vous n'obtenez aucun message d'erreur, mais le résultat n'est pas celui que vous attendiez : vous obtenez autre chose.
En réalité, le programme fait exactement ce que vous lui avez dit de faire. Le problème est que ce que vous lui avez dit de faire ne correspond pas à ce que vous vouliez qu'il fasse. La séquence d'instructions de votre programme ne correspond pas à l'objectif poursuivi. La sémantique (la logique) est incorrecte.
Rechercher des fautes de logique peut être une tâche ardue. Il faut analyser ce qui sort de la machine et tâcher de se représenter une par une les opérations qu'elle a effectuées, à la suite de chaque instruction.

### Erreurs à l'exécution

Le troisième type d'erreur est l'erreur en cours d'exécution (Run-time error), qui apparaît seulement lorsque votre programme fonctionne déjà, mais que des circonstances particulières se présentent (par exemple, votre programme essaie de lire un fichier qui n'existe plus). Ces erreurs sont également appelées des exceptions, parce qu'elles indiquent généralement que quelque chose d'exceptionnel s'est produit (et qui n'avait pas été prévu). Vous rencontrerez davantage ce type d'erreur lorsque vous programmerez des projets de plus en plus volumineux.

## Recherche des erreurs et expérimentation

L'une des compétences les plus importantes à acquérir au cours de votre apprentissage est celle qui consiste à déboguer efficacement un programme. Il s'agit d'une activité intellectuelle parfois énervante mais toujours très riche, dans laquelle il faut faire preuve de beaucoup de perspicacité, persévérance et de patience.
Ce travail ressemble par bien des aspects à une enquête policière. Vous examinez un ensemble de faits, et vous devez émettre des hypothèses explicatives pour reconstituer les processus et les événements qui ont logiquement entraîné les résultats que vous constatez.
Cette activité s'apparente aussi au travail expérimental en sciences. Vous vous faites une première idée de ce qui ne va pas, vous modifiez votre programme et vous essayez à nouveau. Vous avez émis une hypothèse, qui vous permet de prédire ce que devra donner la modification. Si la prédiction se vérifie, alors vous avez progressé d'un pas sur la voie d'un programme qui fonctionne. Si la prédiction se révèle fausse, alors il vous faut émettre une nouvelle hypothèse. Comme l'a bien dit Sherlock Holmes : « Lorsque vous avez éliminé l'impossible, ce qui reste, même si c'est improbable, doit être la vérité » (A. Conan Doyle, Le signe des quatre).
Pour certaines personnes, « programmer » et « déboguer » signifient exactement la même chose. Ce qu'elles veulent dire par là est que l'activité de programmation consiste en fait à modifier, à corriger sans cesse un même programme, jusqu'à ce qu'il se comporte finalement comme vous le vouliez. L'idée est que la construction d'un programme commence toujours par une ébauche qui fait déjà quelque chose (et qui est donc déjà déboguée), à laquelle on ajoute couche par couche de petites modifications, en corrigeant au fur et à mesure les erreurs, afin d'avoir de toute façon à chaque étape du processus un programme qui fonctionne.
Par exemple, vous savez que Linux est un système d'exploitation (et donc un gros logiciel) qui comporte des milliers de lignes de code. Au départ, cependant, cela a commencé par un petit programme simple que Linus Torvalds avait développé pour tester les particularités du processeur Intel 80386. Suivant Larry GreenField (The Linux user's guide, beta version 1) : « L'un des premiers projets de Linus était un programme destiné à convertir une chaîne de caractères AAAA en BBBB. C'est cela qui plus tard finit par devenir Linux ! ».
Ce qui précède ne signifie pas que nous voulions vous pousser à programmer par approximations successives, à partir d'une vague idée. Lorsque vous démarrerez un projet de programmation d'une certaine importance, il faudra au contraire vous efforcer d'établir le mieux possible un cahier des charges détaillé, lequel s'appuiera sur un plan solidement construit pour l'application envisagée.
Diverses méthodes existent pour effectuer cette tâche d'analyse, mais leur étude sort du cadre de ce livre.

## Langages naturels et langages formels

Les langages naturels sont ceux que les êtres humains utilisent pour communiquer. Ces langages n'ont pas été mis au point délibérément (encore que certaines instances tâchent d'y mettre un peu d'ordre) : ils évoluent naturellement.
Les langages formels sont des langages développés en vue d'applications spécifiques. Ainsi par exemple, le système de notation utilisé par les mathématiciens est un langage formel particulièrement efficace pour représenter les relations entre nombres et grandeurs diverses. Les chimistes utilisent un langage formel pour représenter la structure des molécules, etc.
Comme on l'a déjà signalé plus haut, les langages formels sont dotés d'une syntaxe qui obéit à des règles très strictes. Par exemple, 3+3=6 est une représentation mathématique correcte, alors que $3=+6 ne l'est pas. De même, la formule chimique H$_2$O est correcte, mais non Zq3G2.
Les règles de syntaxe s'appliquent non seulement aux symboles du langage (par exemple, le symbole chimique Zq est illégal parce qu'il ne correspond à aucun élément), mais aussi à la manière de les combiner. Ainsi l'équation mathématique 6+=+/5- ne contient que des symboles parfaitement autorisés, mais leur arrangement incorrect ne signifie rien du tout. Lorsque vous lisez une phrase quelconque, vous devez arriver à vous représenter la structure logique de la phrase (même si vous faites cela inconsciemment la plupart du temps). Par exemple, lorsque vous lisez la phrase « la pièce est tombée », vous comprenez que « la pièce » en est le sujet et « est tombée » le verbe. L'analyse vous permet de comprendre la signification, la logique de la phrase (sa sémantique). D'une manière analogue, l'interpréteur Python devra analyser la structure de votre programme source pour en extraire la signification.
Les langages naturels et formels ont donc beaucoup de caractéristiques communes (des symboles, une syntaxe, une sémantique), mais ils présentent aussi des différences très importantes :
Ambiguïté
    Les langages naturels sont pleins d'ambiguïtés, que nous pouvons lever dans la plupart des cas en nous aidant du contexte. Par exemple, nous attribuons tout naturellement une signification différente au mot vaisseau, suivant que nous le trouvons dans une phrase qui traite de circulation sanguine ou de navigation à voiles. Dans un langage formel, il ne peut pas y avoir d'ambiguïté. Chaque instruction possède une seule signification, indépendante du contexte.
Redondance
    Pour compenser toutes ces ambiguïtés et aussi de nombreuses erreurs ou pertes dans la transmission de l'information, les langages naturels emploient beaucoup la redondance (dans nos phrases, nous répétons plusieurs fois la même chose sous des formes différentes, pour être sûrs de bien nous faire comprendre). Les langages formels sont beaucoup plus concis.
Littéralité
    Les langages naturels sont truffés d'images et de métaphores. Si je dis « la pièce est tombée ! » dans un certain contexte, il se peut qu'il ne s'agisse en fait ni d'une véritable pièce, ni de la chute de quoi que ce soit. Dans un langage formel, par contre, les expressions doivent être prises pour ce qu'elles sont, « au pied de la lettre ».
Habitués comme nous le sommes à utiliser des langages naturels, nous avons souvent bien du mal à nous adapter aux règles rigoureuses des langages formels. C'est l'une des difficultés que vous devrez surmonter pour arriver à penser comme un analyste-programmeur efficace.
Pour bien nous faire comprendre, comparons encore différents types de textes :
Un texte poétique
    Les mots y sont utilisés autant pour leur musicalité que pour leur signification, et l'effet recherché est surtout émotionnel. Les métaphores et les ambiguïtés y règnent en maîtresses.
Un texte en prose
    La signification littérale des mots y est plus importante et les phrases sont structurées de manière à lever les ambiguïtés, mais sans y parvenir toujours complètement. Les redondances sont souvent nécessaires.
Un programme d'ordinateur
    La signification du texte est unique et littérale. Elle peut être comprise entièrement par la seule analyse des symboles et de la structure. On peut donc automatiser cette analyse.
Pour conclure, voici quelques suggestions concernant la manière de lire un programme d'ordinateur (ou tout autre texte écrit en langage formel).
Premièrement, gardez à l'esprit que les langages formels sont beaucoup plus denses que les langages naturels, ce qui signifie qu'il faut davantage de temps pour les lire. De plus, la structure y est très importante. Aussi, ce n'est généralement pas une bonne idée que d'essayer de lire un programme d'une traite, du début à la fin. Au lieu de cela, entraînez-vous à analyser le programme dans votre tête, en identifiant les symboles et en interprétant la structure.
Finalement, souvenez-vous que tous les détails ont de l'importance. Il faudra en particulier faire très attention à la casse (c'est-à-dire l'emploi des majuscules et des minuscules) et à la ponctuation. Toute erreur à ce niveau (même minime en apparence, tel l'oubli d'une virgule, par exemple) peut modifier considérablement la signification du code et donc le déroulement du programme.

## Notes

* ↑ bug est à l'origine un terme anglais servant à désigner de petits insectes gênants, tels les punaises. Les premiers ordinateurs fonctionnaient à l'aide de "lampes" radios qui nécessitaient des tensions électriques assez élevées. Il est arrivé à plusieurs reprises que des petits insectes s'introduisent dans ces circuits complexes et se fassent électrocuter, leurs cadavres calcinés provoquant alors des court-circuits et donc des pannes incompréhensibles. Le mot français bogue a été choisi par homonymie approximative. Il désigne la coque épineuse de la châtaigne.

# Introduction
## Définition du langage

Python est un langage de script de haut niveau, structuré et open source. Il est multi-paradigme et multi-usage.
Développé à l'origine par Guido van Rossum en 1989, il est, comme la plupart des applications et outils open source, maintenu par une équipe de développeurs un peu partout dans le monde.
Conçu pour être orienté objet, il n'en dispose pas moins d'outils permettant de se livrer à la programmation fonctionnelle ou impérative ; c'est d'ailleurs une des raisons qui lui vaut son appellation de « langage agile ».
Parmi les autres raisons, citons la rapidité de développement (qualité propre aux langages interprétés), la grande quantité de modules fournis dans la distribution de base ainsi que le nombre d'interfaces disponibles avec des bibliothèques écrites en C, C++ ou Fortran. Il est également apprécié pour la clarté de sa syntaxe, ce qui l'oppose au langage Perl.

### Caractéristiques du langage

Détaillons un peu les principales caractéristiques de Python, plus précisément, du langage et de ses deux implantations actuelles :
* Python est portable, non seulement sur les différentes variantes d'Unix, mais aussi sur les OS propriétaires : MacOS, BeOS, NeXTStep, MS-DOS et les différentes variantes de Windows. Un nouveau compilateur, baptisé Jython, est écrit en Java et génère du bytecode Java.
* Python est gratuit, mais on peut l'utiliser sans restriction dans des projets commerciaux.
* Python convient aussi bien à des scripts d'une dizaine de lignes qu'à des projets complexes de plusieurs dizaines de milliers de lignes.
* La syntaxe de Python est très simple et, combinée à des types de données évolués (listes, dictionnaires,...), conduit à des programmes à la fois très compacts et très lisibles. À fonctionnalités égales, un programme Python (abondamment commenté et présenté selon les canons standards) est souvent de 3 à 5 fois plus court qu'un programme C ou C++ (ou même Java) équivalent, ce qui représente en général un temps de développement de 5 à 10 fois plus court et une facilité de maintenance largement accrue.
* Python gère ses ressources (mémoire, descripteurs de fichiers...) sans intervention du programmeur, par un mécanisme de comptage de références (proche, mais différent, d'un ramasse-miettes).
* Il n'y a pas de pointeurs explicites en Python.
* Python est (optionnellement) multi-threadé.
* Python est orienté-objet. Il supporte l'héritage multiple et la surcharge des opérateurs. Dans son modèle objets, et en reprenant la terminologie de C++, toutes les méthodes sont virtuelles.
* Python intègre, comme Java ou les versions récentes de C++, un système d'exceptions, qui permettent de simplifier considérablement la gestion des erreurs.
* Python est dynamique (l'interpréteur peut évaluer des chaînes de caractères représentant des expressions ou des instructions Python), orthogonal (un petit nombre de concepts suffit à engendrer des constructions très riches), réflectif (il supporte la métaprogrammation, par exemple la capacité pour un objet de se rajouter ou de s'enlever des attributs ou des méthodes, ou même de changer de classe en cours d'exécution) et introspectif (un grand nombre d'outils de développement, comme le debugger ou le profiler, sont implantés en Python lui-même).
* Comme Scheme ou SmallTalk, Python est dynamiquement typé. Tout objet manipulable par le programmeur possède un type bien défini à l'exécution, qui n'a pas besoin d'être déclaré à l'avance.
* Python possède actuellement deux implémentations. L'une, interprétée, dans laquelle les programmes Python sont compilés en instructions portables, puis exécutés par une machine virtuelle (comme pour Java, avec une différence importante : Java étant statiquement typé, il est beaucoup plus facile d'accélérer l'exécution d'un programme Java que d'un programme Python). L'autre génère directement du bytecode Java.
* Python est extensible : comme Tcl ou Guile, on peut facilement l'interfacer avec des bibliothèques C existantes. On peut aussi s'en servir comme d'un langage d'extension pour des systèmes logiciels complexes.
* La bibliothèque standard de Python, et les paquetages contribués, donnent accès à une grande variété de services : chaînes de caractères et expressions régulières, services UNIX standards (fichiers, pipes, signaux, sockets, threads...), protocoles Internet (Web, News, FTP, CGI, HTML…), persistance et bases de données, interfaces graphiques.
* Python est un langage qui continue à évoluer, soutenu par une communauté d'utilisateurs enthousiastes et responsables, dont la plupart sont des supporters du logiciel libre. Parallèlement à l'interpréteur principal, écrit en C et maintenu par le créateur du langage, un deuxième interpréteur, Jython, écrit en Java, est en cours de développement.
* Enfin, Python est un langage de choix pour traiter le XML.

## Utilisation

Comme mentionné plus haut, Python se prête à un grand nombre de tâches. La distribution de base permet, entre autres, des développements réseau, la création d'interfaces graphiques (via tcl/tk), de la programmation cgi, de traiter du XML, etc. Sa relative facilité d'interfaçage avec des bibliothèques écrites en d'autres langages en fait un outil de choix pour des applications de calcul scientifique. Il est également de plus en plus utilisé comme langage de prototypage.
Python est aussi remarquable pour le nombre de bibliothèques accessibles via l'installation des modules appropriés. Que ce soit la connexion avec une base de données, l'utilisation de bibliothèques d'interface graphique (wxPython, PyQt, pyGTK), la manipulation avancée de XML (pyXML), le traitement d'image (Python Imaging Library), le développement de jeu vidéo (pygame), OpenGL, la grande majorité des technologies actuelles dispose de son extension Python.

### Quelques exemples d'utilisation de Python

* Le serveur d'application Zope
* Administration du moteur de recherche Google
* Administration des fermes de rendu de la société d'effets spéciaux ILM
* l'application de dessin vectoriel Skencil (anciennement Sketch)
* Boa constructor, outil de développement rapide d'applications wxPython
D'autres exemples sont disponibles sur Python success stories (anglais)

## Version 2 et version 3

Il est à noter que les deux principales familles de python sont la famille version 2 et la famille version 3.
La version 2 a été publiée en 2000. Lorsqu'il est nécessaire de modifier des anciens code, ou d'utiliser des anciennes librairies, il peut être utile d'apprendre la version 2. Cependant le support de Python 2 est fini depuis le 1er janvier 2020.
Il vaut mieux donc apprendre Python 3, version publiée en 2006, puis éventuellement apprendre les différences entre les versions 2 et 3.

### Différences entre Python 2 et 3

* En Python 3, l'Unicode est l'encodage par défaut, alors qu'en 2 il faut préfixer les chaînes par "u" pour y placer des caractères accentués. Pour écrire des chaînes compatibles dans les deux langages, on utilisera donc from __future__ import unicode_literals en Python 2.
* En Python 3, on remplace raw_input par input.
* En Python 3, on force l'utilisation des parenthèses à print qui est désormais une fonction au lieu d'un mot clé.
* En Python 3, on force except Exception as e: au lieu de except Exception, e:.

## Références

* ↑ http://python-history.blogspot.fr/2009/01/brief-timeline-of-python.html
* ↑ https://www.python.org/doc/sunset-python-2/

# Installation
## Exécution sans installation

Certains sites tels que http://pythonfiddle.com/ permettent d'exécuter du code Python sur un serveur distant, sans avoir à l'installer chez soi. Toutefois pour développer des applications dignes de ce nom, il convient de l'avoir à disposition sur sa machine.

## Installation locale

Il est possible d'installer Python sur la plupart des systèmes d'exploitation en le téléchargeant sur http://www.python.org/download.
Si vous n'avez pas les droits d'administrateurs de votre machine, il existe aussi une version portable sur http://www.portablepython.com.

### Windows

Pour les systèmes Windows, vous pouvez télécharger le fichier MSI.

### Linux

Python est le plus souvent automatiquement installé avec la plupart des distribution Linux, mais il est recommandé (nécessaire) de télécharger une version actualisée.
Vous êtes probablement chanceux et l'interpréteur Python est déjà installé sur votre machine. pour le tester, tapez python3 dans un terminal. Si vous voyez quelque chose comme dans la prochaine section, vous êtes bon.
Si vous devez installer Python, essayez d'abord d'utiliser le gestionnaire de paquet de votre système d'exploitation ou allez visiter le dépôt où ces paquets sont disponibles, et récupérez Python 3. Python 3.0 est sorti en décembre 2008 ; toutes les distributions (BSD, GNU/Linux-Hurd-Linux Libre)devraient avoir Python 3 disponible, donc vous ne devriez pas avoir besoin de compiler Python 3 "from scratch" après avoir téléchargé le code source. Debian et Fedora possèdent des paquets binaires Python3 disponibles, mais ne le sont pas encore pas défaut, il faudra donc les installer par vous-même.
Voici donc les étapes pour compiler Python sur une unixerie (GNU/Linux, BSD...) :
* Téléchargez le fichier d'archive contenant les sources avec wget|curl -O|fetch http://www.python.org/ftp/python/3.3.3/Python-3.3.3.tar.xz (utilisez la commande de votre choix dans votre terminal)
* Décompressez le fichier tar (mettez-le au préalable dans le dossier voulu) :
* Déplacez-vous dans le dossier nouvellement créé et dites à votre système de compiler et installer le programme
Les commandes ci-dessus installeront Python 3 dans votre dossier /usr/local. Si vous voulez utiliser IDLE, vous devez vous assurer que tk et tcl ainsi que leurs fichiers de développement sont installés sur le système. Vous verrez des avertissements durant la phase de compilation (make) si ces derniers ne sont pas disponibles.
Variable d'environnement :

### Mac

Depuis Mac OS X (Tiger), Python est embarqué par défaut avec l'OS, mais vous devrez mettre à jour vers Python 3 de la manière décrite ci-dessus, jusqu'à ce qu'OS X incluse Python 3 (vérifiez la version en tapant python3 dans un terminal).
Depuis l'apparition de la version 2.3, il est vivement recommandé aux francophones que nous sommes d'inclure l'un des pseudo-commentaires suivant au début de tous nos scripts Python (à la 1e ou 2e ligne) :
Ou encore mieux :

## Mode Interactif

Python dispose d'un interpréteur interactif lancé depuis la ligne de commande ou à partir d'un IDE tel que IDLE, qui permet de tester les commandes de base. Pour appeler l'interpréteur interactif, il suffit de saisir python3 en ligne de commande sur macOS et Linux, ou py ou python sous Windows. Pour IDLE, ouvrir l'application "IDLE (Python GUI)" sous Windows.
Voici par exemple ce qui apparaît dans une fenêtre de terminal KDE (sous Linux) :
Sous Windows, la commande py ou python permet de lancer l'interpréteur interactif depuis la ligne de commande.
Les trois caractères « >>> » constituent le signal d'invite, ou prompt principal, lequel vous indique que Python est prêt à exécuter une commande. En mode interactif, ce que vous tapez est immédiatement exécuté. Mais le plus employé par les programmeurs est d'exécuter un script Python contenant plusieurs instructions, en lançant un fichier .py sauvegardé sur le disque dur.

### Calculer avec Python

Par exemple, vous pouvez tout de suite utiliser l'interpréteur comme une simple calculatrice de bureau. Veuillez donc vous-même tester les commandes ci-dessous :
Comme vous pouvez le constater, les opérateurs arithmétiques pour l'addition, la soustraction, la multiplication et la division sont respectivement +, -, * et /. Les parenthèses sont fonctionnelles.
Par défaut, la division est cependant une division entière, ce qui signifie que si on lui fournit des arguments qui sont des nombres entiers, le résultat de la division est lui-même un entier (tronqué, mais dans les versions de python 3.* la division n'est plus tronquée : 5/2 donne bien 2.5), comme dans le dernier exemple ci-dessus. Si vous voulez qu'un argument soit compris par Python comme étant un nombre réel, il faut le lui faire savoir, en fournissant au moins un point décimal.
Essayez par exemple :
Si une opération est effectuée avec des arguments de types mélangés (entiers et réels), Python convertit automatiquement les opérandes en réels avant d'effectuer l'opération. Essayez :

### Aide

Lorsque vous souhaitez obtenir de l'aide sur une fonction ou une librairie, il suffit d'utiliser la commande « help » dans l'interpréteur interactif. Pour savoir comment fonctionnent les expressions régulières sous python par exemple, exécutez

## pip

pip est le gestionnaire de paquets fourni avec Python. Pour l'utiliser :
Exemple avec le package fabric :
Ou par version :
Pour désinstaller :
Mettre à jour :

### requirements.txt

Ce fichier liste les dépendances à installer pour l'application. C'est l'équivalent du composer.json en PHP ou du package.json en JavaScript.
Génération du fichier :
Installation des dépendances :

## Références

* ↑ Sous Windows, vous aurez surtout le choix entre l'environnement IDLE développé par Guido Van Rossum, auquel nous donnons nous-même la préférence, et PythonWin, une interface de développement développée par Mark Hammond. D'autres environnements de travail plus sophistiqués existent aussi, tels l'excellent Boa Constructor par exemple (qui fonctionne de façon très similaire à Delphi), mais nous estimons qu'ils ne conviennent guère aux débutants. Pour tout renseignement complémentaire, veuillez consulter le site Web de Python. Sous Linux, nous préférons personnellement travailler dans l'environnement graphique WindowMaker (plutôt que KDE ou Gnome trop gourmands en ressources), en ouvrant une simple fenêtre de terminal pour lancer l'interpréteur Python ou l'exécution des scripts, et en faisant appel à un logiciel tel que Nedit ou SciTE pour l'édition de ces derniers.
* ↑ Dans les langages de programmation, les notations numériques de base sont souvent celles des pays anglophones : le séparateur décimal est le point, et non une virgule comme en français. Dans le monde de l'informatique, les nombres réels sont souvent désignés comme des nombres "à virgule flottante", ou encore des nombres « de type float ».

# Éditeurs
## Utilité des éditeurs

Si le mode interactif a permis d'apprendre très rapidement les bases du langage, par expérimentation directe, cette façon de faire présente toutefois un gros inconvénient : toutes les séquences d'instructions écrites disparaissent irrémédiablement après fermeture de l'interpréteur. Il convient donc de sauvegarder les programmes dans des fichiers, sur une mémoire morte, de manière à pouvoir les retravailler par étapes successives, les transférer sur d'autres machines, etc.
Pour ce faire, il est déconseillé d'utiliser de simples éditeurs de texte tels que Edit, Notepad ou WordPad, car ils ne sont pas ANSI "intelligent", ni munis de la fonction de coloration syntaxique du code source pour Python, qui aide à relire rapidement et à éviter les fautes de syntaxe. De plus, les éditeurs munis de la complétion automatique aident à taper le code source plus rapidement et en évitant les fautes de frappe.
Par conséquent, il vaut mieux en utiliser des spécialisés en programmation, appelés environnement de développement (EDI). Par exemple :
* PyCharm
* Visual Studio Code
* SciTE
* DrPython
* Eclipse
* NetBeans
* NEdit
* PythonWin
* Python scripter : auto-complétion, navigation entre classe avec 'CTRL', génération et exécution des tests unitaires, debugger...

## PyCharm

PyCharm est est un environnement de développement intégré utilisé pour programmer en Python.

### Installation

Développé par l'entreprise JetBrains, PyCharm est un logiciel multi-plateforme qui fonctionne sous Windows, Mac OS X et Linux.
Il est décliné en édition professionnelle, diffusé sous licence propriétaire, et en édition communautaire diffusée sous licence Apache (donc 100 % gratuite), téléchargeable depuis le site officiel.

### Configuration

Après installation il faut choisir l'interpréteur Python, dont la version déterminera les conseils fournis par l'IDE. Ils peuvent provenir de quatre environnements :
* Virtualenv
* Conda
* System Interpreter
* Pipenv
Si le programme doit ensuite tourner sur la machine hôte (sans IDE), le mieux est de prendre "System Interpreter".

### Utilisation

PyCharm permet l'analyse de code et contient un débogueur graphique.
Il permet également la gestion des tests unitaires, l'intégration de logiciel de gestion de versions, et supporte le développement web avec Django.

### Références

* ↑ https://netbeans.org/downloads/index.html
* ↑ https://wiki.python.org/moin/PythonWin
* ↑ http://www.mmm-experts.com/Downloads.aspx
* ↑ https://www.jetbrains.com/fr-fr/pycharm/download/

## Visual Studio Code

Visual Studio Code (ou simplement nommé "code") est un logiciel éditeur de texte graphique, gratuit fonctionnant sous Windows. Il est capable de prendre en charge le débogage, d'effectuer la coloration syntaxique, l'auto-complétion et surtout le pliage de code (code folding), c'est à dire le masquage à volonté de différents blocs d'instructions (contenu d'une classe, d'une fonction, d'une boucle, etc.) : cette fonctionnalité se révèle extrêmement pratique lorsque vos scripts commencent à s'allonger... Il intègre également la gestion de version (notamment Git et SVN), une fenêtre de terminal ainsi qu'un raccourci pour lancement des scripts.
Cet éditeur est disponible pour Windows sur https://code.visualstudio.com .

### Langages supportés

Visual Studio Code prend immédiatement en charge presque tous les principaux langages informatiques.
Plusieurs d'entre eux sont inclus par défaut, comme HTML et CSS, et aussi JavaScript, TypeScript, Java, PHP, mais d'autres extensions de langage peuvent être trouvées et téléchargées gratuitement à partir de VS Code Marketplace.

### Utilisation
#### Édition de lignes

L'éditeur de code possède des raccourcis clavier pratiques rendant l'édition des lignes de code plus rapide :
| Touches | Touches | Effet |
| Ctrl | ↵ Enter | Ajouter une nouvelle ligne après la ligne courante. |
| Ctrl | ↑/↓ | Faire défiler la vue vers le haut/le bas. |
| Alt | ↑/↓ | Déplacer la ligne courante ou les lignes sélectionnées vers le haut/le bas dans le texte. |
| AltShift | ↑/↓ | Dupliquer la ligne courante ou les lignes sélectionnées vers le haut/le bas. |
| Ctrl | : | Commenter/Décommenter la ligne courante. |

### Références

* ↑ https://code.visualstudio.com/docs/editor/versioncontrol
* ↑ https://marketplace.visualstudio.com/vscode

## SciTE

SciTE (acronyme de Scintilla Text Editor) est un logiciel éditeur de texte graphique, gratuit et open source fonctionnant sous les environnements Linux et Windows. Il est capable d'effectuer la coloration syntaxique, l'auto-complétion et surtout le pliage de code (code folding), c'est à dire le masquage à volonté de différents blocs d'instructions (contenu d'une classe, d'une fonction, d'une boucle, etc.) : cette fonctionnalité se révèle extrêmement pratique lorsque vos scripts commencent à s'allonger... Il intègre également une fenêtre de terminal ainsi qu'un raccourci pour lancement des scripts.
Cet éditeur est disponible pour Windows et pour Linux sur http://www.scintilla.org/SciTE.html.
Scintilla étant une plateforme d'édition de texte qui propose par exemple des outils spécifiques pour corriger du code écrit avec SciTE. Ces deux logiciels sont principalement l'œuvre de leur créateur Neil Hodgson, qui les a placés sous une licence libre peu connue, l'Historical Permission Notice and Disclaimer.

### Langages supportés

Les langages compris par SciTE. Il est actuellement capable d'appliquer une syntaxe de style à ces langages :
Liste
* Ada
* ASN.1 MIB definition files*
* APDL
* Assembler (NASM, MASM)
* AutoIt*
* Avenue*
* Batch files (MS-DOS)
* Baan*
* Bash*
* BlitzBasic*
* Bullant*
* C/C++/C#*
* Clarion*
* conf (Apache)*
* CSound*
* CSS*
* diff files*
* E-Script*
* Eiffel*
* Erlang*
* Flagship (Clipper / XBase)*
* Flash (ActionScript)*
* Fortran*
* Forth*
* Haskell
* HTML*
* HTML with embedded JavaScript, VBScript, PHP and ASP*
* Gui4Cli*
* IDL - both MSIDL and XPIDL*
* INI, properties* and similar
* InnoSetup*
* Java*
* JavaScript*
* LISP*
* LOT*
* Lout*
* Lua*
* Make
* Matlab*
* Metapost
* MMIXAL
* MSSQL
* nnCron
* NSIS*
* Objective Caml*
* Opal
* Octave*
* Pascal/Delphi*
* Perl, most of it except for some ambiguous cases*
* PostScript*
* POV-Ray*
* PowerBasic*
* PureBasic*
* Python*
* Rebol*
* Ruby*
* Scheme*
* scriptol*
* Specman E*
* Spice
* Smalltalk
* SQL and PLSQL
* TADS3*
* TeX and LaTeX
* Tcl/Tk*
* VB and VBScript*
* Verilog*
* VHDL*
* XML*
* YAML*
Les langages marqués par un astérisque doivent être vérifiés pour fonctionner pour un nombre important de personnes.

### Installation sous Linux

L'éditeur Scintilla fait dorénavant partie des paquetages fournis d'office avec les distributions récentes de Linux. Sinon, téléchargez-le au départ du site web mentionné ci-dessus. Sinon :
* téléchargez l'archive gscite***.tgz puis l'extraire avec tar ;
* installez l'exécutable SciTE dans /usr/local/bin ;
* installez tout le reste (fichiers *.properties) dans /usr/share/scite (et non /usr/share/gscite !).

### Installation sous Windows

* Téléchargez l'archive wscite***.zip puis l'extraire dans \Program files ;
* installez une icône de lancement pour l'exécutable SciTe.exe.

### Pour les deux versions

On peut personnaliser beaucoup de choses (polices, etc.) en éditant le fichier des propriétés globales (Menu Options → Open global options file).
Par exemple, pour activer de jolis symboles pour replier/déplier, dans la marge de gauche :
* fold.symbols = 2 # pour de belles icônes + et - cerclées
* fold.on.open = 1 # ainsi tout est plié au départ
* margin.width =0 # pour supprimer la marge inutile
Pour forcer le remplacement automatique des tabulations par des groupes de 4 espaces :
* tabsize = 4
* indent.size = 4
* use.tabs = 0

### Traductions

La traduction doit être téléchargée, renommée en "locale.properties" et déplacée dans le même répertoire que les propriétés globales.
Il faut donc passer en root :
et aller dans le répertoire par défaut :

### Utilisation
## DrPython

DrPython est un environnement d'exploration pour le langage Python. (Il y a d'autres logiciels comme celui-ci pour les autres langues, par exemple DrJava et DrScheme.). DrPython est un logiciel Python, donc il faut installer Python d'abord.
Téléchargez les éléments suivants :
- Python lui-même : du site web Python. L'installateur est disponible en cliquant "Windows installer", ou ici pour Python 2.7.
- La version de la bibliothèque wxPython correspondant à la version de Python -- c'est-à-dire wxPython pour Python 2.7. En général, c'est ici : .
- DrPython; télécharger seulement le paquet du site Sourceforge ici.
Maintenant, il faut installer Python et wxPython. Pour ce faire, double-cliquez sur les fichiers que vous avez téléchargés, commençant avec python-2.7.msi. Les installations sont en anglais. Il suffit de cliquer sur «Next» plusieurs fois, mais je vais aussi essayer de traduire les écrans.
Python 2.7 :
| Anglais | Français |
| Select whether to install Python 2.7 for all users of this computer. Install for all users/Install for just me (not available on Windows Vista) | Choisissez d'installer Python 2.7 pour tout utilisateur du ordinateur. Installer pour tout utilisateur/Installer seulement pour moi (pas disponible sur Windows Vista) [Par défaut, «Installer pour tout utilisateur», est probablement le plus facile.] |
| Select destination directory. Please select a directory for the Python 2.7 files. | Choisissez le répertoire de destination. Veuillez sélectionner un dossier pour les fichiers de Python 2.7. [L'option proposée par défaut, est bien.] |
| Customize Python 2.7. Select the way you want features to be installed. | Customizez Python 2.7. Choisissez le mode d'installation que vous préférez. [Par défaut, installer tout d'un seul trait, est convenable.] |
| Please wait while the installer installs Python 2.7. This may take several minutes. | Veuillez patienter pendant que l'installateur installe Python 2.7. Cela peut prendre quelques minutes. |
| Completing the Python 2.7 installer. Special thanks to Mark Hammond, without whose years of freely shared Windows experience, Python for Windows would still be Python for DOS. Click the Finish button to exit the installer. | L'installation de Python 2.7 est terminée. Remerciements particuliers à Mark Hammond, dont les années d'expérience ont permis d'installer Python sous Windows,et non pas seulement sous DOS. Cliquez sur «Finish» pour quitter l'installation. |
Après avoir fait ça, vous allez voir dans le menu Démarrer un groupe qui s'appelle Python 2.7, et vous allez voir «IDLE (Python GUI)», «Module Docs», «Python (command line)» («Invite des commandes Python»), «Python Manuals», et «Uninstall Python» («Déinstaller Python»). Ç'est bien, mais on va continuer avec la bibliothèque wxPython.
wxPython 2.8 :
| Anglais | Français |
| Welcome to the wxPython2.8-unicode-py27 Setup Wizard. This will install wxPython 2.8.11.0 (unicode) for Python 2.7 on your computer. It is recommended that you close all other applications before continuing. Click Next to continue, or Cancel to exit Setup. | Bienvenue à l'installateur de wxPython2.8-unicode-py27. Il va installer wxPython 2.8.11.0 (unicode) pour Python 2.7 sur votre ordinateur. Il est conseillé de fermer toute autre application avant de continuer. Cliquez «Next» pour continuer, ou «Cancel» pour quitter l'installateur. [Cette procédure est commune à la plupart des installateurs.] |
| License agreement. (The full wxWindows library license.) I accept the agreement./I do not accept the agreement. | Accord de la licence [Ce qui suit est le texte complet de la licence de la bibliothèque wxWindows.] J'accepte la licence./Je n'accepte pas la licence. [On peut accepter ; la licence est très douce.] |
| Select destination location. Where should wxPython be installed? | Choisissez destination emplacement. Où wxPython devrait-il être installé ? [L'option par défaut est le meilleur choix.] |
| Select components. Which components should be installed? | Choisissez composants. Quels composants devraient être installés ? [Il y a seulement un composant à installer. L'option par défaut est parfaite.] |
| Installing. Please wait while Setup installs wxPython2.8-unicode-py27 on your computer. | Veuillez patienter pendant l'installation de wxPython2.8-unicode-py27 sur votre ordinateur. |
| Completing the wxPython Setup Wizard. Setup has finished installing wxPython on your computer. Click Finish to install Setup. View README win32.txt./Compile Python .py files to .pyc./Create batch files for tool scripts. | Termine l'installateur wxPython. L'installation de wxPython sur votre ordinateur est terminée. Cliquez «Finish» pour quitter. Afficher README win32.txt./Compiler les fichiers Python .py à .pyc./Créer fichiers pour [....]. [Décocher la première case, parce que c'est un fichier anglais, mais les autres sont utiles.] |
Vous allez voir une fenêtre noire qui va afficher un peu de texte, puis se fermer.
Maintenant, décompressez le dernier fichier que vous avez téléchargé : DrPython_3.11.3.zip. Vous allez trouver un dossier avec beaucoup de fichiers. Cherchez-en un qui s'appelle drpython. (Il y en aura au moins deux.) Double-cliquez le. Après ça vous allez voir une fenêtre qui paraît un peu comme ceci :
Félicitations ! Vous avez réussi à installer DrPython.
N.B. Il doit y avoir une façon d'installer DrPython pour qu'on puisse l'ouvrir plus facilement, par exemple en créant un raccourci, mais je ne l'ai pas encore trouvée.

## Eclipse

Eclipse est un environnement de développement intégré (EDI), générique et extensible (site officiel http://www.eclipse.org). Son système de plugins permet d'ajouter des fonctionnalités diverses.
Initialement prévu pour développer en Java, grâce aux plugins il peut maintenant également gérer des projets développés avec d'autres langages de programmation tels que :
* Le C et le C++ grâce à l'ensemble de plugins CDT (C Development Toolkit) (compilateur non intégré).
* Le Python via PyDev.
* Avant l'arrivée d'Android Studio, le développement pour Android se faisait avec Eclipse grâce à l'ensemble de plugins ADT (Android Development Toolkit).
Certains IDE sont basés sur Eclipse, et permettent par exemple le développement de logiciel embarqués pour des systèmes temps réel.

### Installation de Eclipse

La page de téléchargement d'Eclipse permet de récupérer une version déjà adaptée au langage ciblé sur http://www.eclipse.org/downloads/. Mais pour installer un plugin manuellement, il faut :
* Lancer Eclipse, puis dans le menu déroulant :Help>Software Updates>Find and Install...
* Cocher Search for new features to install, bouton Next. Bouton New Remote Site..., entrer l'adresse de téléchargement :
* Bouton Finish, choisir un miroir proche puis continuer l'installation.

### Utilisation de Eclipse

L'interface de l'IDE Eclipse est basée sur différentes perspectives. Une seule perspective n'est visible à la fois, et se compose de plusieurs vues. Exemples :
* La perspective "Java" se compose par défaut de la vue "Package Explorer", de la vue éditeur de code en Java avec un onglet par fichier ouvert, de la vue "Outline" donnant la hiérarchie des éléments composant la classe du fichier ouvert.
* La perspective "Debug" est ouverte automatiquement au lancement d'une application en mode débogage et se compose par défaut de la vue "Debug" affichant la pile d'appel, de la vue des points d'arrêt nommée "Breakpoints", de la vue éditeur de code en Java avec un onglet par fichier ouvert, de la vue "Outline" donnant la hiérarchie des éléments composant la classe du fichier ouvert.
* Deux ou plusieurs perspectives peuvent être affichées conjointement.
Chaque vue est une sous-fenêtre qui a un titre et se place dans un cadre particulier de la fenêtre de l'IDE. Les vues peuvent être déplacées à la souris par drag and drop pour changer la disposition de la perspective. Plusieurs vues peuvent partager le même cadre, auquel cas, une barre d'onglets permet de basculer entre les vues. Un double clic sur le titre d'une vue provoque l'affichage du cadre qui la contient en pleine fenêtre, réduisant les autres cadres à une icône sur les côtés. Un second double clic restaure les cadres.
Le menu "Window" permet de changer de perspective, et d'ajouter des vues à la perspective courante. Une vue peut également être retirée de la perspective affichée en utilisant la croix à droite du titre de la vue.

#### Édition de lignes

L'éditeur de code possède des raccourcis clavier pratiques rendant l'édition des lignes de code plus rapide :
| Touches | Touches | Effet |
| Shift | ↵ Enter | Ajouter une nouvelle ligne après la ligne courante. |
| Ctrl | ↑/↓ | Faire défiler la vue vers le haut/le bas. |
| CtrlShift | ↑/↓ | Déplacer le curseur sur le membre précédent/suivant de la classe. |
| Alt | ↑/↓ | Déplacer la ligne courante ou les lignes sélectionnées vers le haut/le bas dans le texte. |
| CtrlAlt | ↑/↓ | Dupliquer la ligne courante ou les lignes sélectionnées vers le haut/le bas. |
| CtrlShift | : | Commenter/Décommenter la ligne courante. |

#### Complétion de code

L'éditeur de code peut compléter automatiquement le code là où se trouve le curseur :
| Touches | Touches | Effet |
| Ctrl | Espace | Ouvrir la liste des suggestions de complétion. Une fois la suggestion choisie, la validation se fait par l'une des touches suivantes : ↵ Enter, n'ajoute rien derrière la suggestion ; Espace ou ., ajoute également le caractère produit derrière la suggestion. Toute autre touche produit le caractère sans valider (annuler la complétion). |
| AltShift | : | Complète avec la seule possibilité, ou produit un bip s'il y a plusieurs possibilités. |

#### Navigation et autres astuces

* Dans les codes sources dépassant la hauteur de fenêtre de l'éditeur, placez le pointeur de la souris sur l'accolade fermante d'un bloc pour voir apparaître un résumé du code d'ouverture du bloc en bulle d'aide. Ceci est fort utile pour vérifier quel bloc est fermé par l'accolade sans avoir à faire défiler le code.
* Placez le pointeur de la souris sur un identifiant de classe, méthode ou variable et enfoncez la touche Ctrl pour faire apparaître un lien cliquable vers la définition.
* Cliquez sur un identifiant de membre de classe pour faire apparaître toutes les occurrences d'utilisation dans le fichier : à la fois dans le texte et dans la barre de défilement. Les blocs apparaissant dans la barre de défilement sont cliquables pour faire défiler le code à la position de l’occurrence. Il y a deux couleurs distinctes pour les occurrences utilisées en lecture (accès, appel, ...) et celles utilisées en écriture (affectation).
    Il peut arriver que cela ne semble pas fonctionner car l'éditeur peut être dans un mode autre que celui par défaut. Il faut dans ce cas appuyer une ou deux fois la touche Échap pour que cela fonctionne.

### PyDev

PyDev est un plugin Eclipse pour le développement d'un projet Python (et Jython).
Il a été créé en Juillet 2003 par Aleks Totic et est maintenu depuis Octobre 2004 par Fabio Zadrozny. Il propose entre autres les fonctionnalités suivantes :
* complétion de code,
* analyse et mise en évidence de la syntaxe,
* debug

### Installation du plugin PyDev

Sous Eclipse, voici la procédure à suivre pour installer le plugin :
* Menu "Help" / "Software Updates" / "Find and install ..." / "Search for new feature to install"
* "New Remote Site..." / Name : Python Dev, URL : http://pydev.org/updates/ / Finish
Une fois le plug-in installé, il faut configurer le compilateur Python :
* Menu "Window" / "Preferences" / "PyDev" + "Interpreter Python" / "New"
Il vous faudra ensuite choisir l'exécutable python : "/usr/bin/python" sous Linux, "C:\Python\python.exe" sous Windows et valider, puis sélectionner les répertoires à inclure dans le PYTHONPATH (en cas de doute, prenez ceux qui vous sont proposés).

### Créer un projet "Hoo hoo World" avec le plugin PyDev

Sous Eclipse, une fois le plug-in installé, choisir de créer un nouveau projet
* Menu "File" / "New" / "Project"
* Sélectionner Pydev Project / "Next"
* Donner un nom et choisir la version correspondant à python (ex: 2.4).
* Valider ("Finish") : Vous devez avoir une nouvelle entrée correspondant au projet
* Clic droit sur le projet pour ajouter un nouveau module ("New" / "Pydev module")
* donner lui un nom (ex: monScript)
* saisir le code suivant dans le fichier :
* sauvegarder (CTRL + S, ou clic sur la disquette, ou menu "File" / "Save")
* exécuter : Bouton droit sur le fichier monScript / "Run as" / "Python run"
    Pour les prochaines exécutions du script, utiliser la barre d'outil (symbole lecture blanc dans un rond vert) ou CTRL + F11.

### Complétion auto

Pour voir la complétion automatique de code, utilisez CTRL + Espace.
Par exemple pour le code suivant :
si l'on place le curseur après le point, et que l'on tape CTRL + Espace, l'ensemble des méthodes de la classe String seront proposées (ex: .upper qui passe en majuscule la chaîne de caractère x).

## Lancement des scripts

Certains EDI permettent de lancer les scripts en cliquant. Toutefois d'une manière générale, il faut les exécuter en lançant en ligne de commande l'interpréteur Python, en lui fournissant comme premier argument le nom du fichier qui contient le script, voire des paramètres supplémentaires comme autres arguments.
Par exemple, si vous avez placé un script dans un fichier nommé MonScript.py, il suffira d'entrer la commande suivante dans une fenêtre de terminal (ou une invite de commande sous Windows) pour que ce script s'exécute :
ou
Par ailleurs, quand le fichier porte bien l'extension conventionnelle Python (.py), il a un icône Python et il est possible de l'exécuter simplement en cliquant sur son nom ou sur l'icône correspondante dans le gestionnaire de fichiers (c'est-à-dire l'explorateur, sous Windows, Gnome, ou Konqueror, sous KDE). En effet ces gestionnaires graphiques « savent » qu'il doivent lancer l'interpréteur Python chaque fois que leur utilisateur essaye d'ouvrir un fichier dont le nom se termine par .py (cela suppose bien entendu qu'ils aient été correctement configurés). La même convention permet en outre aux éditeurs « intelligents » de reconnaître automatiquement les scripts Python et d'adapter leur coloration syntaxique en conséquence.
Évitez cependant de choisir des noms qui risqueraient d'être déjà attribués à des modules python existants, tels que "math.py" ou "Tkinter.py".
Si vous travaillez avec IDLE sous Windows, vous pouvez lancer l'exécution du script en cours d'édition, directement à l'aide de la combinaison de touches <Ctrl-F5>.

## En-tête des fichiers

Un fichier python commence en général par deux lignes indiquant l'interpréteur utilisé et l'encodage des caractères.

### Shebang

La première ligne est le shebang qui indique le chemin de l'interpréteur Python pour exécuter le programme en ligne de commande sous Linux :
Cette ligne n'est pas nécessaire sous Windows, mais comme un programme Python est multi-plateforme (s'il n'utilise pas d'astuces spécifiques à un système d'exploitation), la présence de cette ligne reste toutefois utile. De plus elle permet de voir quelle version de Python est utilisée pour la syntaxe du fichier.

### Encodage du fichier

Avec Python 2 il faut indiquer l'encodage, comme :
ou
ou tout autre encodage supporté par Python et l'éditeur de texte.
Ces commentaires spéciaux indiquent à Python que vous utiliserez dans votre script :
* Soit le jeu de caractères accentués correspondant aux principales langues de l'Europe occidentale (Français, Italien, Portugais, etc.), codé sur un seul octet suivant la norme ISO-8859 ;
* Soit le système de codage mondial sur deux octets appelé Unicode (dont la variante Utf-8 ne code que les caractères « spéciaux » sur deux octets, les caractères du jeu ASCII standard restant codés sur un seul octet). Ce dernier système commence à se répandre de plus en plus, car il présente l'avantage de permettre la coexistence de caractères de toutes origines dans le même document (caractères grecs, arabes, cyrilliques, japonais, etc.). C'est ce mode qu'il faut privilégier pour plus de compatibilité.
Python peut utiliser les deux encodages de caractères, mais vous devez lui signaler lequel vous utilisez.
Si votre éditeur de texte enregistre les fichiers en UTF-8, placez le second des pseudo-commentaires indiqués ci-dessus au début de chacun de vos scripts. Mac OS X et Linux utilisent ce codage.
Si votre système d'exploitation fonctionne suivant la norme ancienne (ISO-8859), vous devrez utiliser plutôt le premier pseudo-commentaire.
Si vous n'en indiquez aucun, vous recevrez de temps à autre des messages d'avertissement de la part de l'interpréteur, et vous éprouverez peut-être même quelques difficultés à éditer correctement vos scripts dans l'environnement IDLE (en particulier sous Windows).
Sous Python 3 ces problèmes d'encodage n’apparaissent pas car celui-ci utilise par défaut l'Unicode.

## Références

* ↑ http://scintilla.sourceforge.net/SciTETranslation.html
* ↑ https://eclipse.org/cdt/
* ↑ (anglais) http://pydev.org/

# Programmer en deux minutes

1. Ouvrir Python (command line). Comment ? En exécutant python ou en recherchant python.exe
Une invite de commande s'affiche.
Hello World !
Saisissez « print("Bonjour tout le monde.") » puis pressez Entrée/Retour. Vous avez à l'écran :
2. Saisissez « a=3 » puis pressez Entrée/Retour. Dans l'invite suivante saisissez « print(a) ». Vous avez à l'écran :
3. Saisissez ces commandes :
4. Ouvrez un éditeur de texte, écrivez...
...et enregistrez ce script dans un fichier d'extension *.py
5. Ouvrez la ligne de commande de votre système d'exploitation (par exemple : bash GNU/Linux, Terminal pour Mac OS X, ou cmd pour Windows), placez votre invite de commande dans le répertoire de votre fichier *.py, affichez votre fichier *.py dans votre invite de commande et exécutez-le en pressant Enter.
Félicitation, vous avez écrit et exécuté votre premier script !

# Programmer en deux minutes/une messagerie instantanée

Nous allons écrire deux scripts en Python et les exécuter chacun dans une console. Les deux programmes vont communiquer afin d'envoyer un message et d'attendre la réponse.

## Écoute

1). Ouvrir un éditeur de texte, et coller le script suivant (sans caractère spéciaux comme "é")...
* ecoute.py
* #!/usr/bin/python
* # -*- coding: latin-1 -*-
* import socket # importe un ensemble d'instructions pour connecter les programmes.
* # Cet ensemble est disponible a l'installation de Python, dans la bibliotheque de base.
* # Creation du connecteur d'ecoute par l'instruction 'socket'
* # de la bibliotheque socket precedemment importee.
* Connecteur = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
* Hote = '127.0.0.1' # Adresse locale de l'ordinateur.
* Port = 80 # Choix d'un port d'ecoute.
* Connecteur.bind((Hote,Port)) # instruction 'bind' de la bibliotheque du connecteur
* print "Le programme est a l'ecoute d'une eventuelle discussion, vous en serez averti." # Rajoutez des parentheses pour Python 3 !
* Connecteur.listen(1) # ecoute...
* client, adresse = Connecteur.accept # accepte...
* print "L'ordinateur",adresse," veut discuter ! J'attends son message." # Rajoutez des parentheses pour Python 3 !
* # Creation du connecteur de reponse
* Reponse = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
* Portreponse = 234
* Reponse.connect((Hote,Portreponse ))
* print "Note : je me suis connecte a",adresse," pour lui repondre" # Rajoutez des parentheses pour Python 3 !
* while 1:
* Message = client.recv(255) # reception de la reponse, 255 caracteres max ; Python 3 : Message = str(client.recv(255),'mac_roman')
* if not Message:
* break
* print "\nMessage : ",Message,"\a" + "\n\nVotre reponse :" # Rajoutez des parentheses pour Python 3 !
* msgR = raw_input('>> ') # votre message ? Python 3 : msgR = bytes(input('>> '), 'mac_roman')
* Reponse.send(msgR) # envoi.
* client.close # ferme la connexion lorsque le client est parti : [ctrl+C] pour abandonner l'execution du programme.
...enregistrez ce script (par exemple ecoute.py) et exécutez-le.

## Discussion

2. Ouvrir l'éditeur de texte, écrire le script de discussion...
* discussion.py
* #!/usr/bin/python
* # -*- coding: latin-1 -*-
* import socket
* Discuter = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
* Hote = '127.0.0.1'
* Port = 80
* Port_de_reponse = 234
* Discuter.connect((Hote,Port)) # Se connecte au programme ecoute.py
* Reponse = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
* Reponse.bind((Hote,Port_de_reponse))
* Reponse.listen(1)
* client, adresse = Reponse.accept # Creation du connecteur pour la reponse de ecoute.py
* print "L'adresse",adresse," vous a entendu et attend votre message." # Rajoutez des parentheses pour Python 3 !
* while 1:
* msg = raw_input('>> ') # votre message ? Python 3 : msg = bytes(input('>> '), 'mac_roman')
* Discuter.send(msg) # envoi.
* print "Attente de la reponse..." # Rajoutez des parentheses pour Python 3 !
* reponseaumessage = client.recv(255) # reception de la reponse, 255 caracteres max ; Python 3 : reponseaumessage = str(client.recv(255),'mac_roman')
* if not reponseaumessage:
* break
* print "\n",adresse,":",reponseaumessage,"\a\n" # affiche la reponse # Rajoutez des parentheses pour Python 3 !
* client.close # ferme la connexion lorsque le client quitte.
...enregistrez ce script (par exemple discussion.py) et exécutez-le dans une nouvelle console.
Félicitation, vos deux consoles communiquent !

# Programmer en deux minutes/l'interface de Wikipédia pour programmer

Nous allons écrire un script en Python et l'exécuter dans une console. Le script va utiliser deux ensembles de commandes définis dans la bibliothèque fournie à l'installation du langage.
L'interface avec Wikipédia se fait via des requêtes à :
Par exemple :

## Structure de l'API Wikipédia

* Obtenir les informations à propos de la dernière révision de la page Accueil :
api.php ? action=query & prop=info|revisions & rvprop=timestamp & titles=Accueil
À l'écriture de ces lignes le 17 mai 2009, le dernier réviseur de la page Accueil était Savant-fou (d · c · b) - cette information est contenue dans la chaîne « user="Savant-fou" » - qui, le 25 avril 2009 à 16:07, a résumé sa modification par le commentaire « Ajout rapide de la catégorie Accueil (avec HotCats) ». Pour connaître le dernier réviseur de la page d'accueil en ce moment, cliquez sur le lien ci-dessus qui affiche ce document XML.
résultat de commandes dans différents formats
* XML
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=xmlfm
* JSON
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=jsonfm
* YAML
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=yamlfm
* WDDX
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=wddxfm
* PHP (serialized format, with line breaks added for readability. Use PHP's unserialize function to recover data.)
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=php
* PHP (var_export format. Use PHP's eval function to recover data.)
api.php ? action=query & titles=Albert%20Einstein & prop=info & format=dbg

## Dernier modifieur de la page

1. Ouvrir un éditeur de texte, coller le script suivant (sans caractères spéciaux comme "é" si le fichier est en ASCII au lieu de Unicode)...
* modifieur_de_la_page.py
* #!/usr/bin/python
* # -*- coding: latin-1 -*-
* import urllib.request, re # import des modules à partir de la bibliothèque d'instructions de base,
* # 'urllib' pour URL library et 're' pour regular expression.
* nom_de_page = "Accueil"
* url = "http://fr.wikipedia.org/w/api.php?action=query&prop=info|revisions&titles=%s&format=xml" % nom_de_page
* # affichage
* page = urllib.request.urlopen(url)
* infos = str(page.read, 'utf_8') # lit le résultat de la requête à l'url ci-dessus
* page.close
* print("Les informations demandées concernant" + nom_de_page + "sont les suivantes, en XML :\n\n" + infos)
* # extraction
* print("\n...recherche l'expression rationnelle...")
* reviseur = re.findall(' user="(.*?)" ',infos) # recherche l'expression rationnelle
* print("\nDernier reviseur : " + str(reviseur))
...enregistrez ce script (par exemple modifieur_de_la_page.py) et exécutez-le. Le script utilise cette requête pour afficher le dernier modifieur de la page d'accueil.
Note : il s'agit de la méthode utilisant les bibliothèques natives de Python. Une alternative est d'utiliser le framework Pywikibot, qui se charge de l'API de MediaWiki à la place du développeur, rendant la tâche beaucoup plus simple pour des scripts plus perfectionnés.

## Boucle des modifieurs du bistro

2. Obtenir la liste des derniers modifieurs des Bistros du mois dernier. Ouvrir l'éditeur de texte, écrire ce script utilisant plusieurs fois cette requête... Si vous souhaitez utiliser le code suivant avec Python 3, faites les mêmes modifications que dans le script précédent. C'est-à-dire : rajoutez des parenthèses aux print ; chargez la classe urllib.request (au lieu d'urllib tout court) ; utilisez la fonction urllib.request.urlopen (au lieu de urllib.urlopen) ; transformez le résultat de read en chaîne de caractères (infos = str(url.read, 'utf_8')).
* boucle_reviseur_bistro.py
* #!/usr/bin/python
* # -*- coding: latin-1 -*-
* import urllib # import des modules de la bibliothèque d'instructions fournie à l'installation.
* import re
* a = 0
* space = ' '
* nospace = ''
* while a < 31:
* a = a+1 # a est un nombre entier (integer)
* b = str(int(a)) # et b une chaine de caractères (string)
* nom = "Wikipedia:Le_Bistro/"+b+"_avril_2009"
* nom = nom.replace(space, nospace) # supprime les espace
* url = urllib.urlopen("http://fr.wikipedia.org/w/api.php?action=query" +
* "&prop=info|revisions&titles=%s&format=xml" % nom )
* infos = url.read
* url.close
* reviseur = re.findall(' user="(.*?)" ', infos) # recherche l'expression rationnelle
* for chacun in reviseur:
* print("\nDernier reviseur du bistro du " + b + " avril 2009 : " + chacun)
...enregistrez ce script (par exemple boucle_reviseur_bistro.py) et exécutez-le.

## Tous les modifieurs de la page

3. La liste des modifieurs de la page d'accueil entre deux dates, et les commentaires de révisions : ouvrir l'éditeur de texte, écrire ce script, faire les mêmes modifications pour Python 3 le cas échéant... Ce script utilise cette requête.
* liste_des_reviseurs.py
* #!/usr/bin/python
* # -*- coding: latin-1 -*-
* import urllib.request, re # import des modules à partir de la bibliothèque d'instructions de base,
* debut = str(int(20090311000000)) # date pour commencer a lister, ici 11 mars 2009.
* fin = str(int(20090511000000))
* nom = "Accueil"
* url = "http://fr.wikipedia.org/w/api.php?action=query" + "&prop=revisions&rvstart=%s&revend=%s&titles=%s&format=xml" % (debut, fin, nom)
* page = urllib.request.urlopen(url)
* infos = str(page.read, 'utf_8') # lit le résultat de la requête à l'url ci-dessus
* page.close
* # recherche et affiche les réviseurs
* reviseur = re.findall(' user="(.*?)" ',infos) # recherche l'expression rationnelle
* for chacun in reviseur:
* print("Reviseur : " + chacun)
* # recherche et affiche les commentaires
* commentaire = re.findall(' comment="(.*?)" ',infos) # recherche l'expression rationnelle
* for comment in commentaire:
* print("\nCommentaire de revision : " + comment)
Félicitations, vous utilisez Wikipédia via son API !
Vous pouvez poursuivre cet exercice en programmant du python sur une base vierge, ou alors utiliser la librairie d'instructions Pywikipedia et les scripts Pywikipedia hébergés par Wikimédia. Par exemple, vous devriez être capable de lire un script tel que :
* statistics_in_wikitable.py
* #!/usr/bin/python
* # -*- coding: utf-8 -*-
* \03{lightyellow}This bot renders statistics provided by [[Special:Statistics]] in a table on a wiki page.\03{default}
* Thus it creates and updates a Statistics wikitable.
* The following parameters are supported:
* \03{lightred}-screen\03{default} If True, doesn't do any changes, but only shows the statistics.
* \03{lightgreen}-page\03{default} On what page statistics are rendered.
* If not existing yet, it is created.
* If existing, it is updated.
* __version__ = '$Id$'
* import wikipedia
* import pagegenerators
* import query
* import time
* # This is the title of the wikipage where to render stats.
* your_page = "Logstats"
* summary_update = {
* 'en':u'Updating some statistics.',
* summary_creation = {
* 'en':u'Creating statistics log page.',
* class StatisticsBot:
* def __init__ (self, screen, your_page):
* Constructor. Parameter:
* * screen - If True, doesn't do any real changes,
* but only shows some stats.
* self.screen = screen
* self.your_page = your_page
* self.dict = self.getdata # Try to get data.
* self.site = wikipedia.getSite
* def run(self):
* if self.screen:
* wikipedia.output("Bot is running to output stats.")
* self.idle(1) # Run a function to idle
* self.outputall
* if not self.screen:
* self.outputall # Output all datas on screen.
* wikipedia.output("\nBot is running. " +
* "Going to treat \03{lightpurple}%s\03{default}..." %
* self.your_page )
* self.idle(2)
* self.treat
* # getdata returns a dictionnary of the query to
* # api.php?action=query&meta=siteinfo&siprop=statistics
* def getdata(self):
* # This method return data in a dictionnary format.
* # View data with: api.php?action=query&meta=siteinfo&siprop=statistics&format=jsonfm
* params = {
* 'action' :'query',
* 'meta' :'siteinfo',
* 'siprop' :'statistics',
* wikipedia.output("\nQuerying api for json-formatted data...")
* try:
* data = query.GetData(params,self.site, encodeTitle = False)
* except:
* url = self.site.protocol + '://' + self.site.hostname + self.site.api_address
* wikipedia.output("The query has failed. Have you check the API? Cookies are working?")
* wikipedia.output(u"\n>> \03{lightpurple}%s\03{default} <<" % url)
* if data != None:
* wikipedia.output("Extracting statistics...")
* data = data['query'] # "query" entry of data.
* dict = data['statistics'] # "statistics" entry of "query" dict.
* return dict
* def treat(self):
* page = wikipedia.Page(self.site, self.your_page)
* if page.exists:
* wikipedia.output(u'\nWikitable on ' +
* u'\03{lightpurple}%s\03{default} will be completed with:\n' % self.your_page )
* text = page.get
* newtext = self.newraw
* wikipedia.output(newtext)
* choice = wikipedia.inputChoice(
* u'Do you want to add these on wikitable?', ['Yes', 'No'], ['y', 'N'], 'N')
* text = text[:-3] + newtext
* summ = wikipedia.translate(self.site, summary_update)
* if choice == 'y':
* try:
* page.put(u''.join(text), summ)
* except:
* wikipedia.output(u'Impossible to edit. It may be an edit conflict... Skipping...')
* else:
* wikipedia.output(
* u'\nWikitable on \03{lightpurple}%s\03{default} will be created with:\n' % self.your_page )
* newtext = self.newtable+self.newraw
* wikipedia.output(newtext)
* summ = wikipedia.translate(self.site, summary_creation)
* choice = wikipedia.inputChoice(
* u'Do you want to accept this page creation?', ['Yes', 'No'], ['y', 'N'], 'N')
* if choice == 'y':
* try:
* page.put(newtext, summ)
* except wikipedia.LockedPage:
* wikipedia.output(u"Page %s is locked; skipping." % title)
* except wikipedia.EditConflict:
* wikipedia.output(u'Skipping %s because of edit conflict' % title)
* except wikipedia.SpamfilterError, error:
* wikipedia.output(
* u'Cannot change %s because of spam blacklist entry %s' % (title, error.url))
* def newraw(self):
* newtext = ('\n|----\n!\'\''+ self.date +'\'\'') # new raw for date and stats
* for name in self.dict:
* newtext += '\n|'+str(abs(self.dict[name]))
* newtext += '\n|----\n|}'
* return newtext
* def newtable(self):
* newtext = ('\n{| class=wikitable style=text-align:center\n!'+ "date") # create table
* for name in self.dict:
* newtext += '\n|'+name
* return newtext
* def date(self):
* return time.strftime('%Y/%m/%d', time.localtime(time.time))
* def outputall(self):
* list = self.dict.keys
* list.sort
* for name in self.dict:
* wikipedia.output("There are "+str(self.dict[name])+" "+name)
* def idle(self, retry_idle_time):
* time.sleep(retry_idle_time)
* wikipedia.output(u"Starting in %i second..." % retry_idle_time)
* time.sleep(retry_idle_time)
* def main(your_page):
* screen = False # If True it would not edit the wiki, only output statistics
* _page = None
* wikipedia.output("\nBuilding the bot...")
* for arg in wikipedia.handleArgs: # Parse command line arguments
* if arg.startswith('-page'):
* if len(arg) == 5:
* _page = wikipedia.input(u'On what page do you want to add statistics?')
* else:
* _page = arg[6:]
* if arg.startswith("-screen"):
* screen = True
* if not _page:
* _page = your_page
* if not screen:
* wikipedia.output("The bot will add statistics on %s.\n" % _page )
* bot = StatisticsBot(screen, _page) # Launch the instance of a StatisticsBot
* bot.run # Execute the 'run' method
* if __name__ == "__main__":
* try:
* main(your_page)
* finally:
* wikipedia.stopme
    Le script statistics_in_wikitable.py importe quelques librairies d'instructions dont Pywikipedia, définit trois variables, définit l'objet StatisticsBot, puis définit une fonction principale qui est exécutée à la fin du script (par l'instruction try: main(your_page)).

# Programmer en deux minutes/un serveur Web

Nous allons écrire un script en Python et l'exécuter dans une console. Le programme va utiliser deux ensemble d'instructions, ces ensembles étant définis dans la bibliothèque de base.

## Serveur HTTP

1. Ouvrir un éditeur de texte, écrire le script...
* serveur_http.py
* #!/usr/bin/python
* # -*- coding: latin-1 -*-
* import SimpleHTTPServer # importe un ensemble d'instructions pour servir les requêtes http.
* import SocketServer # importe un ensemble d'instructions pour connecter le programme.
* # Ces deux ensembles sont disponibles à l'installation de Python
* ## Python 3 :
* # import http.server
* # import socketserver
* # Serveur http de base delivrant le contenu du repertoire courant via le port indique.
* PORT = 5432
* Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
* httpd = SocketServer.TCPServer(("", PORT), Handler)
* print "serving at port", PORT
* ## Python 3 :
* # Handler = http.server.SimpleHTTPRequestHandler
* # httpd = socketserver.TCPServer(("",PORT), Handler)
* # print("à l'écoute sur le port :", PORT)
* httpd.serve_forever
...enregistrez ce script (par exemple serveur_http.py) dans un répertoire que vous voulez partager (par exemple /PUBLIC_web) et exécutez-le dans une console.
Félicitation, votre programme répond aux requêtes http://localhost:5432 et votre répertoire public peut être téléchargé.
* ↑ « http://localhost:5432 » est une requête de protocole HTTP à votre machine locale via le port 5432
* ↑ Nommé « /PUBLIC_web » dans l'exemple

## Index.html

2. Ouvrez un éditeur de texte et créez l'index de votre site statique :
* index.html
* <!DOCTYPE html
* PUBLIC "-//W3C//DTD HTML 4.01//FR"
* "http://www.w3.org/TR/html4/strict.dtd">
* <html lang="fr-FR">
* <head>
* Bonjour, bienvenue sur le serveur de mon ordinateur perso.
* C'est un <a href="serveur_http.py">programme en Python</a> qui vous sert.
* </head>
* <body>
* <title>Salut le Web</title>
* <h2>Sommaire</h2>
* <p><a href="page1.html">Page 1</a> - <a href="page2.html">Page 2</a>
* <p>Fichier partagé : <a href="rapportXX.odt">rapportXX</a> et lien web : <a href="http://fr.wikipedia.org">wikipedia</a>.
* </body>
* </html>
...enregistrez ce fichier sous le nom index.html dans le répertoire que vous partagez (Nommé « /PUBLIC_web » dans cet exemple).
Félicitation, votre programme répond aux requêtes http://localhost:5432 en servant l'index de votre site web !