• Aucun résultat trouvé

[PDF] Cours de programmation événementielle python | Cours programmation

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours de programmation événementielle python | Cours programmation"

Copied!
357
0
0

Texte intégral

(1)

Programmation Python

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

Vous avez la permission de copier, distribuer et/ou modifier ce document selon les termes de la Licence de documentation libre GNU, version 1.2 ou plus récente publiée par la Free Software Foundation ; sans sections inaltérables, sans texte de première page de couverture et sans Texte de dernière page de couverture. Une copie de cette licence est incluse dans l'annexe nommée

(2)

1 Avant-propos

1.1 Choix d'un premier langage de programmation 1.2 La démarche du programmeur

1.3 Langage machine, langage de programmation 1.4 Compilation et interprétation

1.5 Mise au point d'un programme - Recherche des erreurs (« debug ») 1.5.1 Erreurs de syntaxe

1.5.2 Erreurs sémantiques 1.5.3 Erreurs à l'exécution

1.6 Recherche des erreurs et expérimentation 1.7 Langages naturels et langages formels 1.8 Notes

2 Introduction

2.1 Définition du langage

2.1.1 Caractéristiques du langage 2.2 Utilisation

2.2.1 Quelques exemples d'utilisation de Python 2.3 Version 2 et version 3

2.4 Références 3 Installation

3.1 Exécution sans installation 3.2 Installation locale

3.2.1 Linux

3.2.2 Utilisateurs de Mac 3.3 Mode Interactif

3.3.1 Calculer avec Python 3.3.2 Aide

3.4 pip 3.5 Références 4 Éditeurs

4.1 Utilité des éditeurs 4.2 SciTE

4.2.1 Langages supportés 4.2.2 Installation sous Linux 4.2.3 Installation sous Windows 4.2.4 Pour les deux versions 4.2.5 Traductions 4.2.6 Utilisation 4.3 DrPython 4.4 Eclipse 4.4.1 Installation de Eclipse 4.4.2 Utilisation de Eclipse 4.4.3 PyDev

4.4.4 Installation du plugin PyDev

4.4.5 Créer un projet "Hoo hoo World" avec le plugin PyDev 4.4.6 Complétion auto

4.5 Lancement des scripts 4.6 En-tête des fichiers 4.7 Références

5 Programmer en deux minutes

6 Programmer en deux minutes/une messagerie instantanée

Sections

(3)

6.1 Écoute 6.2 Discussion

7 Programmer en deux minutes/l'interface de Wikipédia pour programmer 7.1 Structure de l'API Wikipédia

7.2 Dernier modifieur de la page 7.3 Boucle des modifieurs du bistro 7.4 Tous les modifieurs de la page

8 Programmer en deux minutes/un serveur Web 8.1 Serveur HTTP 8.2 Index.html 9 Afficher un texte 9.1 print() 9.1.1 print formaté 9.2 input() 9.3 raw_input()

9.4 Afficher des caractères spéciaux 9.5 Antislash 9.6 Triple quotes 9.7 Commentaires 9.7.1 Commentaires de bloc 9.8 Couleurs 9.9 Références

10 Structure d'un programme 10.1 Les instructions

10.1.1 Les espaces sont ignorés 10.2 Notion de bloc d'instructions 11 Variables 11.1 Affectations 11.1.1 Réaffectation 11.1.2 Affectations multiples 11.1.3 Affectations parallèles 11.2 Principe de fonctionnement 11.2.1 Exemple 11.2.2 Les références 11.3 Noms des variables 11.4 Références 12 Opérateurs

12.1 Définition

12.2 Présentation des différents opérateurs 12.2.1 les opérateurs d'affectation 12.2.2 les opérateurs logiques 12.2.3 les opérateurs de comparaisons 12.2.4 les opérateurs mathématiques 12.3 Priorité des opérations

12.4 Références 12.5 Opérateurs et expressions 12.6 Composition 13 Structures de contrôle 13.1 Définition 13.2 Séquence d'instructions

13.3 Sélection ou exécution conditionnelle 13.4 Instructions imbriquées

(4)

13.5 pass

14 Instructions répétitives 14.1 L'instruction "while"

14.1.1 Remarques

14.2 Construction d'une suite mathématique 14.3 L'instruction "for"

14.4 Les instructions "break", "continue" 15 Types

15.1 Typage des variables 15.2 Types natifs

15.3 Détermination d'un type 15.4 Conversion des types 16 Numériques

16.1 Les nombres entiers de type int 16.2 Les nombres entiers de type long

16.2.1 Limite entre « integer » et « long » 16.3 Les nombres à virgule flottante (float) 16.4 Les nombres complexes

17 Booléens 17.1 Définition

17.2 Exemple d'expressions booléennes 17.2.1 And

17.2.2 Not 17.2.3 Or 17.2.4 bool()

17.3 Note sur les opérateurs booléens 17.4 Véracité/fausseté d'une expression 17.5 Exemple

18 Chaines de caractères

18.1 Les données alphanumériques 18.1.1 Le type « string »

18.2 Accès aux caractères individuels d'une chaîne 18.3 Taille des chaines

18.4 Sous-chaines 18.5 Concaténation

18.6 Parcours d'une séquence : for... in...

18.7 Appartenance d'un élément à une séquence : if.. in... 18.8 Les chaînes sont des séquences non modifiables 18.9 Les chaînes sont comparables

18.10 Encodage

18.11 Classement des caractères 18.12 Méthodes des objets string 18.13 Références 19 Listes 19.1 Déclaration 19.2 Lecture 19.2.1 Types 19.2.2 Recherche 19.3 Modification 19.3.1 Affectation 19.3.2 Opérations

(5)

19.3.3.1 Insertion 19.3.3.2 Suppression 19.3.3.3 Différence 19.3.3.4 Intersection 19.3.4 Copie 19.4 Méthodes 19.4.1 append 19.4.2 split 19.4.3 join 19.4.4 pop 19.5 Fonctions 19.5.1 len 19.5.2 del 19.5.3 min et max 19.5.4 range

19.5.5 Parcours d'une liste à l'aide de for, range() et len() 19.5.5.1 Une conséquence du typage dynamique 19.5.6 random

19.5.6.1 Exemple de résultats affichés par un programme de ce type 19.5.6.2 Tirage au hasard de nombres entiers

19.5.7 map 19.6 Exercices 20 Tuples

20.1 Description d'un tuple 21 Dictionnaires

21.1 Déclarations

21.2 Création d'un dictionnaire 21.3 Opérations sur les dictionnaires 21.4 Les dictionnaires sont des objets

21.4.1 keys et values 21.4.2 has_key 21.4.3 items 21.4.4 copy 21.4.5 update

21.5 Parcours d'un dictionnaire

21.6 Les clés ne sont pas nécessairement des chaînes de caractères 21.7 Les dictionnaires ne sont pas des séquences

21.8 Construction d'un histogramme à l'aide d'un dictionnaire 21.9 Contrôle du flux d'exécution à l'aide d'un dictionnaire 22 Dates 22.1 Module datetime 22.2 Syntaxe 22.3 Références 23 Ensembles 23.1 Définition 23.2 Construction d'ensembles 23.3 Recherche de membre 23.4 Retrait de membre 23.5 Itération des ensembles 23.6 Opérations sur les ensembles

23.6.1 Intersection 23.6.2 Union

23.6.3 Différence symétrique 23.6.4 Différence

(6)

23.7 Opérations non binaires 23.8 frozenset

23.9 Exercices 23.10 Références 24 Fonctions

24.1 Définir une fonction 24.2 Fonctionnement 24.2.1 Récursivité 24.2.2 Passage d'argument 24.2.3 Arguments facultatifs 24.2.4 Arguments nommés 24.3 Fonction lambda

24.4 Récupérer les arguments de la ligne de commande 24.5 Variables locales, variables globales

24.6 Utilisation des fonctions dans un script 24.7 Modules de fonctions

25 Modules 25.1 Définition

25.2 Importer un module 25.3 Modules personnalisés 25.4 Liste des modules standards

25.4.1 Exemple du module "math" 25.5 Références

26 Exercices sur les bases du langage 26.1 Révision

26.1.1 Contrôle du flux - Utilisation d'une liste simple 26.1.2 Boucle while - Instructions imbriquées 26.2 Exercices 26.2.1 Exercice 1 26.2.2 Exercice 2 26.2.3 Exercice 3 26.2.4 Exercice 4 26.2.5 Exercice 5 27 Regex 27.1 Syntaxe 27.2 Recherche 27.2.1 group() 27.2.2 Flags 27.2.2.1 re.IGNORECASE 27.2.2.2 re.MULTILINE 27.2.2.3 re.DOTALL 27.3 Remplacement 27.4 Exemples de formules 27.5 Références

28 Programmation orientée objet pour les non-programmeurs 28.1 Le concept objet

28.1.1 Le critère descriptif 28.1.2 Le critère d'interaction 28.1.3 l'héritage et l'implémentation 28.2 Utilité des classes

29 Classes

(7)

29.2 Attributs (ou variables) d'instance

29.3 Passage d'objets comme arguments lors de l'appel d'une fonction 29.4 Similitude et unicité

29.5 Objets composés d'objets

29.6 Objets comme valeurs de retour d'une fonction 29.7 Les objets sont modifiables

29.8 Définition d'une méthode 29.9 Méthodes prédéfinies 29.9.1 __doc__ 29.9.2 __contains__ 29.9.3 __del__ 29.9.4 __enter__ et __exit__ 29.9.5 __ init __ 29.9.6 __main__ 29.9.7 __new__ 29.9.8 __repr__ 29.9.9 __str__ 29.9.10 __unicode__ 29.9.11 Opérateurs binaires 29.9.12 Opérateurs unaires 29.9.13 Gestion des attributs 29.9.14 Gestion des indices 29.9.15 Divers

29.10 Espaces de noms des classes et instances 29.11 Héritage

29.12 Héritage et polymorphisme 29.13 Exercices

29.14 Références

30 Classes et Interfaces graphiques

30.1 « Code des couleurs » : un petit projet bien encapsulé 30.2 « Petit train » : héritage, échange d'informations entre classes 30.3 « OscilloGraphe » : un widget personnalisé

30.4 « Curseurs » : un widget composite 30.4.1 Présentation du widget « Scale »

30.4.2 Construction d'un panneau de contrôle à trois curseurs 30.4.2.1 Commentaires

30.4.2.2 Propagation des évènements

30.5 Intégration de widgets composites dans une application synthèse 30.5.1 Commentaires

30.6 Notes 31 Fichiers

31.1 Utilité des fichiers 31.2 Travailler avec des fichiers

31.3 Noms de fichiers - Répertoire courant 31.4 Les deux formes d'importation 31.5 Écriture séquentielle dans un fichier 31.6 Lecture séquentielle d'un fichier 31.7 Exemple avec une boucle 31.8 Fichiers texte

31.9 Enregistrement et restitution de variables diverses 31.10 Exercices

31.11 Notes 31.12 Sources 32 Exceptions

(8)

32.2 Syntaxe 32.3 Exemple 33 Bases de données 33.1 MySQL 33.2 Postgres 33.3 Installation de Gadfly 33.3.1 Sous Windows 33.3.2 Sous Linux 33.4 Références 33.5 Liens externes

34 Gestion d'une base de données 34.1 Les bases de données

34.1.1 SGBDR - Le modèle client/serveur 34.1.2 Le langage SQL - Gadfly

34.2 Mise en œuvre d'une base de données simple avec Gadfly 34.2.1 Création de la base de données

34.2.2 Connexion à une base de données existante 34.2.3 Recherches dans une base de données 34.2.4 La requête select

34.3 Ébauche d'un logiciel client pour MySQL

34.3.1 Décrire la base de données dans un dictionnaire d'application 34.3.2 Définir une classe d'objets-interfaces

34.3.3 Construire un générateur de formulaires 34.3.4 Le corps de l'application 34.4 Notes 35 L'interface CGI 35.1 Description 35.2 Installation 35.3 Exemples

35.3.1 Une interaction CGI rudimentaire

35.3.2 Un formulaire HTML pour l'acquisition des données 35.3.3 Un script CGI pour le traitement des données 35.4 Références

36 Applications web

36.1 Pages web interactives 36.2 Un serveur web en pur Python !

36.2.1 Installation de Karrigell 36.2.2 Démarrage du serveur : 36.2.3 Ébauche de site web 36.2.4 Prise en charge des sessions 36.2.5 Autres développements 36.3 Notes

37 Réseau

37.1 Communication entre programmes 37.2 Les sockets

37.3 Construction d'un serveur élémentaire 37.4 Construction d'un client rudimentaire 37.5 Récupérer une page Web en python

37.5.1 Afficher une page Web 37.6 Références

38 Threads

(9)

38.2 Client gérant l'émission et la réception simultanées

38.3 Serveur gérant les connexions de plusieurs clients en parallèle 38.4 Jeu des bombardes, version réseau

38.4.1 Programme serveur : vue d'ensemble 38.4.2 Protocole de communication

38.4.3 Programme serveur : première partie

38.4.4 Synchronisation de threads concurrents à l'aide de « verrous » (thread locks) 38.4.5 Programme serveur : suite et fin

38.4.6 Programme client

38.5 Utilisation de threads pour optimiser les animations. 38.5.1 Temporisation des animations à l'aide de after() 38.5.2 Temporisation des animations à l'aide de time.sleep() 38.5.3 Exemple concret

38.6 Notes

39 Bibliothèques pour Python 39.1 Bibliothèques standards 39.2 Bibliothèques alternatives 39.3 Références

40 L'interface graphique

40.1 L'interface graphique pour Python 41 Utilisation de fenêtres et de graphismes

41.1 Interfaces graphiques (GUI) 41.2 Premiers pas avec Tkinter

41.3 Programmes pilotés par des événements

41.3.1 Exemple graphique : détection et positionnement d'un clic de souris 41.4 Les classes de widgets Tkinter

41.5 Utilisation de la méthode grid() pour contrôler la disposition des widgets 41.5.1 Analysons à présent la fenêtre suivante :

41.5.2 Nous pouvons remarquer un certain nombre de choses dans ce script : 41.6 Composition d'instructions pour écrire un code plus compact

41.7 Modification des propriétés d'un objet - Animation 41.8 Animation automatique - Récursivité

41.9 Notes 42 Tkinter

42.1 Créer des interfaces python avec Tkinter 42.1.1 Que faut il posséder d'abord ? 42.1.2 Principes de base

42.1.3 Créer une fenêtre pour l'application

42.1.3.1 Propriétés et méthodes de l'objet fenêtre 42.1.4 Qu'est-ce qu'un widget ?

42.1.5 Le widget Button

42.1.5.1 propriétés et méthodes de l'objet "bouton" 42.1.6 Le widget Label

42.1.6.1 Propriétés et méthodes de l'objet label 42.1.7 Le widget Entry

42.1.7.1 Propriétés et méthodes de l'objet Entry 42.1.8 Le widget Canvas

42.1.8.1 Quelques propriétés de l'objet Canvas 42.1.8.2 Quelques méthodes du widget Canvas 42.1.8.3 Exemple supplémentaire

42.2 Images .gif

(10)

42.4 Voir aussi

43 Et pour quelques widgets de plus... 43.1 Les « boutons radio »

43.2 Utilisation des cadres (frames) pour la composition d'une fenêtre 43.3 Comment déplacer des dessins à l'aide de la souris

43.4 Python Mega Widgets 43.4.1 « Combo Box »

43.4.2 Remarque concernant l'entrée de caractères accentués 43.4.3 « Scrolled Text »

43.4.4 « Scrolled Canvas »

43.4.5 Barres d'outils avec bulles d'aide - expressions lambda 43.4.6 Métaprogrammation. Expressions lambda :

43.5 Fenêtres avec menus

43.5.1 Première ébauche du programme : 43.5.2 Ajout de la rubrique « Musiciens » 43.5.3 Ajout de la rubrique « Peintres » : 43.5.4 Ajout de la rubrique « Options » : 43.6 Notes

44 Turtle

44.1 Fonctions disponibles 44.1.1 Fonctions principales 44.1.2 Autres fonctions 44.2 Détails des fonctions

44.2.1 color() 44.2.2 Fill 44.3 Exemples 44.4 Compléments 44.5 Exemples

44.5.1 Tracer une spirale quelconque 44.5.2 Tracer une lanterne

44.6 Un peu de détente avec le module turtle 45 Les threads 45.1 Exemples 45.1.1 Appel de fonction 45.1.2 Objet 45.2 Références 46 XML 46.1 La méthode SAX 46.2 La méthode DOM 46.3 Références 47 Tests 47.1 Tests unitaires 47.1.1 Syntaxe 47.1.2 Exemples 47.2 Références 48 Django 49 Exemples de scripts

49.1 Exemples de codes représentatifs 49.1.1 Une introduction

49.1.2 Les structures de données en natif 49.1.3 Accès a une base de données 49.1.4 Programmation réseau - Internet

(11)

49.1.5 Tracé de courbes avec matplotlib 49.1.6 Utilitaires de la bibliothèque standard 49.1.7 Jython : utilisation de Java en Python 49.1.8 Mail

49.1.9 Classe

49.1.10 WMI (sous Windows 2000/XP) 49.1.11 Automation Win32

49.1.12 ctypes

49.1.13 Data Mining - Réseaux bayésiens avec reverend 49.1.14 Implémentation du crible d'Ératosthène

49.1.15 Les fonctions, les types et les classes sont des objets 49.2 Graphique

49.2.1 Tkinter 49.2.2 WxPython

50 Analyse de programmes concrets 50.1 Jeu des bombardes

50.1.1 Prototypage d'une classe « Canon » 50.1.2 Ajout de méthodes au prototype 50.1.3 Développement de l'application 50.1.4 Développements complémentaires 50.2 Jeu de Ping 50.2.1 Principe 50.2.2 Programmation 50.3 Notes 51 Problèmes connus

51.1 Les opérations avec un caractère non-ASCII ne fonctionne pas 51.2 Le regex ajoute le symbole � à la place des pipes (|)

51.3 'ascii' codec can't encode characters in position 51.4 Import error: No module named monModule 51.5 IndexError: list index out of range

51.6 sre_constants.error: bad character range 51.7 sre_constants.error: multiple repeat 51.8 sre_constants.error: unmatched group

51.9 TypeError: maMethode() takes no arguments (1 given) 51.10 TypeError: 'module' object is not callable

51.11 TypeError: slice indices must be integers or None or have an __index__ method

51.12 UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 12: ordinal not in range(128) 51.13 UnicodeWarning: Unicode unequal comparison failed to convert both arguments to Unicode - interpreting

them as being unequal

51.14 ValueError: too many values to unpack 52 Ressources externes 52.1 Bibliographie 52.1.1 En français 52.1.2 En anglais 52.2 Livres en ligne 52.3 Site Web 53 Tableau des opérateurs

53.1 Priorité des opérations 53.2 Références

54 Tableau des types 55 Tableau des valeurs False 56 Tableau des mots réservés

56.1 Les mots clés 56.2 Les fonctions

(12)

56.3 Les modules

Avant-propos

Grace Hopper, inventeur du compilateur :

« Pour moi, la programmation est plus qu'un art appliqué important. C'est aussi une ambitieuse quête menée dans les tréfonds de la connaissance. »

Ce livre est censé 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.

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.

Remarque : l'activité essentielle d'un analyste-programmeur est la résolution de problèmes.

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

Choix d'un premier langage de programmation

(13)

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.

A 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 presqu'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.

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 »).

Langage machine, langage de programmation

(14)

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.

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)[1], 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 :

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

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

(15)

les langages compilés (tel C++), il vous faudrait recompiler l'intégralité du programme après chaque modification, aussi minime soit-elle.

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.

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.

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.

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.

Remarque : les langages de programmation sont des langages formels qui ont été développés pour décrire des algorithmes et

Erreurs sémantiques

Erreurs à l'exécution

Recherche des erreurs et expérimentation

(16)

des structures de données. On appelle algorithme la séquence détaillée de toutes les opérations à effectuer pour résoudre un

problème

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 H2O 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.

(17)

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.

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 circuitserie 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. 1.

(18)

Introduction

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[1], 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.

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é JPython, 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. A 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

Définition du langage

(19)

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.

Comme mentionné plus haut, Python se prête à un grand nombre de tâches. La distribution de base permet, entre autre, 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ée, 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.

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) (http://pythonology.org/success)

Il est à noter que les deux principales familles de python sont la famille version 2 et la famille version 3.

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. Mais la version 3 devant à terme remplacer la version 2, il peut être d'ores et déjà utile de commencer à apprendre la version 3.

http://python-history.blogspot.fr/2009/01/brief-timeline-of-python.html 1.

Utilisation

Quelques exemples d'utilisation de Python

Version 2 et version 3

(20)

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.

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.

Pour les systèmes Windows, vous pouvez télécharger le fichier MSI. Python est le plus souvent automatiquement installé avec la plupart des distribution Linux ou Mac OS, 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) : $ tar -xJvf Python-3.3.3.tar.xz

... liste des fichiers décompressés

Déplacez-vous dans le dossier nouvellement créé et dites à votre système de compiler et installer le programme $ cd Python-3.3.3/

$ ./configure

... plein de messages, prêtez attention aux erreurs ... $ make

... encore plus de messages... $ make install

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 :

Exécuter un script python

> set PATH=%PATH%;C:\<Repertoire de python> > python MonScript.py

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).

Exécution sans installation

Installation locale

Linux

(21)

Remarque : 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) :

# coding:Latin-1 -*-Ou encore mieux :

# coding:Utf-8

-*-Python dispose d'une interface interactive appelée IDLE, qui permet de tester les commandes de base. Pour appeler l'interface, il suffit de saisir python3 en ligne de commande sur macOS et Linux ou ouvrir l'application "IDLE (Python GUI)" sous Windows. Voici par exemple ce qui apparaît dans une fenêtre de terminal KDE (sous Linux)[1] :

$ python3

Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> print("Hello World") Hello World

>>> exit() $

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.

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 :

>>> 5+3 # 8

>>> 2 - 9 # -7 : les espaces sont optionnels

>>> 7 + 3 * 4 # 19 : la hiérarchie des opérations mathématiques est bien respectée >>> (7+3)*4 # 40

>>> 20 / 3 # 6 : arrondi

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[2].

Essayez par exemple :

>>> 20.0 / 3 # (comparez le résultat avec celui obtenu à l'exercice précédent)

Mode Interactif

IDLE sous KDE

IDLE 0.8 sous Windows 2000

IDLE sous Windows 7

Calculer avec Python

(22)

>>> 8./5

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 :

>>> 4 * 2.5 / 3.3

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

Obtenir de l'aide sur une librairie python

> import re

> help(re)

pip est le gestionnaire de paquets fourni avec Python. Pour l'utiliser : pip install nom-du-paquet

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.

1.

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 ». 2.

Aide

pip

(23)

É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 muni de la fonction de coloration syntaxique du code source pour Python, qui aide à relire rapidement et éviter les fautes de syntaxe.

Par conséquent, il vaut mieux en utiliser des spécialisés en programmation, appelés environnement de développement (EDI). Par exemple : SciTE DrPython Eclipse NetBeans[1] NEdit PythonWin[2]

Python scripter[3] : auto-complétion, navigation entre classe avec 'CTRL', génération et exécution des tests unitaires, debugger...

NEdit sous Gnome (Linux).

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.

Les langages compris par SciTE. Il est actuellement capable d'appliquer une syntaxe de style à ces langages : Liste

Ada

ANS.1 MIB definition files* APDL

Assembler (NASM, MASM) AutoIt*

Avenue*

Batch files (MS-DOS) Baan*

Bash* BlitzBasic* Bullant*

Utilité des éditeurs

SciTE

(24)

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*

(25)

YAML*

Les langages marqués par un astérisque doivent être vérifiés pour fonctionner pour un nombre important de personnes.

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 !).

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.

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

La traduction doit être téléchargée[4], 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 :

sudo nautilus

et aller dans le répertoire par défaut : /usr/share/scite

Installation sous Linux

Installation sous Windows

Pour les deux versions

Traductions

(26)

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 à installer Python 2.7

pour tout utilisateur du ordinateur.

Installer pour tout

utilisateur/Installer pour seulement

moi (pas disponible sur Windows

Vista) [Le 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 dossier destination.

Veuillez sélectionner un dossier

pour les fichiers de Python 2.7. [Le

défaut est bien.]

Customize Python 2.7. Select the

way you want features to be

installed.

Customizez Python 2.7. Choisissez

la façon d'installer les traits que

vous préférez. [Le defaut est

d'installer tout trait, qui est

acceptable.]

Python 2.7

DrPython est un environnement d'exploration pour le langage Python. (Il y a des autres logiciels comme ça 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 suivantes :

- Python soi-même : du site web Python (http://python.org/). L'installeur est disponible en cliquant "Windows installer", ou ici (http://python.org/ftp/python /2.7/python-2.7.msi) pour Python 2.7.

- La version du bibliothèque wxPython (http://www.wxpython.org/) correspondant à la version de Python -- ça veut dire wxPython pour Python 2.7. En générale, c'est ici (http://downloads.sourceforge.net/wxpython/wxPython2.8-win32-unicode-2.8.11.0-py27.exe).

- DrPython (http://drpython.sourceforge.net/); télécharger seulement le paquet du site Sourceforge ici (http://sourceforge.net/projects/drpython/files /DrPython%20Current/3.11.3/DrPython_3.11.3.zip/download).

Maintenant il faut installer Python et wxPython. Pour le faire, double-cliquez sur les fichiers vous avez téléchargé, 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.

(27)

Please wait while the installer

installs Python 2.7. This may take

several minutes.

Veuillez patienter pendant que

l'installeur installe Python 2.7. Ça

peut prendre plusieurs 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.

Termine l'installeur Python 2.7.

Remerciements spéciale à Mark

Hammond, sans les années

d'experience duquel Python pour

Windows serait toujours Python

pour DOS. Cliquez sur «Finish»

pour quitter l'installeur.

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 à installeur

wxPython2.8-unicode-py27. Ça va

installer wxPython 2.8.11.0

(unicode) pour Python 2.7 sur

votre ordinateur. C'est conseillé

que vous fermez toute autre

application avant de continuer.

Cliquez «Next» pour continuer, ou

«Cancel» pour quitter l'installeur.

[Le plupart de celui-ci est commun

dans les installeurs.]

License agreement. (The full

wxWindows library license.) I

accept the agreement./I do not

accept the agreement.

Accord de la licence [Ceux 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 location destination. Où

devrait wxPython être installe ?

[Le défaut est le meilleur lieu.]

Select components. Which

components should be installed?

Choisissez composants. Quels

composants devrait être installé ?

[Il y a seulement un composant,

qu'il faut installer. Alors, le défaut

et parfait.]

Installing. Please wait while Setup

installs wxPython2.8-unicode-py27

on your computer.

Veuillez patienter pendant que

l'installeur installe

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'installeur wxPython.

L'installer a fini à installer

wxPython sur votre ordinateur.

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 utile.]

wxPython 2.8

Après vous avez fait ça, vous allez voir dans le menu Démarrer un groupe qui s'appelle Python 2.7, et dedans 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.

(28)

Maintenant, dépaquetez le dernier fichier que vous avez téléchargé : DrPython_3.11.3.zip. Vous allez trouver dedans un dossier avec beaucoup de fichiers. Cherchez un qui s'appelle drpython. (Il y aura au moins deux.) Double-cliquez le. Après ça vous allez voir une fenêtre qui paraît un peu comme cela :

Félicitations ! Vous avez réussit à installer DrPython.

N.B. Il doit avoir une façon d'installer DrPython pour qu'on puisse l'ouvrir plus facilement, par exemple en créant un raccourci, mais je n'ai pas encoure trouvé.

Eclipse est un environnement de développement intégré (EDI), générique et extensible (site officiel http://www.eclipse.org).

Initialement prévu pour développer en Java, 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[5] (compilateur non intégré).

Le Python via PyDev[6].

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 :

Name: Nom du plugin

URL: adresse du plugin, ex : http://www.eclipse.org/cdt/downloads.php Bouton Finish, choisir un miroir proche puis continuer l'installation.

Eclipse

Installation de Eclipse

(29)

Eclipse

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

...

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).

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 : print("Hoo hoo World")

sauvegarder (CTRL + S, ou clic sur la disquette, ou menu "File" / "Save")

PyDev

Installation du plugin PyDev

Figure

Tableau 2 : Liste des types prédéfinis en Python
Tableau à trois lignes :

Références

Documents relatifs

Au-delà de la réflexivité dont fait preuve l’enseignante, on peut supposer que le contexte dans lequel elle enseigne, où les exigences de réussite brillante au baccalauréat

Dans  la  droite  lignée  de  son  œuvre  chorégraphique,  le  cinéma  de  Rainer  cultive  un   refus  du  spectaculaire  et  du  voyeurisme  spectatoriel,

En refusant une définition a priori de l'identité, les auteurs ont abordé les sentiments d'appartenance à l'aide de trois séries d'indices : indicateurs, marqueurs et stéréotypes.

[r]

L'un des principes méthodologiques qui pourrait être retenu, c'est de détacher les pratiques socio-spatiales observées dans un quartier des caractéristiques socio-spatiales

نيرخلآا ذيملاتلا لكاشم لح ف اهفم 18 / هعم فوقولاب كلذو قهارملا ذيممتلاب مامتهلاا همكاشم لح ف هكارش او فطمب هعم لماعتلاو همكاشم ف نسلا

L’ exotisme, par-delà ses variantes élitistes ou populaires, est associé d’ une part à la distance géographique et d’ autre part aux aspects attirants ou séduisants de

Pierre, entrepreneur, 9 rue Delaborde, « timbre dans la galerie », « règlement échappement » (1900-1901) ; Société anonyme d’électricité et d’automobiles, Mors, 48 rue