Académique Documents
Professionnel Documents
Culture Documents
Laurent POINTAL
Une introduction Python 3
version 1.6
Bob CORDEAU
Laurent POINTAL
UNE INTRODUCTION
PYTHON 3
version 1.6
En se partageant le savoir ne se divise pas,
il se multiplie.
Remerciements
Meici Taiek Zi~u poui les empiunts ses publications, en paiticuliei nous iemei-
cions les ditions Eyrolles poui leui aimable autoiisation de publiei le dialogue de la
page 88 et les ditions Dunod poui leui aimable autoiisation de publiei les exemples des
pages 80, 81 et 84.
Giand meici Hlene Covur~U poui ses illustiations , les aventuies de Steeven le
Python enchantent les ttes de paiagiaphe.
Meici Ccile Tvrvi~N poui son aide la tiaduction du Zen de Python.
Une pense spciale poui Stphane B~v1uo1 son enseignement didactique aupies des
tudiants et son engagement enveis ses collegues ne seiont pas oublis.
Enn il faudiait saluei tous les auteuis butins sui lnteinet
Table des matires
1 Introduction 1
1.1 Piincipales caiactiistiques du langage Python . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Matiiel et logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Loidinateui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2 Deux soites de piogiammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Les langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.1 Des langages de diients niveaux . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3.2 Bief histoiique des langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Pioduction des piogiammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4.1 Deux techniques de pioduction des piogiammes . . . . . . . . . . . . . . . . . . . 3
1.4.2 Technique de pioduction de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4.3 La constiuction des piogiammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1. Algoiithme et piogiamme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1..1 Dnitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1..2 La pisentation des piogiammes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1. Les implmentations de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 La calculatrice Python 5
2.1 Les modes dexcution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Les deux modes dexcution dun code Python . . . . . . . . . . . . . . . . . . . . .
2.2 ldenticateuis et mots cls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 ldenticateuis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.2 Style de nommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.3 Les mots iseivs de Python 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Notion dexpiession . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Les types de donnes entieis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Le type int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.2 Le type bool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2. Les types de donnes ouants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2..1 Le type float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2..2 Le type complex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. Vaiiables et aectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2..1 Les vaiiables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2..2 Laectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2..3 Aectei nest pas compaiei ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2..4 Les vaiiantes de laectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.. Les aectations (explications giaphiques) . . . . . . . . . . . . . . . . . . . . . . . 10
2. Les chaines de caiacteies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2..1 Les chaines de caiacteies pisentation . . . . . . . . . . . . . . . . . . . . . . . . 11
2..2 Les chaines de caiacteies opiations . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2..3 Les chaines de caiacteies fonctions vs mthodes . . . . . . . . . . . . . . . . . . . 12
2..4 Mthodes de test de ltat dune chaine . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.. Mthodes ietouinant une nouvelle chaine . . . . . . . . . . . . . . . . . . . . . . . 13
2.. Les chaines de caiacteies indexation simple . . . . . . . . . . . . . . . . . . . . . 13
2.. Extiaction de sous-chaines (ou tianches ) . . . . . . . . . . . . . . . . . . . . . . 14
2.8 Les donnes binaiies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.9 Les enties-soities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
v
vi TABLE DES MATIRES
2.9.1 Les enties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.9.2 Les soities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.9.3 Les squences dchappement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
3 Le contrle du ux dinstructions 17
3.1 Les instiuctions composes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
3.2 Choisii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 Choisii if - [elif] - [else] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2 Syntaxe compacte dune alteinative . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3 Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3.1 Rptei while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3.2 Paicouiii for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Ruptuies de squences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4.1 lnteiiompie une boucle break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4.2 Couit-ciicuitei une boucle continue . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4.3 Utilisation avance des boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4.4 Tiaitement des eiieuis les exceptions . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Les conteneurs standard 23
4.1 Les squences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.1 Qest-ce quune squence ` . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.1 Dnition, syntaxe et exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.2 lnitialisations et tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.3 Mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.4 Manipulation des tianches (ou sous-chaines) . . . . . . . . . . . . . . . . . . . 24
4.2. Des squences de squences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4.3 Les tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4.4 Retoui sui les ifiences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4.4.1 Complment giaphique sui lassignation . . . . . . . . . . . . . . . . . . . . . . . . 2
4. Les tableaux associatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4..1 Les types tableaux associatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4..2 Les dictionnaiies (dict) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4. Les ensembles (set) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4. Les chieis textuels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4..1 Les chieis intioduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4..2 Gestion des chieis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.8 ltiei sui les conteneuis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.9 Lachage foimat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5 Fonctions et espaces de noms 33
.1 Dnition et syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
.2 Passage des aiguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.2.1 Mcanisme gnial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.2.2 Un ou plusieuis paiameties, pas de ietoui . . . . . . . . . . . . . . . . . . . . . . . 3
.2.3 Un ou plusieuis paiameties, utilisation du ietoui . . . . . . . . . . . . . . . . . . . 3
.2.4 Passage dune fonction en paiametie . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.2. Paiameties avec valeui pai dfaut . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.2. Nombie daiguments aibitiaiie passage dun tuple de valeuis . . . . . . . . . . . . 3
.2. Nombie daiguments aibitiaiie passage dun dictionnaiie . . . . . . . . . . . . . . 3
.3 Espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.3.1 Poite des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
.3.2 Rsolution des noms iegle LGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
TABLE DES MATIRES vii
6 Modules et paages 39
.1 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
.1.1 lmpoit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
.1.2 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
.2 Bibliotheque standaid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
.2.1 La bibliotheque standaid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
.3 Bibliotheques tieices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
.3.1 Une giande diveisit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
.3.2 Un exemple la bibliotheque Unum . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
.4 Paquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
7 La programmation Oriente Objet 47
.1 Teiminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
.1.1 Notations UML de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
.2 Classes et instanciation dobjets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
.2.1 Linstiuction class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
.2.2 Linstanciation et ses auiibuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
.2.3 Retoui sui les espaces de noms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
.3 Mthodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0
.4 Mthodes spciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0
.4.1 Linitialisateui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0
.4.2 Suichaige des opiateuis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0
.4.3 Exemple de suichaige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
. Hiitage et polymoiphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
..1 Hiitage et polymoiphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
..2 Exemple dhiitage et de polymoiphisme . . . . . . . . . . . . . . . . . . . . . . . . 2
. Notion de conception oiiente objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
..1 Association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
..2 Diivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
. Un exemple complet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
8 La programmation oriente objet graphique 57
8.1 Piogiammes pilots pai des vnements . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 La bibliotheque tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
8.2.1 Pisentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
8.2.2 Les widgets de tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
8.2.3 Le positionnement des widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
8.3 Deux exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
8.3.1 tkPhone, un exemple sans menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
8.3.2 IDLE, un exemple avec menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
9 Teniques avances 65
9.1 Techniques piocduiales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.1 Le pouvoii de lintiospection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.1.2 Gestionnaiie de contexte (ou bloc gaid) . . . . . . . . . . . . . . . . . . . . . . .
9.1.3 Utilisei un dictionnaiie poui lancei des fonctions ou des mthodes . . . . . . . . .
9.1.4 Les fonctions icuisives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
9.1. Les listes dnies en compihension . . . . . . . . . . . . . . . . . . . . . . . . . . 9
9.1. Les dictionnaiies dnis en compihension . . . . . . . . . . . . . . . . . . . . . . 0
9.1. Les ensembles dnis en compihension . . . . . . . . . . . . . . . . . . . . . . . . 0
9.1.8 Les gniateuis et les expiessions gniatiices . . . . . . . . . . . . . . . . . . . . 0
9.1.9 Les fonctions incluses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
9.1.10 Les dcoiateuis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
9.2 Techniques objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
9.2.1 lunctoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
9.2.2 Les accesseuis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
9.2.3 Le duck typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3 Techniques fonctionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3.1 Diiective lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
viii TABLE DES MATIRES
9.3.2 Les fonctions map, filter et reduce . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
9.3.3 Les applications paitielles de fonctions . . . . . . . . . . . . . . . . . . . . . . . . . 8
9.4 Les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
9.4.1 Tests unitaiies et tests fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
9.4.2 Module unittest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9. La documentation des souices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9..1 Le foimat ieST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9..2 Le module doctest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
9..3 Le dveloppement diiig pai la documentation . . . . . . . . . . . . . . . . . . . . 84
A Interlude 87
B Passer du problme au programme 91
C Jeux de caractres et encodage 93
D Les bases arithmtiques 95
E Exercices corrigs 97
F Glossaire 107
Webographie 115
Bibliographie 116
Memento Python 3 118
Index 120
Avant-propos
qui sadresse ce cours ?
Utilis loiigine pai les tudiants de Mesuies Physiques de llUT dOisay, ce couis sadiesse plus
gnialement toute peisonne dsiieuse dappiendie Python en tant que piemiei langage de piogiam-
mation.
Cette introduction reposent sur quelques partis pris :
le choix du langage Python veision 3. La veision actuelle abolit la compatibilit descendante
1
dans
le but dliminei les faiblesses oiiginelles du langage ,
le choix de logiciels libies ou giatuits
des diteuis spcialiss comme ipython, spydei ou Wingwaie,
des outils open source de pioduction de documents L
A
T
E
X
2
, lnkscape.
et sui labondance des iessouices et de la documentation sui le Web '
Version 1.6 ?
Suivant lexemple de Donald KNU1u, linventeui du logiciel de composition T
E
X, le numio de veision
de ce document, au lieu dtie 1 , est la 1
ie
dcimale dun nombie clebie
3
.
Pour joindre les auteurs :
k bob.cordeau@laposte.net
k laurent.pointal@limsi.fr
Sauf mention contiaiie, le contenu de cet ouviage est publi sous la licence
Cieative Commons BY-NC-SA-3.0
La copie de cet ouviage est autoiise sous iseive du iespect des conditions de la licence
creativecommons.org/licenses/by/3.0/fr/
1. Cest une giave dcision, muiement ichie Un langage qui bouge peu peimet une industiie qui bouge beaucoup (Bei-
tiand Mrvrv). avec la siie des veisions 2.x
2. dans la distiibution T
E
XLive associ lditeui Kile poui GNU/Linux et la distiibution MikT
E
Xassoci lditeui T
E
XnicCentei
poui Windows.
3. =
1+
5
2
, le nombie doi.
Cu~vi1vr 1
Introduction linformatique
Ce piemiei chapitie intioduit les giandes caiactiistiques du langage Python, ieplace Py-
thon dans lhistoiie des langages infoimatiques, donne les paiticulaiits de pioduction des
piogiammes, dni la notion si impoitante dalgoiithme et conclut sui les diveis implmen-
tations disponibles.
1.1 Principales caractristiques du langage Python
Historique
1991 Guido van RossUx tiavaille aux Pays-Bas au CWl
1
sui le piojet AMOEBA (un systeme
dexploitation distiibu). ll conoit Python ( paitii du langage ABC) et publie la veision 0.9.0 sui
un foium Usenet
199 soitie de Numerical Python
2001 naissance de la PSl (Python Sofwaie lundation)
Les veisions se succedent. . . Un giand choix de modules disponibles, des colloques annuels sont
oiganiss, Python est enseign dans plusieuis univeisits et est utilis en entiepiise. . .
lin 2008 soities simultanes de Python 2. et de Python 3.0
2013 veisions en couis v2..3 et v3.3.0
Langage Open Source
Licence Open Souice CNRl, compatible GPL, mais sans la iestiiction copyle. Python est libie et
giatuit mme poui les usages commeiciaux
GvR (Guido van RossUx) est le BDlL (dictateui bnvole vie ')
lmpoitante communaut de dveloppeuis
Nombieux outils standaid disponibles Baeries included
Travail interactif
Nombieux inteipiteuis inteiactifs disponibles
lmpoitantes documentations en ligne
Dveloppement iapide et incimentiel
Tests et dbogage outills
Analyse inteiactive de donnes
Langage interprt rapide
lnteipitation du bytecode compil
De nombieux modules sont disponibles paitii de bibliotheques optimises (souvent ciites en
C ou C)
Simplicit du langage (cf. Zen of Python, annexe A, p. 8)
Syntaxe claiie et cohiente
lndentation signicative
Gestion automatique de la mmoiie (garbage collector)
Typage dynamique foit pas de dclaiation
1. Centium vooi Wiskunde en linfoimatica.
2 Introduction
Orientation objet
Modele objet puissant mais pas obligatoiie
Stiuctuiation multichiei ties facile des applications facilite les modications et les extensions
Les classes, les fonctions et les mthodes sont des objets dits de premire classe. Ces objets sont
tiaits comme tous les auties (on peut les aectei, les passei en paiametie)
Ouverture au monde
lnteifaable avec C/C/lORTRAN
Langage de sciipt de plusieuis applications impoitantes
Excellente poitabilit
Disponibilit de bibliothques
Plusieuis millieis de packages sont disponibles dans tous les domaines
Remarque
La notion mathmatique de rel est une notion idale impossible meuie en uvie en infoimatique.
On utilise une iepisentation inteine peimeuant de dplacei la viigule giace une valeui dexposant
vaiiable. On nommeia ces nombies des oants.
2.5.1 Le type float
Un float est not avec un point dcimal (jamais avec une viigule) ou en notation exponentielle avec
un e symbolisant le 10 puissance suivi des chiies de lexposant
2.718
.02
-1.6e-19
6.023e23
1. Dapies Geoige Booir, logicien et mathmaticien du 19
e
siecle.
2.6 Variables et aectation 9
Les ouants suppoitent les mmes opiations que les entieis.
lls ont une picision nie limit.
Limpoit du module math autoiise toutes les opiations mathmatiques usuelles. Pai exemple
>>> import math
>>> print(math.sin(math.pi/4))
0.707106781187
>>>> print(math.degrees(math.pi))
180.0
>>>> print(math.factorial(9))
362880
>>> print(math.log(1024, 2))
10.0
2.5.2 Le type complex
Les complexes sont ciits en notation caitsienne foime de deux ouants.
La paitie imaginaiie est suxe pai j
>>> print(1j)
1j
>>> print((2+3j) + (4-7j))
(6-4j)
>>> print((9+5j).real)
9.0
>>> print((9+5j).imag)
5.0
>>> print((abs(3+4j))) # module
5.0
Un module mathmatique spcique (cmath) leui est iseiv
>>> import cmath
>>> print(cmath.phase(-1 + 0j))
3.14159265359
>>> print(cmath.polar(3 + 4j))
(5.0, 0.9272952180016122)
>>> print(cmath.rect(1., cmath.pi/4))
(0.707106781187+0.707106781187j)
2.6 Variables et aectation
2.6.1 Les variables
Des que lon possede des types de donnes, on a besoin des variables poui stockei les donnes.
En ialit, Python noie pas la notion de vaiiable, mais plutot celle de rfrence dobjet. Tant que lobjet
nest pas modiable (comme les entieis, les ouants, les chaines etc.), il ny a pas de diience notable
entie les deux notions. On veiia que la situation change dans le cas des objets modiables. . .
Dnition
b
Une vaiiable est un identicateui associ une valeui. En Python, cest une ifience dobjet.
2.6.2 Laectation
Dnition
b
On aecte une vaiiable pai une valeui en utilisant le signe (qui na rien voir avec lgalit en
math '). Dans une aectation, le membie de gauche ieoit le membie de dioite ce qui ncessite dvaluei
la valeui coiiespondant au membie de dioite avant de laectei au membie de gauche.
a = 2 # prononcez : a "reoit" 2
b = 7.2 * math.log(math.e / 45.12) - 2*math.pi
c = b ** a
10 La calculatrice Python
Remarque
La notation [xxx] indique un lment optionnel que lon peut donc omeuie lois de lutilisation de la
mthode.
La chaine s = cHAise basSe nous seiviia de test poui toutes les mthodes de ceue section.
isupper() et islower() ietouinent True si la chaine ne contient iespectivement que des majuscu-
les/minuscules
>>> s.isupper()
False
istitle() ietouine True si seule la piemieie leuie de chaque mot de la chaine est en majuscule
>>> s.istitle()
False
isalnum(), isalpha(), isdigit() et isspace() ietouinent True si la chaine ne contient iespective-
ment que des caiacteies alphanumiiques, alphabtiques, numiiques ou des espaces
>>> s.isalpha()
True
>>> s.isdigit()
False
startswith(prefix[, start[, stop]]) et endswith(suffix[, start[, stop]]) testent si la sous-
chaine dnie pai start et stop commence iespectivement pai prefix ou nit pai suffix
>>> s.startswith('cH')
True
>>> s.endswith('aSSe')
False
2.7 Les chanes de caractres 13
2.7.5 Mthodes retournant une nouvelle ane
lower(), upper(), capitalize() et swapcase() ietouinent iespectivement une chaine en minuscule,
en majuscule, en minuscule commenant pai une majuscule, ou en casse inveise
>>> s.lower()
chaise basse
>>> s.upper()
CHAISE BASSE
>>> s.capitalize()
Chaise basse
>>> s.swapcase()
ChaISE BASsE
expandtabs([tabsize]) iemplace les tabulations pai tabsize espaces (8 pai dfaut).
center(width[, fillchar]), ljust(width[, fillchar]) et
rjust(width[, fillchar]) ietouinent iespectivement une chaine centie, justie gauche ou
dioite, complte pai le caiacteie fillchar (ou pai lespace pai dfaut)
>>> s.center(20, '-')
----cHAise basSe----
>>> s.rjust(20, '@')
@@@@@@@@cHAise basSe
zfill(width) complete ch gauche avec des 0 jusqu une longueui maximale de width
>>> s.zfill(20)
00000000cHAise basSe
strip([chars]), lstrip([chars]) et rstrip([chars]) suppiiment toutes les combinaisons de chars
(ou lespace pai dfaut) iespectivement au dbut et en n, au dbut, ou en n dune chaine
>>> s.strip('ce')
HAise basS
find(sub[, start[, stop]]) ienvoie lindex de la chaine sub dans la sous-chaine start stop,
sinon ienvoie -1. rfind() eectue le mme tiavail en commenant pai la n. index() et rindex()
font de mme mais pioduisent une eiieui (exception) si la chaine nest pas tiouve
>>> s.find('se b')
4
replace(old[, new[, count]]) iemplace count instances (toutes pai dfaut) de old pai new
>>> s.replace('HA', 'ha')
chaise basSe
split(seps[, maxsplit]) dcoupe la chaine en maxsplit moiceaux (tous pai dfaut). rsplit() ef-
fectue la mme chose en commenant pai la n et striplines() eectue ce tiavail avec les caiacteies
de n de ligne
>>> s.split()
['cHAise', 'basSe']
join(seq) concatene les chaines du conteneui seq en inteicalant la chaine sui laquelle la mthode
est applique
>>> "**".join(['cHAise', 'basSe'])
cHAise**basSe
2.7.6 Les anes de caractres : indexation simple
Poui indexei une chaine, on utilise lopiateui [] dans lequel lindex, un entiei sign qui commence
0 indique la position dun caiacteie
>>> s = "Rayon X" # len(s) ==> 7
>>> s[0]
'R'
>>> s[2]
'y'
>>> s[-1]
'X'
>>> s[-3]
'n'
14 La calculatrice Python
licUvr 2.3 Lindexation dune chaine.
2.7.7 Extraction de sous-anes (ou tranes )
Dnition
b
Extiaction de sous-chaines lopiateui [] avec 2 ou 3 index spais pai le caiacteie : peimet
dextiaiie des sous-chaines (ou tianches) dune chaine.
licUvr 2.4 Extiaction de sous-chaines.
Pai exemple
>>> s = "Rayon X" # len(s) ==> 7
>>> s[1:4] # de l'index 1 compris 4 non compris
'ayo'
>>> s[-2:] # de l'index -2 compris la fin
' X'
>>> s[:3] # du dbut l'index 3 non compris
'Ray'
>>> s[3:] # de l'index 3 compris la fin
'on X'
>>> s[::2] # du dbut la fin, de 2 en 2
'RynX'
2.8 Les donnes binaires
Les types binaires
Python 3 piopose deux types de donnes binaiies bytes (non modiable) et bytearray (modiable).
>>> mot = 'Animal' # type str
>>> b_mot = b"Animal" # type bytes
>>> bMot = bytearray(b_mot) # type bytearray
Une donne binaiie contient une suite de zio ou plusieuis octets, cest--diie dentieis non signs sui
8 bits (compiis dans linteivalle [02]). Ces types la C sont bien adapts poui stockei de giandes
quantits de donnes. De plus Python fouinit des moyens de manipulation ecaces de ces types.
Les deux types sont assez semblables au type str et possedent la plupait de ses mthodes. Le type
modiable bytearray possede des mthodes communes au type list.
2.9 Les entres-sorties 1
2.9 Les entres-sorties
Lutilisateui a besoin dinteiagii avec le piogiamme ( lig. 2.). En mode console (on veiia les
inteifaces giaphiques ultiieuiement), on doit pouvoii saisir ou entrer des infoimations, ce qui est gnia-
lement fait depuis une lecture au claviei. lnveisement, on doit pouvoii acher ou sortir des infoimations,
ce qui coiiespond gnialement une criture sui lcian.
(a) Entie (b) Soitie
licUvr 2. Les enties-soities.
2.9.1 Les entres
ll sagit de ialisei une saisie au claviei la fonction standaid input() inteiiompt le piogiamme, ache
une ventuelle invite lcian et auend que lutilisateui entie une donne au claviei (ache lcian)
et la valide pai
Entre .
La fonction standaid input() eectue toujouis une saisie en mode texte (la valeui ietouine est une
chaine) dont on peut ensuite changei le type (on dit aussi transtyper)
>>> f1 = input("Entrez un flottant : ")
Entrez un flottant : 12.345
>>> type(f1)
<class 'str'>
>>> f2 = input("Entrez un autre flottant : ")
Entrez un autre flottant : 12.345
>>> type(f2)
<class 'float'>
2.9.2 Les sorties
En mode calculatiice , Python lit-value-ache (lig. 2.1), mais la fonction print() ieste indispen-
sable aux achages dans les sciipts. Elle se chaige dachei la iepisentation textuelle des infoimations
qui lui sont donnes en paiametie, en plaant un blanc spaiateui entie deux infoimations, et en faisant
un ietoui la ligne la n de lachage (le spaiateui et la n de ligne peuvent tie modis)
>>> a, b = 2, 5
>>> print(a, b)
2 5
>>> print("Somme :", a + b)
Somme : 7
>>>> print(a - b, "est la diffrence")
-3 est la diffrence
>>> print("Le produit de", a, "par", b, "vaut :", a * b)
Le produit de 2 par 5 vaut : 10
>>> print()
>>> print("On a <", 2**32, "> cas !", sep="###")
On a <###4294967296###> cas !
>>> # pour afficher autre chose qu'un espace en fin de ligne :
>>> print(a, end="@"); print(b)
2@3
1 La calculatrice Python
2.9.3 Les squences dappement
A lintiieui dune chaine, le caiacteie antislash (\) peimet de donnei une signication spciale
ceitaines squences de caiacteies
Squence Signication
\saut_ligne saut de ligne ignoi
\\ ache un antislash
\' apostiophe
\" guillemet
\a sonneiie (bip)
\b ietoui aiiieie
\f saut de page
\n saut de ligne
\r ietoui en dbut de ligne
\t tabulation hoiizontale
\v tabulation veiticale
\N{nom} caiacteie sous foime de code Unicode nomm
\uhhhh caiacteie sous foime de code Unicode 1 bits
\Uhhhhhhhh caiacteie sous foime de code Unicode 32 bits
\ooo caiacteie sous foime de code octal
\xhh caiacteie sous foime de code hexadcimal
Exemples
>>> print("\N{pound sign} \u00A \U000000A3")
2 5
>>> print("d \144 \x64")
d d d
>>> print(r"d \144 \x64")
s \144 \x64
Cu~vi1vr 3
Le contrle du ux dinstructions
Un sciipt Python est foim dune suite dinstiuctions excutes en squence de haut en bas
a
.
Chaque ligne dinstiuctions est foime dune ou plusieuis lignes physiques qui peuvent tie
continues pai un antislash \ ou un caiacteie ouviant [({ pas encoie feim.
Ceue excution en squence peut tie modie poui choisir ou rpter des poitions de code,
ce que lon appelle instiuctions composes.
a. On peut meuie plusieuis instiuctions sui la mme ligne en les spaiant avec un ; mais, pai
soucis de lisibilit, cest dconseill.
3.1 Les instructions composes
Poui identiei les instiuctions composes, Python utilise la notion dindentation signicative, cest--
diie visuelle. Ceue syntaxe lgeie met en lumieie un bloc dinstiuctions et peimet damlioiei giandement
la pisentation des piogiammes souices.
Syntaxe
Lopiateui teinaiie est une expression, laquelle coiiespond une valeui que lon peut utilisei dans
une aectation ou un calcul.
3.3 Boucles
Notions de conteneur et ditrable
De faon gniale, nous paileions de conteneur poui dsignei un type de
donnes peimeuant de stockei un ensemble dauties donnes, en ayant
ou non, suivant les types, une notion doidie entie ces donnes.
Nous paileions aussi ditrable poui dsignei un conteneui que lon peut
paicouiii lment pai lment.
Poui paicouiii ces conteneuis, nous nous seiviions paifois de range()
qui fouinit un moyen commode poui gniei une liste de valeuis.
Pai exemple
>>> uneListe = list(range(6))
>>> uneListe
[0, 1, 2, 3, 4, 5]
Ces notions seiont tudies plus en dtail au chapitie 4, p. 23.
Python piopose deux boucles.
3.3.1 Rpter : while
Rptei une poition de code tant quune expiession boolenne est viaie
>>> x, cpt = 257, 0
>>> sauve = x
>>> while x > 1:
... x //= 2 # division avec troncature
... cpt += 1 # incrmentation
...
>>> print("Approximation de log2 de", sauve, "est :", cpt)
Approximation de log2 de 257 est : 8
Utilisation classique la saisie ltre dune valeui numiique (on doit prciser le type cai on se iappelle
que input() saisit une chaine)
n = int(input('Entrez un entier [1 .. 10] : '))
while not(1 <= n <= 10):
n = int(input('Entrez un entier [1 .. 10], S.V.P. : '))
3.3.2 Parcourir : for
Paicouiii un itiable
>>> for lettre in "ciao":
... print(lettre)
...
c
i
a
o
>>> for x in [2, 'a', 3.14]:
... print(x)
...
2
a
3.14
>>> for i in range(5):
20 Le contrle du ux dinstructions
... print(i)
...
0
1
2
3
4
>>>
>>> nb_voyelles = 0
>>> for lettre in "Python est un langage tres sympa":
... if lettre in "aeiouy":
... nb_voyelles = nb_voyelles + 1
...
>>> nb_voyelles
10
3.4 Ruptures de squences
3.4.1 Interrompre une boucle : break
Soit immdiatement de la boucle for ou while en couis contenant linstiuction
>>> for x in range(1, 11):
... if x == 5:
... break
... print(x, end=" ")
...
1 2 3 4
>>> print("Boucle interrompue pour x =", x)
Boucle interrompue pour x = 5
3.4.2 Court-circuiter une boucle : continue
Passe immdiatement litiation suivante de la boucle for ou while en couis contenant linstiuction ,
iepiend la ligne de len-tte de la boucle
>>> for x in range(1, 11):
... if x == 5:
... continue
... print(x, end=" ")
...
1 2 3 4 6 7 8 9 10
>>> # la boucle a saut la valeur 5
3.4.3 Utilisation avance des boucles
La syntaxe complete des boucles autoiise des utilisations plus iaies.
while - else
Les boucles while et for peuvent possdei une clause else qui ne sexcute que si la boucle se termine
normalement, cest--diie sans inteiiuption
y = int(input("Entrez un entier positif : "))
while not(y > 0):
y = int(input('Entrez un entier positif, S.V.P. : '))
x = y // 2
while x > 1:
if y % x == 0:
print(x, "a pour facteur", y)
break # voici l'interruption !
x -= 1
else:
print(y, "est premier.")
3.4 Ruptures de squences 21
for - else
Un exemple avec le paicouis dune liste
une_sequence = [2, 5, 9, 7, 11]
cible = int(input("Entrez un entier : "))
for i in une_sequence:
if i == cible:
sauve = i
break # voici l'interruption !
else:
print(cible, "n'est pas dans", une_sequence)
sauve = None
# sauve vaut donc cible ou None :
print("On obtient sauve =", sauve)
3.4.4 Traitement des erreurs les exceptions
An de iendie les applications plus iobustes, il est ncessaiie de giei les eiieuis dexcution des
paities sensibles du code.
Le mcanisme des exceptions spaie dun cot la squence dinstiuctions excutei loisque tout se
passe bien et, dun autie cot, une ou plusieuis squences dinstiuctions excutei en cas deiieui.
Loisquune eiieui suivient, un objet exception est pass au mcanisme de piopagation des exceptions,
et lexcution est tiansfie la squence de tiaitement ad hoc.
Le mcanisme seectue en deux phases
la leve dexception lois de la dtection deiieui ,
le traitement appiopii.
Syntaxe
raise, sans valeui, dans un bloc except, peimet de ne pas bloquei une exception, de la piopagei.
Cu~vi1vr 4
Les conteneurs standard
Le chapitie 2 a pisent les types de donnes simples, mais Python oie beaucoup plus les
conteneuis .
De faon gniale, un conteneui est un objet composite destin contenii dauties objets. Ce
chapitie dtaille les squences, les tableaux associatifs, les ensembles et les chieis textuels.
4.1 Les squences
4.1.1 est-ce quune squence ?
Dnition
b
Une squence est un conteneui oidonn dlments indexs pai des entieis indiquant leui position
dans le conteneui.
Python dispose de tiois types pidnis de squences
les chaines (vues picdemment) ,
les listes ,
les tuples
1
.
4.2 Les listes
4.2.1 Dnition, syntaxe et exemples
Dnition
b
Une liste est une collection oidonne et modiable dlments ventuellement htiogenes.
Syntaxe
Si on veut suppiimei, iemplacei ou insiei plusieurs lments dune liste, il faut indiquei une tianche
(cf. 2.., p. 14) dans le membie de gauche dune aectation et fouinii une liste dans le membie de dioite.
>>> mots = ['jambon', 'sel', 'miel', 'confiture', 'beurre']
>>> mots[2:4] = [] # effacement par affectation d'une liste vide
>>> mots
['jambon', 'sel', 'beurre']
>>> mots[1:3] = ['salade']
>>> mots
['jambon', 'salade']
>>> mots[1:] = ['mayonnaise', 'poulet', 'tomate']
>>> mots
['jambon', 'mayonnaise', 'poulet', 'tomate']
>>> mots[2:2] = ['miel'] # insertion en 3 position
>>> mots
['jambon', 'mayonnaise', 'miel', 'poulet', 'tomate']
4.3 Les tuples 2
4.2.5 Des squences de squences
Les squences, comme du ieste les auties conteneuis, peuvent tie imbiiqus.
Pai exemple
>>> liste_1 = [1, 2, 3]
>>> listes = [liste_1, [4, 5], "abcd"]
>>>
>>> for liste in listes:
... for elem in liste:
... print(elem)
... print()
...
1
2
3
4
5
a
b
c
d
4.3 Les tuples
Dnition
b
Un tuple est une collection oidonne et non modiable dlments ventuellement htiogenes.
Syntaxe
Passage pai aectation chaque aigument de la dnition de la fonction coiiespond, dans lordre, un
paiametie de lappel. La coiiespondance se fait pai aectation des paiameties aux aiguments.
licUvr .2 Passage des aiguments pai aectation des paiameties aux aiguments.
5.2.2 Un ou plusieurs paramtres, pas de retour
Exemple sans linstiuction return, ce quon appelle souvent une procdure
1
. Dans ce cas la fonction
ienvoie implicitement la valeui None
def table(base, debut, fin):
"""Affiche la table de multiplication des <base> de <debut> <fin>."""
n = debut
while n <= fin:
print(n, 'x', base, '=', n * base)
n += 1
# exemple d'appel :
table(7, 2, 8)
# 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 8 x 7 = 56
# autre exemple du mme appel, mais en nommant les paramtres ;
table(base=7, debut=2, fin=8)
5.2.3 Un ou plusieurs paramtres, utilisation du retour
Exemple avec utilisation dun return unique
from math import pi
def cube(x):
"""Retourne le cube de largument."""
return x**3
def volumeSphere(r):
"""Retourne le volume d'une sphre de rayon <r>;"""
return 4.0 * pi * cube(r) / 3.0
# Saisie du rayon et affichage du volume
rayon = float(input('Rayon : '))
print("Volume de la sphre =", volumeSphere(rayon))
1. Une fonction vaut quelque chose, une piocduie fait quelque chose.
3 Fonctions et espaces de noms
Exemple avec utilisation dun return multiple
import math
def surfaceVolumeSphere(r):
surf = 4.0 * math.pi * r**2
vol = surf * r/3
return surf, vol
# programme principal
rayon = float(input('Rayon : '))
s, v = surfaceVolumeSphere(rayon)
print("Sphre de surface {:g} et de volume {:g}".format(s, v))
5.2.4 Passage dune fonction en paramtre
Puisque en Python une vaiiable peut ifiencei une fonction, on peut tiansmeuie une fonction comme
paiametie
>>> def f(x):
... return 2*x+1
...
>>> def g(x):
... return x//2
...
>>> def h(fonc, x):
... return fonc(x)
...
>>>
>>> h(f, 3)
7
>>> h(g, 4)
2
5.2.5 Paramtres avec valeur par dfaut
ll est possible de spciei, lois de la dclaiation, des valeuis pai dfaut utilisei poui les aiguments.
Cela peimet, lois de lappel, de ne pas avoii spciei les paiameties coiiespondants.
ll est possible, en combinant les valeuis pai dfaut et le nommage des paiameties, de nindiquei
lappel que les paiameties dont on dsiie modiei la valeui de laigument. ll est pai contie ncessaiie de
iegioupei tous les paiameties optionnels la n de la liste des paiameties.
>>> def accueil(nom, prenom, depart="MP", semestre="S2"):
... print(prenom, nom, "Dpartement", depart, "semestre", semestre)
...
>>> accueil("Student", "Joe")
Joe Student Dpartement MP semestre S2
>>> accueil("Student", "Eve", "Info")
Eve Student Dpartement Info semestre S2
>>> accueil("Student", "Steph", semestre="S3")
Steph Student Dpartement MP semestre S3
Attention
j
On utilise de pifience des valeuis pai dfaut non modiables (int, float, str, bool, tuple) cai la
modication dun paiametie pai un piemiei appel est visible les fois suivantes.
Si on a besoin dune valeui pai dfaut qui soit modiable (list, dict), on utilise la valeui pidnie
None et on fait un test au dbut de la fonction
def maFonction(liste=None):
if liste is None:
liste = [1, 3]
5.3 Espaces de noms 3
5.2.6 Nombre darguments arbitraire passage dun tuple de valeurs
ll est possible dautoiisei le passage dun nombie aibitiaiie daiguments en utilisant la notation dun
aigument nal *nom. Les paiameties suinumiaiies sont alois tiansmis sous la foime dun tuple aect
cet aigument (que lon appelle gnialement args).
def somme(*args):
"""Renvoie la somme du tuple <args>."""
resultat = 0
for nombre in args:
resultat += nombre
return resultat
# Exemples d'appel :
print(somme(23)) # 23
print(somme(23, 42, 13)) # 78
Attention
j
Si la fonction possede plusieuis aiguments, le tuple est en dernire position.
Rcipioquement il est aussi possible de passei un tuple (en fait une squence) lappel qui seia d-
compress en une liste de paiameties dune fonction classique
def somme(a, b, c):
return a+b+c
# Exemple d'appel :
elements = (2, 4, 6)
print(somme(*elements)) # 12
5.2.7 Nombre darguments arbitraire : passage dun dictionnaire
De la mme faon, il est possible dautoiisei le passage dun nombie aibitiaiie daiguments nomms en
plus de ceux pivus lois de la dnition en utilisant la notation dun aigument nal **nom. Les paiameties
suinumiaiies nomms sont alois tiansmis sous la foime dun dictionnaiie aect cet aigument (que
lon appelle gnialement kwargs poui keyword args).
Rcipioquement il est aussi possible de passei un dictionnaiie lappel dune fonction, qui seia d-
compiess et associ aux paiameties nomms de la fonction.
def unDict(**kwargs):
return kwargs
# Exemples d'appels
## par des paramtres nomms :
print(unDict(a=23, b=42)) # {'a': 23, 'b': 42}
## en fournissant un dictionnaire :
mots = {'d': 85, 'e': 14, 'f':9}
print(unDict(**mots)) # {'e': 14, 'd': 85, 'f': 9}
Attention
j
Si la fonction possede plusieuis aiguments, le dictionnaiie est en toute dernire position (apies un
ventuel tuple).
5.3 Espaces de noms
5.3.1 Porte des objets
Remarque
Poite les noms des objets sont cis lois de leui premire aectation, mais ne sont visibles que dans
ceitaines igions de la mmoiie.
On distingue
La porte globale celle du module ou du chiei sciipt en couis. Un dictionnaiie geie les objets globaux
linstiuction globals() fouinit les couples variable :valeur ,
La porte locale les objets inteines aux fonctions sont locaux. Les objets globaux ne sont pas modiables
dans les poites locales. Linstiuction locals() fouinit les couples variable :valeur.
38 Fonctions et espaces de noms
5.3.2 Rsolution des noms : rgle LGI
La iecheiche des noms est daboid locale (L), puis globale (G), enn inteine (l) (lig. .3)
licUvr .3 Regle LGl
Exemples de porte
Pai dfaut, toute vaiiable utilise dans le coips dune fonction est locale celle-ci. Si une fonction a
besoin de modiei ceitaines vaiiables globales, la piemieie instiuction de ceue fonction doit tie
global <identificateurs>
Pai exemple
# x et fonc sont affects dans le module : globaux
def fonc(y): # y et z sont affects dans fonc : locaux
global x # permet de modifier x ligne suivante
x += 2
z = x + y
return z
x = 99
print(fonc(1)) # 102
print(x) # 101
# x et fonc sont affects dans le module : globaux
def fonc(y): # y et z sont affects dans fonc : locaux
# dans fonc : porte locale
z = x + y
return z
x = 99
print(fonc(1)) # 100
print(x) # 99
# x et fonc sont affects dans le module : globaux
def fonc(y): # y, x et z sont affects dans fonc : locaux
x = 3 # ce nouvel x est local et masque le x global
z = x + y
return z
x = 99
print(fonc(1)) # 4
print(x) # 99
Cu~vi1vr
Modules et paages
Un piogiamme Python est gnialement compos de plusieuis chieis souices, appels
modules. Leui nom est sux .py
a
.
Sils sont coiiectement cods les modules doivent tie indpendants les uns des auties poui
tie iutiliss la demande dans dauties piogiammes.
Ce chapitie explique comment codei et impoitei des modules dans un autie.
Nous veiions galement la notion de package qui peimet de gioupei plusieuis modules.
a. On tiouve aussi occasionnellement des modules .pyw sous Windows.
6.1 Modules
Dnition
b
Module chiei sciipt Python peimeuant de dnii des lements de piogiamme iutilisables. Ce
mcanisme peimet dlaboiei ecacement des bibliotheques de fonctions ou de classes.
Avantages des modules
iutilisation du code ,
la documentation et les tests peuvent tie intgis au module ,
ialisation de seivices ou de donnes paitags ,
paitition de lespace de noms du systeme.
6.1.1 Import
Linstiuction import chaige et excute le module indiqu sil nest pas dj chaig. Lensemble des
dnitions contenues dans ce module deviennent alois disponibles vaiiables globales, fonctions, classes.
Suivant la syntaxe utilise, on accede aux aux dnitions du module de diientes faons
linstiuction import <nom_module> donne acces lensemble des dnitions du module impoit en
utilisant le nom du module comme espace de nom.
>>> import tkinter
>>> print("Version de l'interface graphique tkinter :", tkinter.TkVersion)
Version de l'interface graphique tkinter : 8.5
linstiuction from <nom_module> import nom1, nom2. . . donne acces diiectement une slection
choisie de noms dnis dans le module.
40 Modules et packages
>>> from math import pi, sin
>>> print("Valeur de Pi :", pi, "sinus(pi/4) :", sin(pi/4))
Valeur de Pi : 3.14159265359 sinus(pi/4) : 0.707106781187
Dans les deux cas, le module et ses dnitions existent dans leui espace mmoiie piopie, et on duplique
simplement dans le module couiant les noms que lon a choisi, comme si on avait fait les aectations
>>> sin = math.sin
>>> pi = math.pi
Remarque
LUML (Unied Modeling Language) est un langage giaphique ties ipandu de conception des systemes
dinfoimation.
UML piopose une giande vaiit de diagiammes (classes, objets, tats, activits etc.). En piemieie
appioche, le diagiamme de classes est le plus utile poui concevoii les classes et leuis ielations.
(a) Une classe et une note (b) Un hiitage
licUvr .1 Diagiammes de classe.
7.2 Classes et instanciation dobjets
7.2.1 Linstruction class
Ceue instiuction peimet dintioduiie la dnition dune nouvelle classe (cest--diie dun nouveau
type de donnes).
Syntaxe
class est une instiuction compose. Elle compiend un en-tte (avec docstring) coips indent
>>> class C:
... """Documentation de la clesse C."""
... x = 23
Dans cet exemple, C est le nom de la classe (qui commence conventionnellement pai une majuscule),
et x est un aribut de classe, local C.
7.2.2 Linstanciation et ses attributs
Les classes sont des fabriques dobjets on constiuit daboid lusine avant de pioduiie des objets '
On instancie un objet (cest--diie quon le pioduit paitii de lusine) en appelant le nom de sa
classe comme sil sagissait dune fonction
>>> class C:
... """Documentation de la clesse C."""
... x = 23 # attibut de classe
...
>>> a = C() # a est un objet de la classe C (ou une instance)
>>> a.x # affiche la valeur de l'attribut de l'instance a
23
>>> a.x = 12 # modifie son attribut d'instance (attention...)
>>> a.x
12
>>> C.x # mais l'attribut de classe est inchang
23
>>> C.z = 6 # z : nouvel attribut de classe
>>> a.y = 44 # y : nouvel attribut de l'instance a
>>> b = C() # b est un autre objet de la classe C (une autre instance)
>>> b.x # b connat bien son attribut de classe, mais...
23
>>> b.y # ... b n'a pas d'attribut y !
7.2 Classes et instanciation dobjets 49
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: C instance has no attribute 'y'
Remarque
En Python (cai cest un langage dynamique comme Ruby, mais contiaiiement C ou Java) il est
possible dajoutei de nouveaux auiibuts dinstance (ici le a.y = 44) ou mme de nouveaux auiibuts de
classe (ici C.z = 6).
Dnition
b
Une vaiiable dnie au niveau dune classe (comme x dans la classe C) est appel auiibut de classe et
est paitage pai tous les objets instances de ceue classe.
Dnition
b
Une vaiiable dnie au niveau dun objet (comme y dans lobjet a) est appele auiibut dinstance et
est lie uniquement lobjet poui lequel elle est dnie.
7.2.3 Retour sur les espaces de noms
On a dj vu les espaces de noms
1
locaux (lois de lappel dune fonction), globaux (lis aux modules) et
inteines (fonctions standaids), ainsi que la iegle Local Global lnteine (cf. section .3, p. 38) qui dnit
dans quel oidie ces espaces sont paicouius poui isoudie un nom.
Les classes ainsi que les objets instances dnissent de nouveaux espaces de noms, et il y a l aussi des
iegles poui isoudie les noms
les classes peuvent utilisei les vaiiables dnies au niveau piincipal mais elles ne peuvent pas les
modiei ,
les instances peuvent utilisei les vaiiables dnies au niveau de la classe mais elles ne peuvent pas
les modiei (poui cela elles sont obliges de passei pai lespace de noms de la classe, e.g. C.x = 3).
Reere des noms
Noms non qualis (exemple dimension) laectation cie ou change le nom dans la porte locale
couiante. lls sont cheichs suivant la iegle LGl.
Noms qualis (exemple dimension.hauteur) laectation cie ou modie lauiibut dans lespace de
noms de lobjet. Un auiibut est cheich dans lobjet, puis dans toutes les classes dont lobjet dpend
(mais pas dans les modules).
Lexemple suivant ache le dictionnaiie li la classe C puis la liste des auiibuts lis une instance
de C
>>> v = 5
>>> class C:
... x = v + 3 # utilisation d'une variable globale dans la dfinition de classe
... y = x + 1 # recherche dans l'espace de noms de la classe lors de la dfinition
...
>>> a = C()
>>> a.x # utilisation sans modification de la variable de classe en passant par l'objet
8
>>> a.x = 2 # cration d'une variable d'instance pour l'objet a
>>> a.x
2
>>> C.x # la variable de classe n'est pas modifie
8
>>> C.x = -1 # on modifie la variable de classe en passant par l'espace de noms de la classe
>>> C.x
-1
>>> class C:
... x = 20
...
>>> C.__dict__
{'x': 20, '__module__': '__main__', '__doc__': None}
1. Les espaces de noms sont implments pai des dictionnaiies.
0 La programmation Oriente Objet
>>> a = C()
>>> dir(a)
['__doc__', '__module__', 'x']
7.3 Mthodes
Syntaxe
Une mthode sciit comme une fonction du corps de la classe avec un piemiei paiametie self obli-
gatoiie, o self iepisente lobjet sui lequel la mthode seia applique.
Autiement dit self est la rfrence dinstance.
>>> class C: # x et y : attributs de classe
... x = 23
... y = x + 5
... def affiche(self): # mthode affiche()
... self.z = 42 # attribut d'instance
... print(C.y) # dans une mthode, on qualifie un attribut de classe,
... print(self.z) # mais pas un attribut d'instance
...
>>> obj = C() # instanciation de l'objet ob
>>> obj.affiche()
28
42
7.4 Mthodes spciales
Beaucoup de classes oient des caiactiistiques supplmentaiies comme pai exemple la concatna-
tion des chaines en utilisant simplement lopiateui +. Ceci est obtenu giace aux mthodes spciales. Pai
exemple lopiateui + est utilisable cai la classe des chaines a iedni la mthode spciale __add__().
Syntaxe
Ces mthodes poitent des noms pi-dnis, picds et suivis de deux caiacteies de soulignement.
Elles seivent
initialisei lobjet instanci ,
modiei son achage ,
suichaigei ses opiateuis ,
. . .
7.4.1 Linitialisateur
Lois de linstanciation dun objet, la stiuctuie de base de lobjet est cie en mmoiie, et la mthode
__init__ est automatiquement appele poui initialisei lobjet. Cest typiquement dans ceue mthode sp-
ciale que sont cis les auiibuts dinstance avec leui valeui initiale.
>>> class C:
... def __init__(self, n):
... self.x = n # initialisation de l'attribut d'instance x
...
>>> une_instance = C(42) # paramtre obligatoire, affect n
>>> une_instance.x
42
Cest une procdure automatiquement invoque lois de linstanciation elle ne ietouine aucune valeui.
7.4.2 Surarge des oprateurs
La surcharge peimet un opiateui de possdei un sens diient suivant le type de ses opiandes. Pai
exemple, lopiateui peimet
x = 7 + 9 # addition entire
s = 'ab' + 'cd' # concatnation
7.5 Hritage et polymorphisme 1
Python possede des mthodes de suichaige poui
tous les types (__call__, __str__, . . .) ,
les nombies (__add__, __div__, . . .) ,
les squences (__len__, __iter__, . . .).
Soient deux instances, obj1 et obj2, les mthodes spciales suivantes peimeuent deectuei les opia-
tions aiithmtiques couiantes
1
Une expiession gniatiice possede une syntaxe piesque identique celle des listes en compihen-
sion , la diience est quune expiession gniatiice est entouie de paientheses.
Utilisation
Les expiessions gniatiices sont aux gniateuis ce que les listes en compihension sont aux fonc-
tions.
Pai exemple lexpiession suivante gneie la ciation dun million de valeuis en mmoiie avant de
commencei la boucle
for i in [x**2 for x in range(1000000)]:
Alois que dans lexpiession suivante, la boucle commence immdiatement et gneie le million de va-
leuis au fui et mesuie des demandes
for i in (x**2 for x in range(1000000)):
9.1.9 Les fonctions incluses
La syntaxe de dnition des fonctions en Python peimet tout fait demboter leui dnition. Distin-
guons deux cas demploi
ldiome de la fonction fabiique ienvoyant une feimetuie
>>> def creer_plus(ajout):
... """Fonction 'fabrique'."""
... def plus(increment):
... """Fonction 'fermeture' : utilise des noms locaux creer_plus()."""
... return increment + ajout
... return plus
...
>>>
>>> p = creer_plus(23)
>>> q = creer_plus(42)
>>>
>>> print("p(100) =", p(100))
('p(100) =', 123)
>>> print("q(100) =", q(100))
('q(100) =', 142)
lonction fabiique ienvoyant une classe
>>> class CasNormal:
... def uneMethode(self):
... print("normal")
...
>>>
>>> class CasSpecial:
... def uneMethode(self):
... print("spcial")
...
>>>
>>> def casQuiConvient(estNormal=True):
... """Fonction fabrique renvoyant une classe."""
... if estNormal:
... return CasNormal()
... else:
... return CasSpecial()
...
>>>
>>> une_instance = casQuiConvient()
>>> une_instance.uneMethode()
2 Techniques avances
normal
>>> une_instance = casQuiConvient(False)
>>> une_instance.uneMethode()
spcial
9.1.10 Les dcorateurs
Les dcoiateuis Python sont des fonctions qui peimeuent deectuei des pitiaitements lois de lappel
dune fonction, dune mthode ou dune classe.
Syntaxe
lambda [parameters]:expression
Pai exemple ceue fonction ietouine s si son aigument est diient de 1, une chaine vide sinon
>>> s = lambda x: "" if x == 1 else "s"
>>>
>>> s(3)
's'
>>> s(1)
''
Auties exemples illustiant les diiences de syntaxe fonction/lambda
>>> def f(x):
... return x**2
...
>>> print(f(8))
64
>>>
>>> g = lambda x : x**2
>>> print(g(8))
64
8 Techniques avances
9.3.2 Les fonctions map, filter et reduce
La piogiammation fonctionnelle est un paiadigme de piogiammation qui consideie le calcul en tant
quvaluation de fonctions mathmatiques. Elle souligne lapplication des fonctions, contiaiiement au
modele de piogiammation impiative qui met en avant les changements dtat
1
. Elle iepose sui tiois
concepts mapping, ltering et reducing qui sont implments en Python pai tiois fonctions map(), fil-
ter() et reduce().
La fonction map() :
map() applique une fonction chaque lment dune squence et ietouine un itiateui
>>> map(lambda x:x, range(10))
<map object at 0x7f3a80104f50>
>>>
>>> list(map(lambda x:x, range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
On iemaique que map() peut tie iemplace pai un gniateui en compihension.
La fonction filter() :
filter() constiuit et ienvoie un itiateui sui une liste qui contient tous les lments de la squence
initiale ipondant au ciiteie
function(element) == True
>>> filter(lambda x: x>0, range(10))
<filter object at 0x7f3a801105d0>
De mme filter() peut tie iemplace pai un gniateui en compihension.
La fonction reduce() :
reduce() est une fonction du module functools. Elle applique de faon cumulative une fonction de
deux aiguments aux lments dune squence, de gauche dioite, de faon iduiie ceue squence une
seule valeui quelle ienvoie
>>> def somme(x, y):
... print x, '+', y
... return x + y
...
>>> reduce(somme, [1, 2, 3, 4])
1 + 2
3 + 3
6 + 4
10
>>>
>>> sum([1, 2, 3, 4])
10
On iemaique que reduce() peut tie iemplace pai une des fonctions suivantes all(), any(), max(),
min() ou sum().
9.3.3 Les applications partielles de fonctions
lssue de la piogiammation fonctionnelle, une PlA (application paitielle de fonction) de n paiameties
piend le piemiei aigument comme paiametie xe et ietouine un objet fonction (ou instance) utilisant les
n-1 aiguments iestants.
Les PlA sont ties utiles dans les fonctions de calcul compoitant de nombieux paiameties. On peut en
xei ceitains et ne faiie vaiiei que ceux sui lesquels on veut agii.
1. cf. Wikipedia
9.4 Les tests 9
>>> from functools import partial
>>>
>>> def f(m, c, d, u):
... return 1000*m + 100*c + 10*d + u
...
>>>
>>> f(1, 2, 3, 4)
1234
>>>
>>> g = partial(f, 1, 2, 3)
>>> g(4)
1234
>>> h = partial(f, 1, 2)
>>> h(3, 4)
1234
Elles sont aussi utiles poui fouinii des modeles paitiels de widgets, qui ont souvent de nombieux
paiameties. Dans lexemple suivant, on iednit la classe Button en xant ceitains de ses auiibuts (qui
peuvent toujouis tie suichaigs)
from functools import partial
import tkinter as tk
root = tk.Tk()
# instanciation partielle de classe :
MonBouton = partial(tk.Button, root, fg='purple', bg='green')
MonBouton(text="Bouton 1").pack()
MonBouton(text="Bouton 2").pack()
MonBouton(text="QUITTER", bg='red', fg='black',
command=root.quit).pack(fill=tk.X, expand=True)
root.title("PFA !")
root.mainloop()
Ce isultat est illusti pai la guie 9.2.
licUvr 9.2 PlA appliqu un widget
9.4 Les tests
Des lois quun piogiamme dpasse le stade du petit sciipt, le piobleme des eiieuis et donc des tests
se pose invitablement.
Dnition
b
Un test consiste appelei la fonctionnalit spcie dans la documentation, avec un scnaiio qui
coiiespond un cas dutilisation, et viiei que ceue fonctionnalit se compoite comme pivu.
9.4.1 Tests unitaires et tests fonctionnels
On distingue deux familles de test
Tests unitaires validations isoles du fonctionnement dune classe, dune mthode ou dune fonction.
Pai convention, chaque module est associ un module de tests unitaiies, plac dans un ipei-
toiie tests du paquet. Pai exemple, un module nomm calculs.py auia un module de tests nomm
tests/test_calculs.py
80 Techniques avances
Tests fonctionnels piennent lapplication complete comme une boite noiie et la manipulent comme
le feiait lutilisateui nal. Ces tests doivent passei pai les mmes inteifaces que celles fouinies aux
utilisateuis, cest pouiquoi ils sont spciques la natuie de lapplication et plus dlicats meuie
en uvie.
Dans ceue intioduction, nous nous limiteions une couite pisentation des tests unitaiies.
9.4.2 Module unittest
Le module Python unittest fouinit loutil PyUnit, outil que lon ietiouve dans dauties langages JUnit
(Java), NUnit (.Net), JSUnit (Javasciipt), tous diivs dun outil initialement dvelopp poui le langage
SmallTalk SUnit.
PyUnit piopose une classe de base, TestCase. Chaque mthode implmente dans une classe diive
de TestCase, et pixe de test_, seia considie comme un test unitaiie
1
"""Module de calculs."""
# fonctions
def moyenne(*args):
"""Renvoie la moyenne."""
length = len (args)
sum = 0
for arg in args:
sum += arg
return sum/length
def division(a, b):
"""Renvoie la division."""
return a/b
"""Module de test du module de calculs."""
# import ----------------------------------------------------------------------
import sys
import unittest
from os.path import abspath, dirname
sys.path.insert(0, dirname(dirname((abspath(__file__)))))
from calculs import moyenne, division
# dfinition de classe et de fonction -----------------------------------------
class CalculTest(unittest.TestCase):
def test_moyenne(self):
self.assertEquals(moyenne(1, 2, 3), 2)
self.assertEquals(moyenne(2, 4, 6), 4)
def test_division(self):
self.assertEquals(division(10, 5), 2)
self.assertRaises(ZeroDivisionError, division, 10, 0)
def test_suite():
tests = [unittest.makeSuite(CalculTest)]
return unittest.TestSuite(tests)
# auto-test ===================================================================
if __name__ == '__main__':
unittest.main()
"""
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
"""
1. cf. [], p. 11.
9.5 La documentation des sources 81
Poui eectuei une campagne de tests , il ieste ciei un sciipt qui
iecheiche tous les modules de test leuis noms commencent pai test_ et ils sont contenus dans un
ipeitoiie tests ,
icupeie la suite, ienvoye pai la fonction globale test_suite ,
cie une suite de suites et lance la campagne.
9.5 La documentation des sources
Duiant la vie dun piojet, on distingue plusieuis types de documentation
les documents de spcication (ensemble explicite dexigences satisfaiie) ,
les documents techniques auachs au code ,
les manuels dutilisation et auties documents de haut niveau.
Les documents techniques voluent au iythme du code et peuvent donc tie tiaits comme lui ils
doivent pouvoii tie lus et manipuls avec un simple diteui de texte.
ll existe deux outils majeuis poui concevoii des documents poui les applications Python
reStructuredText (ou reST) un foimat eniichi ,
les doctests compatibles avec le foimat reST. lls peimeuent de combinei les textes applicatifs avec les
tests.
9.5.1 Le format reST
Le foimat reStructuredText, communment appel reST est un systeme de balises utilis poui foimatei
des textes.
A la diience de L
A
T
E
X ou dHTML il eniichit le document de manieie non intiusive , cest--diie
que les chieis iestent diiectement lisibles.
docutils
Le piojet docutils, qui inclut linteipiteui reST, fouinit un jeu dutilitaiies
rst2html gneie un iendu html avec une feuille de style css intgie ,
rst2latex cie un chiei L
A
T
E
X quivalent ,
rst2s5 constiuit une pisentation au foimat s, qui peimet de ciei des pisentations inteiactives en
HTML.
Sphinx
Sphinx est un logiciel libie de type gniateui de documentation. ll sappuie sui des chieis au foimat
ieStiuctuiedText, quil conveitit en HTML, PDl, man, et auties foimats.
De nombieux piojets utilisent Sphinx poui leui documentation ocielle, tels que Python, Django,
Selenium, Uiwid, ou encoie Bazaai.
rst2pdf
Pai ailleuis, le piogiamme rst2pdf gneie diiectement une documentation au foimat PDl.
Voici un exemple
1
simple de chiei texte au foimat ieST.
On iemaique entie auties que
la piincipale balise est la ligne blane qui spaie les diientes stiuctuies du texte ,
la stiuctuiation se fait en soulignant les tities des sections de diients niveaux avec des caiacteies
de ponctuation (= - _ : , etc.). A chaque fois quil iencontie un texte ainsi soulign, linteipiteui
associe le caiacteie utilis un niveau de section ,
un titie est gnialement soulign et suilign avec le mme caiacteie, comme dans lexemple sui-
vant
1. cf. [], p. 11
82 Techniques avances
======================
Fichier au format reST
======================
Section 1
=========
On est dans la section 1.
Sous-section
::::::::::::
Ceci est une sous-section.
Sous-sous-section
.................
Ceci est une sous-sous-section.
.. et ceci un commentaire
Section 2
=========
La section 2 est ``beaucoup plus`` **intressante** que la section 1.
Section 3
=========
La section 2 est un peu vantarde : la section 1 est *trs bien*.
Une image au format "png"
:::::::::::::::::::::::::
.. figure:: helen.png
:scale: 50%
Lutilitaiie rst2pdf, appliqu ce chiei, pioduit le chiei de mme nom ( lig. 9.3) mais avec
lextension .pdf.
9.5.2 Le module doctest
Le piincipe du literate programming (ou piogiammation liuiaiie) de Donald KNU1u consiste mlei
dans le souice le code et la documentation du piogiamme.
Ce piincipe t iepiis en Python poui documentei les APl via les chaines de documentation (docstring).
Des piogiammes comme Epydoc peuvent alois les extiaiie des modules poui composei une documentation
spaie.
ll est possible dallei plus loin et dincluie dans les chaines de documentation des exemples dutilisation,
ciits sous la foime de session inteiactive.
Examinons deux exemples.
Poui chacun, nous donneions dune pait le souice muni de sa chaine de documentation dans lequel le
module standaid doctest peimet dextiaiie puis de lancei ces sessions poui viiei quelles fonctionnent
et, dautie pait une captuie dcian de lexcution.
Premier exemple : documentation1.py
# -*- coding: utf-8 -*-
"""Module d'essai de doctest."""
import doctest
def somme(a, b):
"""Renvoie a + b.
>>> somme(2, 2)
4
>>> somme(2, 4)
9.5 La documentation des sources 83
6
"""
return a+b
if __name__ == '__main__':
print("{:-^40}".format(" Mode silencieux "))
doctest.testmod()
print("Si tout va bien, on a rien vu !")
print("\n{:-^40}".format(" Mode dtaill "))
doctest.testmod(verbose=True)
Lexcution de ce chiei donne
----------- Mode silencieux ------------
Si tout va bien, on a rien vu !
----------- Mode dtaill ------------
Trying:
somme(2, 2)
Expecting:
4
ok
Trying:
somme(2, 4)
Expecting:
6
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.somme
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
Deuxime exemple : documentation2.py
# -*- coding: UTF-8 -*-
"""Module d'essai de doctest."""
# fonctions
def accentEtrange(texte):
"""Ajoute un accent trange un texte.
Les 'r' sont Tripls, les 'e' suivi d'un 'u'
Exemple :
>>> texte = "Est-ce que tu as regard la tl hier soir ? Il y avait un thma sur les ramasseurs d'escargots en
Laponie, ils en bavent..."
>>> accentEtrange(texte)
Est-ceu queu tu as rRreugarRrd la tl hieurRr soirRr ? Il y avait un thma surRr leus rRramasseuurRrs d'
euscarRrgots eun Laponieu, ils eun baveunt...
Cette technique permet d'internationnaliser les applications
pour les rendre compatibles avec certaines rgions franaises.
"""
texte = texte.replace('r', 'rRr')
print(texte.replace('e', 'eu'))
def _test():
import doctest
doctest.testmod(verbose=True)
if __name__ == '__main__':
_test()
Lexcution de ce chiei donne
84 Techniques avances
Trying:
texte = "Est-ce que tu as regard la tl hier soir ? Il y avait un thma sur les ramasseurs d'escargots en Laponie
, ils en bavent..."
Expecting nothing
ok
Trying:
accentEtrange(texte)
Expecting:
Est-ceu queu tu as rRreugarRrd la tl hieurRr soirRr ? Il y avait un thma surRr leus rRramasseuurRrs d'
euscarRrgots eun Laponieu, ils eun baveunt...
ok
2 items had no tests:
__main__
__main__._test
1 items passed all tests:
2 tests in __main__.accentEtrange
2 tests in 3 items.
2 passed and 0 failed.
Test passed.
9.5.3 Le dveloppement dirig par la documentation
Comme on peut le voii, la documentation intgie pisente nanmoins un dfaut quand la documen-
tation augmente, on ne voit plus le code '
La solution est de dpoitei ceue documentation la fonction doctest.testfile() peimet dindiquei le
nom du chiei de documentation.
Qi plus est, on peut ciiie ce chiei au foimat ieST, ce qui peimet de faiie coup double. Dune pait,
on dispose des tests intgis la fonction (ou la mthode) et, dautie pait, le mme chiei fouinit une
documentation joui.
Exemple : doctest2.py
lichiei de documentation
1
Le module ``accent``
====================
Test de la fonction ``accentEtrange``
-------------------------------------
Ce module fournit une fonction ``accentEtrange``.
On peut ainsi ajouter un accent un texte :
>>> from doctest2 import accentEtrange
>>> texte = "Est-ce que tu as regard la tl hier soir ? Il y avait un thma sur
les ramasseurs d'escargots en Laponie, ils en bavent..."
>>> accentEtrange(texte)
Est-ceu queu tu as rRreugarRrd la tl hieurRr soirRr ? Il y avait un thma surRr
leus rRramasseuurRrs d'euscarRrgots eun Laponieu, ils eun baveunt...
Les ``r`` sont tripls et les ``e`` pauls par des ``u``. Cette technique permet
de se passer de systmes de traductions complexes pour faire fonctionner
les logiciels dans certaines rgions.
Souice du module
import doctest
doctest.testfile("test_documentation2.txt", verbose=True)
Nous pioduisons la documentation HTML pai la commande
rst2html test_documentation2.txt test_documentation2.html
Elle est illustie lig. 9.4.
1. cf. [], p. 11.
9.5 La documentation des sources 8
licUvr 9.3 Exemple de soitie au foimat PDl.
8 Techniques avances
licUvr 9.4 Documentation du sciipt test_documentation2.py.
ANNrxr A
Interlude
Le Zen de Python
1
Prre
la beaut la laideur,
lexplicite limplicite,
le simple au complexe,
le complexe au compliqu,
le droul limbriqu,
lar au compact.
Prends en compte la lisibilit.
Les cas particuliers ne le sont jamais assez pour violer les rgles.
Mais, la puret, privilgie laspect pratique.
Ne passe pas les erreurs sous silence,
Ou billonne-les explicitement.
Face lambigut, deviner ne te laisse pas aller.
Sache quil ne devrait avoir quune et une seule faon de procder.
Mme si, de prime abord, elle nest pas vidente, moins dtre Nerlandais.
Mieux vaut maintenant que jamais.
Cependant jamais est souvent mieux quimmdiatement.
Si limplmentation sexplique dicilement, cest une mauvaise ide.
Si limplmentation sexplique aisment, cest peut-tre une bonne ide.
Les espaces de noms, sacre bonne ide ! Faisons plus de trucs comme a !
1. Tim Pr1rvs (PEP n
o
20), tiaduction Ccile Tvrvi~N et Bob Covur~U.
Retoui chap.1, p. 1
88 Interlude
Le Graal de Python
1
!
Arthur
Lancelot ! Lancelot ! Lancelot !
[mgaphone de police]
Lancelooooooooot !
Lancelot
Bloody hell, mais que se passe-t-il donc, mon Roi ?
Arthur
Bevedere, explique-lui !
Bevedere
Nous devons te parler dun nouveau langage de programmation : Python
Lancelot
Nouveau ? Cela fait bien dix ans quil existe, et je ne vois pas en quoi cela va nous aider rcuprer le
Saint-Graal !
Bevedere
Saint-Graal, Saint-Graal. . .
[soupii]
Tu ne peux pas penser des activits plus saines que cee qute stupide de temps en temps ?
Arthur
[soit une massue et assomme Bevedeie avec]
Son explication tait mal partie de toute manire.
Gardes franais
Est-ce que ces messieurs les Anglais peuvent aller sentretuer plus loin ?
Ne voyez-vous pas que nous sommes concentrs sur notre jeu en ligne ?
Arthur
Ce tunnel sous la Manche, quelle hrsie !
[iacle sa goige]
Lancelot, assieds-toi, et coute-moi. (et ferme ce laptop, bloody hell !)
Lancelot
[iabat lcian de son laptop]
1. cf. [], p. 11.
Interlude 89
Arthur
La qute a chang. Tu dois maintenant apprendre le langage Python, et dcouvrir pourquoi il est de
plus en plus pris par mes sujets.
Lancelot
Mais. . .
Arthur
Il ny a pas de mais !
[menace Lancelot avec sa massue]
Je suis ton Roi. dot slash.
Prends ce livre, et au travail !
Gardes franais
Oui, au travail, et en silence !
ANNrxr B
Passer du problme au programme
Loisquon a un piobleme isoudie pai un piogiamme, la dicult est de savoii
Par o commencer ?
Comment concevoir lalgorithme ?
Prrequis
Au fui et mesuie que lon acquieie de lexpiience, on dcouvie et on appiend utilisei les biblio-
theques de modules et paquets qui fouinissent des types de donnes et des seivices avancs, vitant davoii
ie-ciei, codei et dboguei une paitie de la solution.
Rutiliser
La piemieie chose faiie est de viiei quil nexiste pas dj une solution (mme paitielle) au pio-
bleme que lon pouiiait iepiendie in extenso ou dont on pouiiait sinspiiei. On peut cheichei dans les
nombieux modules standaids installs avec le langage, dans les dpots institutionnels de modules tieis (le
Python Package Index
1
pai exemple), ou encoie utilisei les moteuis de iecheiche sui llnteinet. Si on ne
tiouve pas de solution existante dans notie langage pifi, on peut tiouvei une solution dans un autie
langage, quil ny auia plus qu adaptei.
Lanalyse qui peimet de ciei un algoiithme et la piogiammation ensuite, sont deux phases qui n-
cessitent de la piatique avant de devenii videntes ou faciles .
Rir un algorithme
Poui dmaiiei, il faut paitii dlments iels, mais sui un chantillon du piobleme compoitant peu de
donnes, un cas que lon est capable de tiaitei la main .
ll est foitement conseill de dmaiiei sui papiei ou sui un tableau (le papiei ayant lavantage de laissei
plus facilement des tiaces des diientes tapes).
On identie tout daboid quelles sont les donnes que lon a tiaitei en entie et quelles sont les
donnes que lon sauend tiouvei en soitie. Poui chaque donne, on essaie de picisei quel est son
domaine, quelles sont ses limites, quelles contiaintes la lient aux auties donnes.
Rsoudre la main
On commence pai une isolution du piobleme, en ialisant les tiansfoimations et calculs sui notie
chantillon de piobleme, en fonctionnant pai tapes.
A chaque tape, on note
quelles sont les tapes peitinentes, sui quels ciiteies elles ont t choisies ,
quelles sont les squences dopiations que lon a ipt.
Loisque lon tombe sui des tapes complexes, on dcoupe en sous-tapes, ventuellement en les tiai-
tant spaiment comme un algoiithme de isolution dun sous-piobleme. Le but est daiiivei un niveau
de dtails susamment simple , soit quil sagisse dopiations ties basiques (opiation sui un texte,
expiession de calcul numiique), soit que lon pense/sache quil existe dj un outil poui tiaitei ce sous-
piobleme (calcul de sinus poui un angle, opiation de tii sui une squence de donnes. . .).
Lois de ce dcoupage, il faut vitei de considiei des opiations comme implicites ou videntes ,
il faut picisei do pioviennent les infoimations et ce que lon fait des isultats. Pai exemple on ne
1. http://pypi.python.org/
92 Passer du problme au programme
consideie pas un lment mais le nom tiait est llment suivant de la squence de noms ou
encoie le nom tiait est le x
e
lment de la squence de noms .
Noimalement, au couis de ces opiations, on a commenc nommei les donnes et les tapes au fui
et mesuie quon en a eu besoins.
Formaliser
Une fois quon a un biouillon des tapes, il faut commencei meuie en foime et identiei les
constiuctions algoiithmiques connues et les donnes manipules
Boucles (sui quelles infoimations, condition daiit).
Tests (quelle condition).
lnfoimations en entie, quel est leui type, quelles sont les contiaintes poui quelles soient valides
et utilisables, do viennent-elles
dj pisentes en mmoiie,
demandes lutilisateui,
lues dans des chieis ou icupies ailleuis (sui llnteinet pai exemple).
Calculs et expiessions
quel genie de donnes sont ncessaiies, y-a-t-il des lments constants connaitie, des isultats
inteimdiaiies iutilisei,
on peut identiei ici les contioles inteimdiaiies possibles sui les valeuis qui puissent peimeuie
de viiei que lalgoiithme se dioule bien.
Stockage des isultats inteimdiaiies.
Rsultat nal quel moment la-t-on, quen fait-on
ietouin dans le cadie dune fonction,
ach lutilisateui,
sauvegaid dans un chiei.
Factoriser
Le but est didentiei les squences dtapes qui se ipetent en diients endioits, squences qui seiont
de bons candidats poui devenii des fonctions ou des classes. Ceci peut tie fait en mme temps que lon
foimalise.
Passer de lide au programme
Le passage de lide puis de lalgoiithme au code dans un piogiamme, est ielativement facile en Python
cai celui-ci est ties pioche dun langage dalgoiithmique.
Les noms des choses que lon a manipul vont nous donnei des variables.
Les tests vont se tiansfoimei en if condition :
Les boucles sur des squences dinfoimations vont se tiansfoimei en for variable in squence :
Les boucles avec expression de condition vont se tiansfoimei en while conditions :
Les squences dinstructions qui se rptent en diients endioits vont se tiansfoimei en fonc-
tions.
Le retour de rsultat dune squence (fonction) va se tiaduiie en return variable.
Les conditions sur les donnes ncessaiies poui un tiaitement vont identiei des tests deiieuis
et des leves dexception.
ANNrxr C
Jeux de caractres et encodage
Position du problme
Nous avons vu que loidinateui code toutes les infoimations quil manipule en binaiie. Poui codei les
nombies entieis un changement de base sut, poui les ouants, on utilise une noime (lEEE 4), mais la
situation est plus complexe poui iepisentei les caiacteies.
En eet, la giande diveisit des langues humaines et de leui iepisentation ncessite un codage adapt.
La piemieie ide est de constiuiie une table qui associe les symboles iepisentei un nombie (g-
nialement cod sui un octet)
Symbole Nombre
La plus clebie est la table ASCll
1
( lig. C.1), code sui bits (soit 128 codes), mais bien dauties
tables ont t cies (EBCDlC, lSO-882-1. . .).
licUvr C.1 Table ASCll.
La table Unicode
En Python 3, les chaines de caiacteies (le type str()) sont des chaines Unicode, noime dans laquelle
les identiants numiiques de leuis caiacteies sont uniques et univeisels.
Comme il sagit de diienciei plusieuis centaines de millieis de caiacteies (on compte enviion 000
langues dans le monde) ils ne pouiiont videmment pas tie encods sui un seul octet.
En fait, la noime Unicode ne xe aucune iegle conceinant le nombie doctets ou de bits iseivei
poui lencodage, mais spcie seulement la valeui numiique de lidentiant associ chaque caiacteie
(lig. C.2).
1. Ameiican Standaid Code foi lnfoimation lnteichange
94 Jeux de caractres et encodage
licUvr C.2 Extiait de la table Unicode.
Encodage
Apies avoii collect tous les symboles et y avoii associ un nombie, il ieste leui tiouvei une repr-
sentation binaire.
Poui lASCll un seul octet susait mais poui iepisentei les millions de possibilits de lUnicode, plu-
sieuis octets pai caiacteie sont ncessaiies.
Comme la plupait des textes nutilisent que la table ASCll ce qui coiiespond justement la paitie
basse de la table Unicode, lencodage le plus conomique est lUTl-8
1
i=0
1
i!
Poui cela, dnissez la fonction factoiielle et, dans votie piogiamme piincipal, saisissez loidie n et
achez lappioximation coiiespondante de e.
8. Un gaidien de phaie va aux toileues cinq fois pai joui oi les WC sont au iez-de-chausse. . .
Eciiie une piocduie (donc sans ietoui) hauteurParcourue qui ieoit deux paiameties le nombie de
maiches du phaie et la hauteui de chaque maiche (en cm), et qui ache
Entrez un entier strictement positif : 12
Diviseurs propres sans rptition de 12 : 2 3 4 6 (soit 4 diviseurs propres)
Entrez un entier strictement positif : 13 Diviseurs propres sans
rptition de 13 : aucun ! Il est premier
On noublieia pas
quune semaine compoite jouis ,
quune fois en bas, le gaidien doit iemontei ,
que le isultat est expiimei en m.
98 Exercices corrigs
9. Un peimis de chasse points iemplace dsoimais le peimis de chasse tiaditionnel. Chaque chasseui
possede au dpait un capital de 100 points. Sil tue une poule il peid 1 point, 3 points poui un chien,
points poui une vache et 10 points poui un ami. Le peimis coute 200 euios.
Eciiie une fonction amende qui ieoit le nombie de victimes du chasseui et qui ienvoie la somme
due.
Utilisez ceue fonction dans un piogiamme piincipal qui saisit le nombie de victimes et qui ache
la somme que le chasseui doit dbouisei.
10. Je suis ligot sui les iails en gaie dAiias. Eciiie un piogiamme qui ache un tableau me peimeuant
de connaitie lheuie laquelle je seiai dchiquet pai le tiain paiti de la gaie du Noid 9h (il y a
10 km entie la gaie du Noid et Aiias).
Le tableau pidiia les diientes heuies possibles poui toutes les vitesses de 100 km/h 300 km/h,
pai pas de 10 km/h, les isultats tant aiiondis la minute infiieuie.
Eciiie une piocduie tchacatchac qui ieoit la vitesse du tiain et qui ache lheuie du diame ,
ciiie le piogiamme piincipal qui ache le tableau demand.
11. Un piogiamme piincipal saisit une chaine dADN valide et une squence dADN valide ( valide
signie quelles ne sont pas vides et sont foimes exclusivement dune combinaison aibitiaiie de
"a", "t", "g" ou "c").
Eciiie une fonction valide qui ienvoie viai si la saisie est valide, faux sinon.
Eciiie une fonction saisie qui eectue une saisie valide et ienvoie la valeui saisie sous foime dune
chaine de caiacteies.
Eciiie une fonction proportion qui ieoit deux aiguments, la chaine et la squence et qui ietouine
la piopoition de squence dans la chaine (cest--diie son nombie doccuiiences).
Le piogiamme piincipal appelle la fonction saisie poui la chaine et poui la squence et ache le
isultat.
Exemple dachage
Il y a 13.33 % de "ca" dans votre chane.
12. ll sagit dciiie, dune pait, un piogiamme piincipal et, dautie pait, une fonction utilise dans le
piogiamme piincipal.
La fonction listAleaInt(n, a, b) ietouine une liste de n entieis alatoiies dans [a .. b] en utilisant
la fonction randint(a, b) du module random.
Dans le piogiamme piincipal
constiuiie la liste en appelant la fonction listAleaInt() ,
calculei lindex de la case qui contient le minimum,
changez le piemiei lment du tableau avec son minimum.
13. Comme picdemment, il sagit dciiie, dune pait, un piogiamme piincipal et, dautie pait, une
fonction utilise dans le piogiamme piincipal.
La fonction listAleaFloat(n) ietouine une liste de n ouants alatoiies en utilisant la fonction
random() du module random.
Dans le piogiamme piincipal
Saisii un entiei n dans linteivalle [2 .. 100] ,
constiuiie la liste en appelant la fonction listAleaFloat() ,
achei lamplitude du tabeau (cait entie sa plus giande et sa plus petite valeui) ,
achei la moyenne du tableau.
14. lonction ienvoyant plusieuis valeuis sous foime dun tuple.
Eciiie une fonction minMaxMoy qui ieoit une liste dentieis et qui ienvoie le minimum, le maximum
et la moyenne de ceue liste. Le piogiamme piincipal appelleia ceue fonction avec la liste [10, 18,
14, 20, 12, 16].
1. Saisii un entiei entie 1 et 3999 (pouiquoi ceue limitation `). Lachei en nombie iomain.
1. Amlioiei le sciipt picdent en utilisant la fonction zip().
1. Un tableau contient n entieis (2 < n < 100) alatoiies tous compiis entie 0 et 00. Viiei quils
sont tous diients.
Exercices corrigs 99
18. Lutilisateui donne un entiei n entie 2 et 12, le piogiamme donne le nombie de faons de faiie n en
lanant deux ds.
19. Mme piobleme que le picdent mais avec n entie 3 et 18 et tiois ds.
20. Gnialisation des deux questions picdentes. Lutilisateui saisit deux enties, dune pait le nombie
de ds, nbd (que lon limiteia piatiquement 10) et, dautie pait la somme, s, compiise entie nbd et
6.nbd. Le piogiamme calcule et ache le nombie de faons de faiie s avec les nbd ds.
21. Mme piobleme que le picdent mais cod icuisivement.
22. Nombies paifaits et nombies chanceux.
On appelle nombre premier tout entiei natuiel supiieui 1 qui possede exactement deux divi-
seuis, lui-mme et lunit.
On appelle diviseur propre de n, un diviseui quelconque de n, n exclu.
Un entiei natuiel est dit parfait sil est gal la somme de tous ses diviseuis piopies.
Les nombies a tels que (a + n + n
2
) est piemiei poui tout n tel que 0 n < (a 1), sont
appels nombres chanceux.
Eciiie un module (parfait_chanceux_m.py) dnissant quatie fonctions somDiv, estParfait, est-
Premier, estChanceux et un auto-test
la fonction somDiv ietouine la somme des diviseuis piopies de son aigument ,
les tiois auties fonctions viient la piopiit donne pai leui dnition et ietouine un boolen.
Plus picisment, si pai exemple la fonction estPremier viie que son aigument est piemiei,
elle ietouine True, sinon elle ietouine False.
La paitie de test doit compoitei quatie appels la fonction verif peimeuant de testei somDiv(12),
estParfait(6), estPremier(31) et estChanceux(11).
Puis ciiie le piogiamme piincipal (parfait_chanceux.py) qui compoite
linitialisation de deux listes parfaits et chanceux ,
une boucle de paicouis de linteivalle [2, 1000] incluant les tests ncessaiies poui iemplii ces
listes ,
enn lachage de ces listes.
Solutions des exercices
# -*- coding: utf-8 -*-
"""Volume d'un cne droit."""
# imports
from math import pi
# programme principal -----------------------------------------------
rayon = float(input("Rayon du cne (m) : "))
hauteur = float(input("Hauteur du cne (m) : "))
volume = (pi*rayon*rayon*hauteur)/3.0
print("Volume du cne =", volume, "m3")
# -*- coding: utf-8 -*-
"""Calcul d'un prix TTC."""
# programme principal -----------------------------------------------
prixHT = float(input("Prix HT (0 pour terminer)? "))
while prixHT > 0:
print("Prix TTC : {:.2f}\n".format(prixHT * 1.196))
prixHT = float(input("Prix HT (0 pour terminer)? "))
print("Au revoir !")
# -*- coding: utf-8 -*-
"""Somme d'entiers et nombre d'entiers suprieur 100."""
# programme principal -----------------------------------------------
100 Exercices corrigs
somme, nombreTotal, nombreGrands = 0, 0, 0
x = int(input("x (0 pour terminer) ? "))
while x > 0:
somme += x
nombreTotal += 1
if x > 100:
nombreGrands += 1
x = int(input("x (0 pour terminer) ? "))
print("\nSomme :", somme)
print(nombreTotal, "valeur(s) en tout, dont", nombreGrands, "suprieure(s) 100")
# -*- coding: utf-8 -*-
"""Parit."""
# programme principal -----------------------------------------------
n = int(input("Entrez un entier strictement positif : "))
while n < 1:
n = int(input("Entrez un entier STRICTEMENT POSITIF, s.v.p. : "))
if n%2 == 0:
print(n, "est pair.")
else:
print(n, "est impair.")
# -*- coding: utf-8 -*-
"""Nombre de fois qu'un entier est divisible par 2."""
# programme principal -----------------------------------------------
n = int(input("Entrez un entier strictement positif : "))
while n < 1:
n = int(input("Entrez un entier STRICTEMENT POSITIF, s.v.p. : "))
save = n
cpt = 0
while n%2 == 0:
n /= 2
cpt += 1
print(save, "est", cpt, "fois divisible par 2.")
# -*- coding: utf-8 -*-
"""Diviseurs propres d'un entier."""
# programme principal -----------------------------------------------
n = int(input("Entrez un entier strictement positif : "))
while n < 1:
n = int(input("Entrez un entier STRICTEMENT POSITIF, s.v.p. : "))
i = 2 # plus petit diviseur possible de n
cpt = 0 # initialise le compteur de divisions
p = n/2 # calcul une fois dans la boucle
print("Diviseurs propres sans rptition de ", n, ":", end=' ')
while i <= p:
if n%i == 0:
cpt += 1
print(i, end=' ')
i += 1
if not cpt:
print("aucun ! Il est premier.")
else:
print("(soit", cpt, "diviseurs propres)")
# -*- coding: utf-8 -*-
"""Approximation de 'e'."""
# fonction
def fact(n):
r = 1
for i in range(1, n+1):
Exercices corrigs 101
r *= i
return r
# programme principal -----------------------------------------------
n = int(input("n ? "))
exp = 0.0
for i in range(n):
exp = exp + 1.0/fact(i)
print("Approximation de 'e' : {:.3f}".format(exp))
# -*- coding: utf-8 -*-
"""Gardien de phare."""
# fonction
def hauteurParcourue(nb, h):
print("Pour {:d} marches de {:d} cm, il parcourt {:.2f} m par semaine.".format(nb, h, nb*h*2*5*7/100.0))
# programme principal -----------------------------------------------
nbMarches = int(input("Combien de marches ? "))
hauteurMarche = int(input("Hauteur d'une marche (cm) ? "))
hauteurParcourue(nbMarches, hauteurMarche)
# -*- coding: utf-8 -*-
"""Permis de chasse."""
# fonction
def permisSup(p, c, v, a):
pointsPerdus = p + 3*c + 5*v + 10*a
nbrePermis = pointsPerdus/100.0
return 200*nbrePermis
# programme principal -----------------------------------------------
poules = int(input("Combien de poules ? "))
chiens = int(input("Combien de chiens ? "))
vaches = int(input("Combien de vaches ? "))
amis = int(input("Combien d'amis ? "))
payer = permisSup(poules, chiens, vaches, amis)
print("\nA payer :", end=' ')
if payer == 0:
print("rien payer")
else:
print(payer, "euros")
# -*- coding: utf-8 -*-
"""Histoire de train."""
# fonction
def tchacatchac(v):
"""Affiche l'heure du drame."""
heure = 9 + int(170/v)
minute = (60 * 170 / v) % 60
print("A", v, "km/h, je me fais dchiqueter ", heure, "h", minute, "min.")
# programme principal -----------------------------------------------
i = 100
while i <= 300:
tchacatchac(i)
i += 10
# -*- coding: utf-8 -*-
"""Proportion d'une squence dans une chane d'ADN."""
# fonctions
def valide(seq):
"""Retourne vrai si la squence est valide, faux sinon."""
ret = any(seq)
for c in seq:
ret = ret and c in "atgc"
return ret
102 Exercices corrigs
def proportion(a, s):
"""Retourne la proportion de la squence <s> dans la chane <a>."""
return 100*a.count(s)/len(a)
def saisie(ch):
s = input("{:s} : ".format(ch))
while not valide(s):
print("'{:s}' ne peut contenir que les chanons 'a', 't', 'g' et 'c' et"
" ne doit pas tre vide".format(ch))
s = input("{:s} : ".format(ch))
return s
# programme principal -----------------------------------------------
adn = saisie("chane")
seq = saisie("squence")
print('Il y a {:.2f} % de "{:s}" dans votre chane.'
.format(proportion(adn, seq), seq))
# -*- coding: utf-8 -*-
"""Echanges."""
# imports
from random import seed, randint
# fonction
def listAleaInt(n, a, b):
"""Retourne une liste de <n> entiers alatoires dans [<a> .. <b>]."""
return [randint(a, b) for i in range(n)]
# programme principal -----------------------------------------------
seed() # initialise le gnrateur de nombres alatoires
t = listAleaInt(100, 2, 125) # construction de la liste
# calcul de l'index du minimum de la liste
iMin = t.index(min(t))
print("Avant change :")
print("\tt[0] =", t[0], "\tt[iMin] =", t[iMin])
t[0], t[iMin] = t[iMin], t[0] # change
print("Apres change :")
print("\tt[0] =", t[0], "\tt[iMin] =", t[iMin])
# -*- coding: utf-8 -*-
"""Amplitude et moyenne d'une liste de flottants."""
# imports
from random import seed, random
# fonctions
def listAleaFloat(n):
"Retourne une liste de <n> flottants alatoires"
return [random() for i in range(n)]
# programme principal -----------------------------------------------
n = int(input("Entrez un entier [2 .. 100] : "))
while not(n >= 2 and n <= 100):
n = int(input("Entrez un entier [2 .. 100], s.v.p. : "))
seed() # initialise le gnrateur de nombres alatoires
t = listAleaFloat(n) # construction de la liste
print("Amplitude : {:.2f}".format(max(t) - min(t)))
print("Moyenne : {:.2f}".format(sum(t)/n))
# -*- coding: utf-8 -*-
"""Min, max et moyenne d'une liste d'entiers."""
# fonction
def minMaxMoy(liste):
"""Renvoie le min, le max et la moyenne de la liste."""
min, max, som = liste[0], liste[0], float(liste[0])
Exercices corrigs 103
for i in liste[1:]:
if i < min:
min = i
if i > max:
max = i
som += i
return (min, max, som/len(liste))
# programme principal -----------------------------------------------
lp = [10, 18, 14, 20, 12, 16]
print("liste =", lp)
l = minMaxMoy(lp)
print("min : {0[0]}, max : {0[1]}, moy : {0[2]}".format(l))
# -*- coding: utf-8 -*-
"""Nombres romains (version 1)."""
# programme principal -----------------------------------------------
n = int(input('Entrez un entier [1 .. 4000[ : '))
while not(n >= 1 and n < 4000):
n = int(input('Entrez un entier [1 .. 4000[, s.v.p. : '))
s = "" # Chane rsultante
while n >= 1000:
s += "M"
n -= 1000
if n >= 900:
s += "CM"
n -= 900
if n >= 500:
s += "D"
n -= 500
if n >= 400:
s += "CD"
n -= 400
while n >= 100:
s += "C"
n -= 100
if n >= 90:
s += "XC"
n -= 90
if n >= 50:
s += "L"
n -= 50
if n >= 40:
s += "XL"
n -= 40
while n >= 10:
s += "X"
n -= 10
if n >= 9:
s += "IX"
n -= 9
if n >= 5:
s += "V"
n -= 5
if n >= 4:
s += "IV"
n -= 4
while n >= 1:
104 Exercices corrigs
s += "I"
n -= 1
print("En romain :", s)
# -*- coding: utf-8 -*-
"""Nombres romains (version 2)."""
# globales
code = zip(
[1000,900 ,500,400 ,100,90 ,50 ,40 ,10 ,9 ,5 ,4 ,1],
["M" ,"CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]
)
# fonction
def decToRoman(num):
res = []
for d, r in code:
while num >= d:
res.append(r)
num -= d
return ''.join(res)
# programme principal -----------------------------------------------
for i in range(1, 4000):
print(i, decToRoman(i))
# -*- coding: utf-8 -*-
"""Liste d'entiers diffrents."""
# imports
from random import seed, randint
# fonction
def listAleaInt(n, a, b):
"""Retourne une liste de <n> entiers alatoires entre <a> et <b>."""
return [randint(a, b) for i in range(n)]
# programme principal -----------------------------------------------
n = int(input("Entrez un entier [1 .. 100] : "))
while not(n >= 1 and n <= 100):
n = int(input("Entrez un entier [1 .. 100], s.v.p. : "))
# construction de la liste
seed() # initialise le gnrateur de nombres alatoires
t = listAleaInt(n, 0, 500)
# Sont-ils diffrents ?
tousDiff = True
i = 0
while tousDiff and i < (n-1):
j = i + 1
while tousDiff and j < n:
if t[i] == t[j]:
tousDiff = False
else:
j += 1
i += 1
print("\n", t, end=' ')
if tousDiff:
print(": tous les lments sont distincts.")
else:
print(": au moins une valeur est rpte.")
# -*- coding: utf-8 -*-
"""Jeu de ds (1)."""
# programme principal -----------------------------------------------
n = int(input("Entrez un entier [2 .. 12] : "))
while not(n >= 2 and n <= 12):
n = int(input("Entrez un entier [2 .. 12], s.v.p. : "))
Exercices corrigs 10
s = 0
for i in range(1, 7):
for j in range(1, 7):
if i+j == n:
s += 1
print("Il y a {:d} faon(s) de faire {:d} avec deux ds.".format(s, n))
# -*- coding: utf-8 -*-
"""Jeu de ds (2)."""
# programme principal -----------------------------------------------
n = int(input("Entrez un entier [3 .. 18] : "))
while not(n >= 3 and n <= 18):
n = int(input("Entrez un entier [3 .. 18], s.v.p. : "))
s = 0
for i in range(1, 7):
for j in range(1, 7):
for k in range(1, 7):
if i+j+k == n:
s += 1
print("Il y a {:d} faon(s) de faire {:d} avec trois ds.".format(s, n))
# -*- coding: utf-8 -*-
"""Jeu de ds (3)."""
# globale
MAX = 8
# programme principal -----------------------------------------------
nbd = int(input("Nombre de ds [2 .. {:d}] : ".format(MAX)))
while not(nbd >= 2and nbd <= MAX):
nbd = int(input("Nombre de ds [2 .. {:d}], s.v.p. : ".format(MAX)))
s = int(input("Entrez un entier [{:d} .. {:d}] : ".format(nbd, 6*nbd)))
while not(s >= nbd and s <= 6*nbd):
s = int(input("Entrez un entier [{:d} .. {:d}], s.v.p. : ".format(nbd, 6*nbd)))
if s == nbd or s == 6*nbd:
cpt = 1 # 1 seule solution
else:
I = [1]*nbd # initialise une liste de <nbd> ds
cpt, j = 0, 0
while j < nbd:
som = sum([I[k] for k in range(nbd)])
if som == s:
cpt += 1 # compteur de bonnes solutions
if som == 6*nbd:
break
j = 0
if I[j] < 6:
I[j] += 1
else:
while I[j] == 6:
I[j] = 1
j += 1
I[j] += 1
print("Il y a {:d} faons de faire {:d} avec {:d} ds.".format(cpt, s, nbd))
# -*- coding: utf-8 -*-
"""Jeu de ds (rcursif)."""
# globale
MAX = 8
# fonction
def calcul(d, n):
"""Calcul rcursif du nombre de faons de faire <n> avec <d> ds."""
10 Exercices corrigs
resultat, debut = 0, 1
if (d == 1) or (n == d) or (n == 6*d): # conditions terminales
return 1
else: # sinon appels rcursifs
if n > 6*(d-1): # optimisation importante
debut = n - 6*(d-1)
for i in range(debut, 7):
if n == i:
break
resultat += calcul(d-1, n-i)
return resultat
# programme principal -----------------------------------------------
d = int(input("Nombre de ds [2 .. {:d}] : ".format(MAX)))
while not(d >= 2and d <= MAX):
d = int(input("Nombre de ds [2 .. {:d}], s.v.p. : ".format(MAX)))
n = int(input("Entrez un entier [{:d} .. {:d}] : ".format(d, 6*d)))
while not(n >= d and n <= 6*d):
n = int(input("Entrez un entier [{:d} .. {:d}], s.v.p. : ".format(d, 6*d)))
print("Il y a {:d} faon(s) de faire {:d} avec {:d} ds.".format(calcul(d, n), n, d))
# -*- coding: utf-8 -*-
"""module d'exemple de polymorphisme."""
# classes
class Rectangle:
"""classe des rectangles."""
def __init__(self, longueur=30, largeur=15):
"""Constructeur avec valeurs par dfaut."""
self.lon = longueur
self.lar = largeur
self.nom = "rectangle"
def surface(self):
"""Calcule la surface d'un rectangle."""
return self.lon*self.lar
def __str__(self):
"""Affichage des caractristiques d'un rectangle."""
return "\nLe '{:s}' de cts {:s} et {:s} a une surface de {:s}"
.format(self.nom, self.lon, self.lar, self.surface())
class Carre(Rectangle):
"""classe des carrs (hrite de Rectangle)."""
def __init__(self, cote=10):
"""Constructeur avec valeur par dfaut"""
Rectangle.__init__(self, cote, cote)
self.nom = "carr" # surchage d'attribut d'instance
# Auto-test ---------------------------------------------------------
if __name__ == '__main__':
r = Rectangle(12, 8)
print r
c = Carre()
print c
3
ANNrxr l
Glossaire
Lexique bilingue
>>>
lnvite Python pai dfaut dans un shell inteiactif. Souvent utilise dans les exemples de code extiaits
de sessions de linteipiteui Python.
lnvite Python pai dfaut dans un shell inteiactif, utilise loisquil faut entiei le code dun bloc
indent ou lintiieui dune paiie de paientheses, ciochets ou accolades.
2to3
Un outil qui essaye de conveitii le code Python 2.x en code Python 3.x en giant la plupait des
incompatibilits quil peut dtectei.
2to3 est disponible dans la bibliotheque standaid lib2to2 , un point dentie autonome est Tool/s-
cipts/2to3. Voii 2to3 Automated Python 2 to 3 code translation.
abstract base class ABC (classe de base abstiaite)
Complete le duck-typing en fouinissant un moyen de dnii des inteifaces alois que dauties tech-
niques (comme hasattt()) sont plus louides. Python fouinit de base plusieuis ABC poui les stiuc-
tuies de donnes (module collections), les nombies (module numbers) et les ux (module io). Vous
pouvez ciei votie piopie ABC en utilisant le module abc.
argument (aigument)
Valeui passe une fonction ou une mthode, aecte une vaiiable nomme locale au coips de
la fonction. Une fonction ou une mthode peut avoii la fois des aiguments pai position et avec
des valeuis pai dfaut. Ces aiguments peuvent tie de multiplicit vaiiable * accepte ou fouinit
plusieuis aiguments pai position dans une liste, tandis que ** joue le mme iole en utilisant les
valeuis pai dfaut dans un dictionnaiie.
On peut passei toute expiession dans la liste daiguments, et la valeui value est tiansmise la
vaiiable locale.
attribute (auiibut)
Valeui associe un objet ifienc pai un nom et une expiession pointe. Pai exemple, lauiibut
a dun objet o peut tie ifienc o.a.
BDFL Benevolent Dictator For Life (Dictateui Bienveillant Vie)
Suinom bienveillant de Guido van RossUx, le ciateui de Python.
bytecode (bytecode ou langage inteimdiaiie)
Le code souice Python est compil en bytecode, iepisentation inteine dun piogiamme Python
dans linteipiteui. Le bytecode est galement iang dans des chieis .pyc et .pyo, ainsi lexcution
dun mme chiei est plus iapide les fois ultiieuies (la compilation du souice en bytecode peut
tie vite). On dit que le bytecode touine sui une maine virtuelle qui, essentiellement, se iduit
une collection dappels des ioutines coiiespondant chaque code du bytecode.
class (classe)
Modele peimeuant de ciei ses piopies objets. Les dnitions de classes contiennent noimalement
des dnitions de mthodes qui opeient sui les instances de classes.
coercion (coeicition ou tianstypage)
Conveision implicite dune instance dun type dans un autie type dans une opiation conceinant
deux aiguments de types compatibles. Pai exemple, int(3.15) conveitit le nombie ouant 3.15 en
108 Glossaire
lentiei 3, mais dans 3+4.5, chaque aigument est dun type diient (lun int et lautie float) et
tous deux doivent tie conveitis dans le mme type avant dtie additionns, sinon une exception
TypeError seia lance. Sans coeicition, tous les aiguments, mme de types compatibles, doivent tie
noimaliss la mme valeui pai le piogiammeui, pai exemple, float(3)+4.5 au lieu de simplement
3+4.5.
complex number (nombie complexe)
Une extension du systeme familiei des nombies iels dans laquelle tous les nombies sont expiims
comme la somme dune paitie ielle et une paitie imaginaiie. Les nombies imaginaiies sont des
multiples iels de lunit imaginaiie (la iacine caiie de -1), souvent ciite i pai les mathmaticiens
et j pai les ingnieuis. Python a un tiaitement incoipoi des nombies complexes, qui sont ciits
avec ceue deuxieme notation , la paitie imaginaiie est ciite avec un suxe j, pai exemple 3+1j.
Poui avoii acces aux quivalents complexes des lments du module math utilisez le module cmath.
Lutilisation des nombies complexes est une possibilit mathmatique assez avance. Si vous ntes
pas ceitain den avoii besoin vous pouvez les ignoiei sans iisque.
context manager (gestionnaiie de contexte)
Objet qui contiole lenviionnement indiqu pai linstiuction with et qui dnit les mthodes __en-
ter__() et __exit__(). Voii la PEP 343.
CPython (Python classique)
lmplmentation canonique du langage de piogiammation Python. Le teime CPython est utilis dans
les cas o il est ncessaiie de distinguei ceue implmentation dauties comme Jython ou lionPython.
decorator (dcoiateui)
lonction ietouinant une autie fonction habituellement applique comme une tiansfoimation utili-
sant la syntaxe @wrapper.
classmethod() et staticmethod() sont des exemples classiques de dcoiateuis.
Les deux dnitions de fonctions suivantes sont smantiquement quivalentes
def f(...):
...
f = staticmethod(f)
@staticmethod
def f(...):
...
Un concept identique existe poui les classes mais est moins utilis. Voii la documentation function
denition et class denition poui plus de dtails sui les dcoiateuis.
descriptor (desciipteui)
Tout objet qui dnit les mthodes __get__(), __set__() ou __delete__(). Loisquun auiibut dune
classe est un desciipteui, un compoitement spcique est dclench lois de la consultation de
lauiibut. Noimalement, ciiie a.b consulte lobjet b dans le dictionnaiie de la classe de a, mais si b
est un desciipteui, la mthode __get__() est appele. Compiendie les desciipteuis est fondamental
poui la compihension piofonde de Python, cai ils sont la base de nombieuses caiactiistiques,
comme les fonctions, les mthodes, les piopiits, les mthodes de classe, les mthodes statiques et
les ifiences aux supei-classes.
Poui plus dinfoimations sui les mthodes des desciipteuis, voii Implementing Descriptors.
dictionary (dictionnaiie)
Une table associative, dans laquelle des cls aibitiaiies sont associes des valeuis. Lutilisation des
objets dict iessemble beaucoup celle des objets list, mais les cls peuvent tie nimpoite quels
objets ayant une fonction __hash__(), non seulement des entieis. Ces tables sont appeles hash en
Peil.
docstring (chaine de documentation)
Chaine liuiale appaiaissant comme piemieie expiession dune classe, dune fonction ou dun mo-
dule. Bien quignoie lexcution, elle est ieconnue pai le compilateui et incluse dans lauiibut
__doc__ de la classe, de la fonction ou du module qui la contient. Depuis quelle est disponible via
lintiospection, cest lendioit canonique poui documentei un objet.
du-typing (typage comme un canaid )
Style de piogiammation pythonique dans lequel on dteimine le type dun objet pai inspection de
ses mthodes et auiibuts plutot que pai des ielations explicites des types ( sil iessemble un
Glossaire 109
canaid et fait coin-coin comme un canaid alois ce doit tie un canaid ). En meuant laccent sui des
inteifaces plutot que sui des types spciques on amlioie la exibilit du code en peimeuant la
substitution polymoiphe. Le duck-typing vite les tests qui utilisent type() ou isinstance() (notez
cependant que le duck-typing doit tie complt pai lemploi des classes de base abstiaites). A la
place, il emploie des tests comme hasattr() et le style de piogiammation EAFP.
EAFP (Easier to ask for forgiveness than permission, ou plus facile de demandei paidon que la peimis-
sion )
Ce style couiant de piogiammation en Python consiste supposei lexistence des cls et des auii-
buts ncessaiies lexcution dun code et auiapei les exceptions qui se pioduisent loisque de
telles hypotheses se ivelent fausses. Cest un style piopie et iapide, caiactiis pai la pisence de
nombieuses instiuctions try et except. Ceue technique contiaste avec le style LBYL, couiant dans
dauties langages comme le C.
expression (expiession)
liagment de syntaxe qui peut tie valu. Autiement dit, une expiession est une accumulation
dlments dexpiession comme des liuiaux, des noms, des acces aux auiibuts, des opiateuis ou
des appels des fonctions ietouinant une valeui. A linveise de beaucoup dauties langages, toutes
les constiuctions de Python ne sont pas des expiessions. Les instiuctions ne peuvent pas tie utili-
ses comme des expiessions (pai exemple if). Les aectations sont aussi des instiuctions, pas des
expiessions.
extension module (module dextension)
Module ciit en C ou en C, utilisant lAPl C de Python, qui inteiagit avec le cui du langage et
avec le code de lutilisateui.
nder
Objet qui essaye de tiouvei le loader (chaigeui) dun module. ll doit implmentei une mthode
nomme find_module(). Voii la PEP 302 poui des dtails et importlib.abc.Finder poui une classe de
base abstiaite.
oor division (division entieie)
Division mathmatique qui laisse tombei le ieste. Lopiateui de division entieie est //. Pai exemple,
lexpiession 11//4 est value 2, pai opposition la division ouante qui ietouine 2.75.
function (fonction)
Suite dinstiuctions qui ietouine une valeui lappelant. On peut lui passei zio ou plusieuis aigu-
ments qui peuvent tie utiliss dans le coips de la fonction. Voii aussi argument et method.
__future__
Un pseudo-module que les piogiammeuis peuvent utilisei poui peimeuie les nouvelles fonction-
nalits du langage qui ne sont pas compatibles avec linteipiteui couiamment employ.
En impoitant __future__ et en valuant ses vaiiables, vous pouvez voii quel moment une caiac-
tiistique nouvelle a t ajoute au langage et quand est-elle devenue la fonctionnalit pai dfaut
>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
garbage collection (gestion automatique de la mmoiie)
Piocessus de libiation de la mmoiie quand elle nest plus utilise. Python excute ceue gestion en
comptant les ifiences et en dtectant et en cassant les ifiences cycliques.
generator (fonction gniateui)
Une fonction qui ienvoie un itiateui. Elle iessemble une fonction noimale, except que la valeui
de la fonction est iendue lappelant en utilisant une instiuction yield au lieu dune instiuction
return. Les fonctions gniateuis contiennent souvent une ou plusieuis boucles for ou while qui
cedent des lments lappelant. Lexcution de la fonction est stoppe au niveau du mot-cl
yield, en ienvoyant un isultat, et elle est iepiise loisque llment suivant est iequis pai un appel
de la mthode next() de litiateui.
generator expression (expiession gniateui)
Une expiession qui ienvoie un gniateui. Elle iessemble une expiession noimale suivie dune
expiession for dnissant une vaiiable de contiole, un inteivalle et une expiession if facultative.
Toute ceue expiession combine pioduit des valeuis poui une fonction englobante
110 Glossaire
>>> sum(i*i for i in range(10)) # somme des carrs 0, 1, 4, ... 81
285
GIL
Cf. global interpreter lo.
global interpreter lo (veiiou global de linteipiteui)
Le veiiou utilis pai les threads Python poui assuiei quun seul thread touine dans la maine
virtuelle CPython un instant donn. ll simplie Python en gaiantissant que deux piocessus ne
peuvent pas accdei en mme temps une mme mmoiie. Bloquei linteipiteui tout entiei lui
peimet dtie multi-thread aux fiais du paialllisme du systeme enviionnant. Des eoits ont t
faits pai le pass poui ciei un inteipiteui free-threaded (o les donnes paitages sont veiiouilles
avec une gianulaiit ne), mais les peifoimances des piogiammes en souiaient considiablement,
y compiis dans le cas des piogiammes mono-thread.
hashable (hachable)
Un objet est hachable sil a une valeui de hachage constante au couis de sa vie (il a besoin dune
mthode __hash__()) et sil peut tie compai dauties objets (il a besoin dune mthode __eq__()).
Les objets hachables compais gaux doivent avoii la mme valeui de hachage.
Lhachabilit iend un objet piopie tie utilis en tant que cl dun dictionnaiie ou membie dun
ensemble (set), cai ces stiuctuies de donnes utilisent la valeui de hachage de faon inteine.
Tous les objets de base Python non modiables (immutable) sont hachables, alois que ceitains conte-
neuis comme les listes ou les dictionnaiies sont modiables. Les objets instances des classes dnies
pai lutilisateui sont hachables pai dfaut , ils sont tous ingaux (diients) et leui valeui de hachage
est leui id().
IDLE
Un enviionnement de dveloppement intgi poui Python. lDLE est un diteui basique et un en-
viionnement dinteipitation , il est donn avec la distiibution standaid de Python. Excellent poui
les dbutants, il peut aussi seivii dexemple pas tiop sophistiqu poui tous ceux qui doivent impl-
mentei une application avec inteiface utilisateui giaphique multi-plate-foime.
immutable (immuable)
Un objet avec une valeui xe. Pai exemple, les nombies, les chaines, les tuples. De tels objets ne
peuvent pas tie altis , poui changei de valeui un nouvel objet doit tie ci. Les objets immuables
jouent un iole impoitant aux endioits o une valeuis de hash constantes est iequise, pai exemple
poui les cls des dictionnaiies.
importer
Objet qui la fois tiouve et chaige un module. Cest la fois un objet nder et un objet loader.
interactive (inteiactif)
Python possede un inteipiteui inteiactif, ce qui signie que vous pouvez essayei vos ides et voii
immdiatement les isultats. ll sut de lancei python sans aigument (ventuellement en le slec-
tionnant dans un ceitain menu piincipal de votie oidinateui). Cest viaiment un moyen puissant
poui testei les ides nouvelles ou poui inspectei les modules et les paquetages (pensez help(x)).
interpreted (inteipit)
Python est un langage inteipit, pai opposition aux langages compils, bien que ceue distinction
puisse tie oue cause de la pisence du compilateui de bytecode. Cela signie que les chieis
souice peuvent tie diiectement excuts sans avoii besoin de ciei pialablement un chiei binaiie
excut ensuite. Typiquement, les langages inteipits ont un cycle de dveloppement et de mise
au point plus couit que les langages compils mais leuis piogiammes sexcutent plus lentement.
Voii aussi interactive.
iterable
Un objet conteneui capable de ienvoyei ses membies un pai un. Des exemples diterable sont les
types squences (comme les list, les str, et les tuple) et quelques types qui ne sont pas des s-
quences, comme les objets dict, les objets file et les objets de nimpoite quelle classe que vous
dnissez avec une mthode __iter__() ou une mthode __getitem__(). Les iterables peuvent tie
utiliss dans les boucles for et dans beaucoup dauties endioits o une squence est iequise (zip(),
map(), . . .). Loisquun objet iterable est pass comme aigument la fonction incoipoie iter() il
ienvoie un itiateui. Cet itiateui est un bon moyen poui eectuei un paicouis dun ensemble
de valeuis. Loisquon utilise des iterables, il nest gnialement pas ncesaiie dappelei la fonction
Glossaire 111
iter() ni de manipulei diiectement les valeuis en question. Linstiuction for fait cela automatique-
ment poui vous, en ciant une vaiiable tempoiaiie sans nom poui giei litiateui pendant la duie
de litiation. Voii aussi iterator, sequence, et generator.
iterator (itiateui)
Un objet iepisentant un ot de donnes. Des appels ipts la mthode __next__() de litiateui
(ou la fonction de base next()) ienvoient des lments successifs du ot. Loisquil ny a plus de
donnes disponibles dans le ot, une exception StopIteration est lance. A ce moment-l, lobjet
itiateui est puis et tout appel ultiieui de la mthode next() ne fait que lancei encoie une ex-
ception StopIteration. Les itiateuis doivent avoii une mthode __iter__() qui ienvoie lobjet
itiateui lui-mme. Ainsi un itiateui est itiatif et peut tie utilis dans beaucoup dendioits o les
iterables sont accepts , une exception notable est un code qui tenteiait des itiations multiples. Un
objet conteneui (comme un objet list) pioduit un nouvel itiateui chaque fois quil est pass la
fonction iter() ou bien utilis dans une boucle for. Si on fait cela avec un itiateui on ne icupieia
que le mme itiateui puis utilis dans le paicouis picdent, ce qui feia appaiaitie le conteneui
comme sil tait vide.
keyword argument (aigument avec valeui pai dfaut)
Aigument picd pai variable_name= dans lappel. Le nom de la vaiiable dsigne le nom local
dans la fonction auquel la valeui est aecte. ** est utilis poui acceptei ou passei un dictionnaiie
daiguments avec ses valeuis. Voii argument.
lambda
lonction anonyme en ligne ne compienant quune unique expiession value lappel. Syntaxe de
ciation dune fonction lambda
lambda[arguments]: expression
LBYL (Look before you leap ou iegaidei avant dy allei )
Ce style de code teste explicitement les pi-conditions avant deectuei un appel ou une iecheiche.
Ce style soppose lappioche EAFP et est caiactiis pai la pisence de nombieuses instiuctions
if.
list (liste)
Squence Python de base. En dpit de son nom, elle iessemble plus au tableau dauties langages
qu une liste chaine puisque lacces ses lments est en O(1).
list comprehension (liste en compihension)
Une manieie compacte deectuei un tiaitement sui un sous-ensemble dlments dune squence
en ienvoyant une liste avec les isultats. Pai exemple
result = ["0x%02x" % x for x in range(256) if x % 2 == 0]
engendie une liste de chaines contenant les ciituies hexadcimales des nombies impaiis de linteivalle
de 0 255. La clause if est facultative. Si elle est omise, tous les lments de linteivalle range(256)
seiont tiaits.
loader (chaigeui)
Objet qui chaige un module. ll doit possdei une mthode load_module(). un loader est typiquement
fouinit pai un nder. Voii la PEP 302 poui les dtails et voii importlib.abc.Loader poui une classe
de base abstiaite.
mapping (liste associative)
Un objet conteneui (comme dict) qui suppoite les iecheiches pai des cls aibitiaiies en utilisant la
mthode spciale __getitem__().
metaclass
La classe dune classe. La dnition dune classe cie un nom de classe, un dictionnaiie et une liste
de classes de base. La mtaclasse est iesponsable de la ciation de la classe paitii de ces tiois
lments. Beaucoup de langages de piogiammation oiients objets fouinissent une implmentation
pai dfaut. Une oiiginalit de Python est quil est possible de ciei des mtaclasses peisonnalises.
Beaucoup dutilisateuis nauiont jamais besoin de cela mais, loisque le besoin appaiait, les mta-
classes fouinissent des solutions puissantes et lgantes. Elles sont utilises poui eniegistiei les
acces aux auiibuts, poui ajoutei des treads scuiiss, poui dtectei la ciation dobjet, poui impl-
mentei des singletons et poui bien dauties taches.
Plus dinfoimations peuvent tie tiouves dans Customizing class creation.
112 Glossaire
method (mthode)
lonction dnie dans le coips dune classe. Appele comme un auiibut dune instance de classe, la
mthode piend linstance dobjet en tant que piemiei aigument (habituellement nomm self). Voii
function et nested scope.
mutable (modiable)
Les objets modiables peuvent changei leui valeui tout en conseivant leui id(). Voii aussi immu-
table.
named tuple (tuple nomm)
Toute classe de pseudo-tuples dont les lments indexables sont galement accessibles pai des at-
tiibuts nomms (pai exemple time.localtime() ietouine un objet pseudo-tuple o lanne est ac-
cessible soit pai un index comme t[0] soit pai un auiibut nomm comme t.tm_year.
Un tuple nomm peut tie un type de base comme time.struct_time ou il peut tie ci pai une
dnition de classe oidinaiie. Un tuple nomm peut aussi tie ci pai la fonction fabiique collec-
tions.nametuple(). Ceue deinieie appioche fouinit automatiquement des caiactiistiques suppl-
mentaiies comme une iepisentation auto-documente, pai exemple
>>> Employee(name='jones', title='programmer')
namespace (espace de noms)
Lendioit o une vaiiable est conseive. Les espaces de noms sont implments comme des diction-
naiies. ll y a des espace de noms locaux, globaux et intgis et galement imbiiqus dans les objets.
Les espaces de noms contiibuent la modulaiit en pivenant les conits de noms. Pai exemple, les
fonctions __builtin__.open() et os.open() se distinguent pai leuis espaces de noms. Les espaces
de noms contiibuent aussi la lisibilit et la maintenablit en claiiant quel module implmente
une fonction. Pai exemple, en ciivant random.seed() ou itertools.izip() on iend vident que ces
fonctions sont implmentes dans les modules random et itertools iespectivement.
nested scope (poite imbiique)
La possibilit de faiie ifience une vaiiable dune dnition englobante. Pai exemple, une fonction
dnie lintiieui dune autie fonction peut faiie ifience une vaiiable de la fonction extiieuie.
Notez que le poites imbiiques fonctionnent uniquement poui la ifience aux vaiiables et non
poui leui aectation, qui conceine toujouis la poite imbiique. Les vaiiables locales sont lues et
ciites dans la poite la plus intiieuie , les vaiiables globales sont lues et ciites dans lespace de
noms global. Linstiuction nonlocal peimet dciiie dans la poite globale.
new-style class (style de classe nouveau)
Vieille dnomination poui le style de piogiammation de classe actuellement utilis. Dans les vei-
sions picdentes de Python, seul le style de classe nouveau pouvait bnciei des nouvelles caiac-
tiistiques de Python, comme __slots__, les desciipteuis, les piopiits, __getattribute__(), les
mthodes de classe et les mthodes statiques.
object (objet)
Toute donne compienant un tat (auiibut ou valeui) et un compoitement dni (mthodes). Ega-
lement la classe de base ultime du new-style class.
positional argument (aigument de position)
Aiguments aects aux noms locaux inteines une fonction ou une mthode, dteimins pai
loidie donn dans lappel. La syntaxe * accepte plusieuis aiguments de position ou fouinit une
liste de plusieuis aiguments une fonction. Voii argument.
property (piopiit)
Auiibut dinstance peimeuant dimplmentei les piincipes de lencapsulation.
Python3000
Suinomde la veision 3 de Python (foig il y a longtemps, quand la veision 3 tait un piojet lointain).
Aussi abig Py3k .
Pythonic (pythonique)
lde ou fiagment de code plus pioche des idiomes du langage Python que des concepts fiquemment
utiliss dans dauties langages. pai exemple, un idiome fiquent en Python est de bouclei sui les
lments dun iterable en utilisant linstiuction for. Beaucoup dauties langages nont pas ce type
de constiuction et donc les utilisateuis non familieis avec Python utilisent paifois un compteui
numiique
Glossaire 113
for i in range(len(food)):
print(food[i])
Au lieu dutilisei la mthode claiie et pythonique
for piece in food:
print(piece)
reference count (nombie de ifiences)
Nombie de ifiences dun objet. Qand le nombie de ifiences dun objet tombe zio, lobjet est
dsallou. Le comptage de ifiences nest gnialement pas visible dans le code Python, mais cest
un lment cl de limplmentation de CPython. Le module sys dnit la fonction getrefcount()
que les piogiammeuis peuvent appelei poui icupiei le nombie de ifiences dun objet donn.
__slots__
Une dclaiation lintiieui dune classe de style nouveau qui conomise la mmoiie en pi-dclaiant
lespace poui les auiibuts et en liminant en consquence les dictionnaiies dinstance. Bien que po-
pulaiie, ceue technique est quelque peu dicile meuie en place et doit tie iseive aux iaies cas
o il y a un nombie impoitant dinstances dans une application o la mmoiie est iduite.
sequence (squence)
Un iterable qui oie un acces ecace aux lments en utilisant des index entieis et les mthodes sp-
ciales __getitem__() et __len__(). Des types squences incoipois sont list, str, tuple et unicode.
Notez que le type dict compoite aussi les mthodes __getitem__() et __len__(), mais est considi
comme une table associative plutot que comme une squence cai la iecheiche se fait laide de cls
aibitiaiies immuables au lieu dindex.
slice (tianche)
Objet contenant noimalement une paitie dune squence. Une tianche est cie pai une notation in-
dexe utilisant des entie les index quand plusieuis sont donns, comme dans variable_name[1:3:5].
La notation ciochet utilise les objets slice de faon inteine.
special method (mthode spciale)
Mthode appele implicitement pai Python poui excutei une ceitaine opiation sui un type, pai
exemple une addition. Ces mthodes ont des noms commenant et nissant pai deux caiacteies
souligns. Les mthodes spciales sont documentes dans Special method names.
statement (instiuction)
Une instiuction est une paitie dune suite, dun bloc de code. Une instiuction est soit une ex-
piession soit une ou plusieuis constiuctions utilisant un mot cl comme if, while ou for.
triple-quoted string (chaine multi-ligne)
Une chaine dlimite pai tiois guillemets () ou tiois apostiophes (). Bien quelles ne fouinissent
pas de fonctionnalits diientes de celles des chaines simplement dlimites, elles sont utiles poui
nombie de iaisons. Elles peimeuent dincluie des guillemets ou des apostiophes non piotgs et
elles peuvent stendie sui plusieuis lignes sans utilisei de caiacteie de continuation, et sont donc
spcialement utiles poui idigei des chaines de documentation.
type (type)
Le type dun objet Python dteimine de quelle soite dobjet il sagit , chaque objet possede un type.
Le type dun objet est accessible giace son auiibut __class__ ou peut tie ietouin pai la fonction
type(obj).
view (vue)
Les objets ietouins pai dict.keys(), dict.values() et dict.items() sont appels des dictionary
views. ce sont des squences paiesseuses
1
qui laisseiont voii les modications du dictionnaiie
sous-jacent. Poui foicei le dictionary view tie une liste complete, utilisei list(dictview). Voii
Dictionary wiew objects.
virtual maine (machine viituelle)
Oidinateui entieiement dni pai un piogiamme. la machine viituelle Python excute le bytecode
gni pai le compilateui.
1. Lvaluation paiesseuse est une technique de piogiammation o le piogiamme nexcute pas de code avant que les isultats
de ce code ne soient iellement ncessaiies. Le teime paiesseux (en anglais lazzy evaluation) tant connot ngativement en fianais
on paile aussi dvaluation ietaide.
114 Glossaire
Zen of Python
Une liste de piincipes mthodologiques et philosophiques utiles poui la compihension et lutilisation
du langage Python. Ceue liste peut tie obtenue en tapant import this dans linteipiteui Python.
Webographie
Les sites gniaux
www.python.oig
pypi.python.oig/pypi
code.google.com/p/pythonxy/wiki/Downloads
Les EDl spcialiss
code.google.com/p/spydeilib/
www.wingwaie.com/downloads/wingide-101
ipython.oig/
www.scintilla.oig/SciTEDownload.html
code.google.com/p/pysciiptei/
Les outils
hup //matplotlib.oig//
hup //www.inkscape-fi.oig//
code.google.com/p/ist2pdf/
hup //www.texniccentei.oig//
Le lien des liens
peiso.limsi.fi/pointal/liens pythonlinks
Bibliographie
[1] SviNNrN, Giaid, Apprendre programmer avec Python 3, Eyiolles, 2010.
[2] SUxxrviiriu, Maik, Programming in Python 3, Addison-Wesley, 2
e
dition, 2009.
[3] M~v1riii, Alex, Python en concentr, OReilly, 2004.
[4] M~v1riii, Alex, M~v1riii R~vrNscvoi1, Anna, Ascurv, David, Python par lexemple, OReilly, 200.
[] LU1z, Maik et B~iiiv, Yves, Python prcis et concis, OReilly, 2
e
dition, 200.
[] Zi~u, Taiek, Programmation Python. Conception et optimisation, Eyiolles, 2
e
dition, 2009.
[] Zi~u, Taiek, Python : Petit guide lusage du dveloppeur agile, Dunod, 200.
[8] Hriix~NN, Doug, e Python Standard Library by Example, Addison-Wesley, 2011.
[9] L~Nc1~NcrN, Hans Peuei, A Primer on Scientic Programming with Python, Spiingei, 2011.
[10] Cu~z~iir1, Sbastien, Python, les fondamentaux du langage, ENl, 2012.
[11] YoUNxrv, Je, Foundations of Agile Python Development, Apiess, 2008.
[12] RoUr11r Maeul, L
A
T
E
X appliqu aux sciences humaines, Atiamenta, 2012.
[13] Curv~iirv Cline et collectif, L
A
T
E
X pour limpatient, H & K, 3
e
dition, 2009.
[14] C~vrii~, David, Rgles typographiques et normes. Mise en pratique avec L
A
T
E
X, Vuibeit, 200.
Indexation des squences
Types de base
Mmento Bases Python 3
2012-2013 - Laurent Pointal
Licence Creative Commons Paternit 2
Documentation officielle Python sur
http://docs.python.org/py3k
0 783 -192 int
9.23 -1.7e-6 0.0 float
True False bool
"Un\nDeux" 'L\'me' str
"""X\tY\tZ
1\t2\t3"""
10
-6
tabulation
retour la ligne
multiligne
Types Conteneurs
list [1,5,9] ["x",11,8.9] ["mot"] []
tuple (1,5,9) 11,"y",7.4 ("mot",) ()
dict
{1:"un",3:"trois",2:"deux",3.14:""}
{"cl":"valeur"}
set
{}
{1,9,3,0}
squences ordonnes, accs index rapide, valeurs rptables
set()
sans ordre a priori, cl unique, accs par cl rapide; cls= types de base ou tuples
{"cl1","cl2"}
non modifiable
Affectation de variables
x = 1.2+8+sin(0)
y,z,r = 9.2,-7.6,"bad"
valeur ou expression de calcul
nom de variable (identificateur)
azAZ_ suivi de azAZ_09
accents possibles mais viter
mots cls du langage interdits
distinction casse min/MAJ
expression juste avec des virgules
non modifiable,
squence ordonne de caractres
dictionnaire
ensemble
entier, flottant, boolen, chane
conteneur de plusieurs
valeurs (ici un tuple)
noms de
variables
Identificateurs
a toto x7 y_max BigOne
8y and
x+=3 x-=2
incrmentation
dcrmentation
Conversions
pour les listes, tuples, chanes de caractres,
int("15")
float("-11.24e8")
bool
str(78.3) repr("Texte")
on peut spcifier la base du nombre entier en 2
nd
paramtre
int(15.56) troncature de la partie dcimale (round(15.56) pour entier arrondi)
et pour avoir la reprsentation littrale
type(expression)
utiliser des comparateurs (avec ==, !=, <, >, ), rsultat logique boolen
voir au verso le formatage de chanes, qui permet un contrle fin
":".join(['toto','12','pswd']) 'toto:12:pswd'
chane de jointure squence de chanes
"des mots espacs".split() ['des','mots','espacs']
"1,4,8,2".split(",") ['1','4','8','2']
chane de sparation
dict([(3,"trois"),(1,"un")]) {1:'un',3:'trois'}
list("abc") ['a','b','c']
utilise chaque lment de
la squence en paramtre
set(["un","deux"]) {'un','deux'}
utilise chaque lment de
la squence en paramtre
lst=[11, 67, "abc", 3.14, 42, 1968]
lst[1]67
lst[-2]42
0 1 2 3 5 4
-6 -5
-4
-3 -1 -2
accs individuel aux lments par [index]
index positif
index ngatif
0 1 2 3 5 4 6
-6 -5 -4 -3 -1 -2 tranche ngative
tranche positive
accs des sous-squences par [tranche dbut:tranche fin:pas]
len(lst) 6
lst[1:3][67,"abc"]
lst[::2][11,"abc",42]
lst[-3:-1][3.14,42]
lst[:3][11,67,"abc"]
lst[:-1][11,67,"abc",3.14,42]
lst[4:][42,1968]
lst[1:-1][67,"abc",3.14,42]
lst[:][11,67,"abc",3.14,42,1968]
Indication de tranche manquante partir du dbut / jusqu' la fin.
Instruction conditionnelle
if x==42:
# bloc si expression logique x==42 vraie
print("vrit vraie")
elif x>0:
# bloc sinon si expression logique x>0 vraie
print("positivons")
elif bTermine:
# bloc sinon si variable boolenne bTermine vraie
print("ah, c'est fini")
else:
# bloc sinon des autres cas restants
print("a veut pas")
Logique boolenne Blocs d'instructions
instruction parente:
bloc d'instructions 1
instruction parente:
bloc d'instructions 2
instruction suivante aprs bloc 1
i
n
d
e
n
t
a
t
i
o
n
!
Comparateurs: < > <= >= == !=
=
a and b
a or b
not a
et logique
ou logique
non logique
l'un ou l'autre ou les deux
les deux en mme temps
if expression logique:
bloc d'instructions
bloc d'instructions excut
uniquement si une condition est vraie
True
False
valeur constante vrai
valeur constante faux
combinable avec des sinon si, sinon si... et un seul sinon final,
exemple:
lst[-1]1968
lst[0]11
le dernier
le premier
x=None valeur constante non dfini
Maths
Oprateurs: + - * / // % **
entire reste
a
b
from math import sin,pi
' chapp
abs(-3.2)3.2
round(3.57,1)3.6
nombres flottants valeurs approches!
sin(pi/4)0.707
cos(2*pi/3)-0.4999
sqrt(81)9.0
log(e**2)2.0
angles en radians
acos(0.5)1.0471
etc. (cf doc)
(1+5.3)*212.6
pour noms de variables,
fonctions, modules, classes
Mmento v1.2.1bis
Sur les squences modifiables, utilisable pour suppression del lst[3:5] et modification par affectation lst[1:4]=['hop',9]
str en tant que squence ordonne de caractres
couples cl/valeur
"modele{} {} {}".format(x,y,r)
"{slection:formatage!conversion}"
Slection :
2
x
0.nom
4[cl]
0[2]
str
Affichage / Saisie
print("v=",3,"cm:",x,",",y+4)
Options de print:
sep=" " (sparateur d'lments, dfaut espace)
end="\n" (fin d'affichage, dfaut fin de ligne)
file=f (print vers fichier, dfaut sortie standard)
lments afficher: valeurs littrales, variables, expressions
boucle sur dict/set = boucle sur squence des cls
Instruction boucle conditionnelle bloc d'instructions excut
tant que la condition est vraie
while expression logique:
bloc d'instructions
s = 0
i = 1
while i <= 100:
# bloc excut tant que i 100
s = s + i**2
i = i + 1
print("somme:",s)
initialisations avant la boucle
condition avec au moins une valeur variable (ici i)
s=
i=1
i=100
i
2
faire varier la variable
de condition!
Instruction boucle itrative bloc d'instructions excut pour
chaque lment d'un conteneur ou d'un itrateur
for variable in squence:
bloc d'instructions
s = "Du texte"
cpt = 0
for c in s:
if c == "e":
cpt = cpt + 1
print("trouv",cpt,"'e'")
Parcours des valeurs de la squence
Comptage du nombre
de e dans la chane.
Parcours des index de la squence
changement de l'lment la position
accs aux lments autour de la position (avant/aprs)
lst = [11,18,9,12,23,4,17]
perdu = []
for idx in range(len(lst)):
val = lst[idx]
if val> 15:
perdu.append(val)
lst[idx] = 15
print("modif:",lst,"-modif:",perdu)
Bornage des valeurs
suprieures 15,
mmorisation des
valeurs perdues.
attention aux boucles sans fin!
initialisations avant la boucle
variable de boucle, valeur gre par l'instruction for
utilisation des tranches pour parcourir un sous-ensemble de la squence
rsultat de calcul aprs la boucle
Formatage de chanes
valeurs formater directives de formatage
Gnration de squences d'entiers
Fichiers
s = input("Directives:")
input retourne toujours une chane, la convertir vers le type
dsir (cf encadr Conversions au recto).
trs utilis pour les
boucles itratives for
range retourne un gnrateur, faire une conversion
en liste pour voir les valeurs, par exemple:
print(list(range(4)))
range(5) 0 1 2 3 4
range(3,8) 3 4 5 6 7
range(2,12,3) 2 5 8 11
range([dbut,] fin [,pas])
f = open("fic.txt","w",encoding="utf8")
stockage de donnes sur disque, et relecture
mode d'ouverture
'r' lecture (read)
'w' criture (write)
'a' ajout (append)
encodage des
caractres pour les
fichiers textes:
uft8 ascii
latin1
nom du fichier
sur le disque
(+chemin)
variable
fichier pour
les oprations
f.write("coucou")
en criture
fichier texte lecture / criture
de chanes uniquement, convertir
de/vers le type dsir
en lecture
s = f.read(4)
for ligne in f:
bloc de traitement de la ligne
cf fonctions des modules os et os.path
si nb de caractres
pas prcis, lit tout
le fichier
s = f.readline()
lecture ligne
suivante
f.close() ne pas oublier de refermer le fichier aprs son utilisation!
Fermeture automatique Pythonesque : with open() as f:
trs courant: boucle itrative de lecture des lignes d'un fichier texte:
Dfinition de fonction
def nomfct(p_x,p_y,p_z):
"""documentation"""
# bloc instructions, calcul de res, etc.
return res
nom de la fonction (identificateur)
valeur rsultat de l'appel.
si pas de rsultat calcul
retourner: return None
les paramtres et toutes les
variables de ce bloc n'existent
que dans le bloc et pendant l'appel la fonction (boite noire)
paramtres nomms
Appel de fonction
r = nomfct(3,i+2,2*i)
un argument par paramtre
rcupration du rsultat retourn (si ncessaire)
Oprations sur conteneurs
chane vide si fin de fichier
len(c)
min(c) max(c) sum(c)
sorted(c)
reversed(c)
modification de la liste originale
lst.append(item)
lst.pop(idx)
lst.sort() lst.reverse()
"{:+2.3f}".format(45.7273)
'+45.727'
"{1:>10s}".format(8,"toto")
' toto'
"{!r}".format("L'ame")
'"L\'ame"'
non compris par dfaut 0
Conversion : s (texte lisible) ou r (reprsentation littrale)
< > ^ = 0 au dbut pour remplissage avec des 0
entiers: b binaire, c caractre, d dcimal (dfaut), o octal, x ou X hexa
flottant: e ou E exponentielle, f ou F point fixe, g ou G appropri (dfaut),
% pourcentage
chane: s
Formatage :
car-rempl. alignement signe larg.mini.prcision~larg.max type
+ - espace
c.index(val) c.count(val)
nb d'lments
copie trie
itrateur invers
position nb d'occurences
lst.extend(seq)
ajout d'un lment la fin
ajout d'une squence d'lments la fin
lst.insert(idx,val) insertion d'un lment une position
lst.remove(val) suppression d'un lment partir de sa valeur
suppression de l'lment une position et retour de la valeur
tri / inversion de la liste sur place
Oprations sur dictionnaires Oprations sur ensembles
Oprateurs:
| union (caractre barre verticale)
& intersection
- ^ diffrence/diff symtrique
< <= > >= relations d'inclusion
d.update(d2) mise jour/ajout
des couples
Note: Pour dictionnaires et ensembles,
ces oprations travaillent sur les cls.
Spcifique aux conteneurs de squences (listes, tuples, chanes) :
val in c boolen, oprateur in de test de prsence (not in d'absence)
Oprations sur listes
d[cl]valeur del d[cl]
d[cl]=valeur
d.keys()
d.clear()
d.items()
d.values() vues sur les cls,
valeurs, couples
E
x
e
m
p
l
e
s
d.pop(cl)
s.update(s2)
s.add(cl) s.remove(cl)
s.discard(cl)
c*5 duplication c+c2 concatnation
Contrle de boucle
break
continue
sortie immdiate
itration suivante
Parcours simultan index et valeur de la squence:
for idx,val in enumerate(lst):
enumerate(c) itrateur sur (index,valeur)
Index
A
ADA, 3
aectation, 9
ALGOL, 3
algoiithme, 4, 43
alteinative, 18
aigument, 3
passage pai aectation, 3
ASCll, 93
auto-test, 40
B
Baithot, Stphane, iv
base, , 95
binaiie,
changement de, 9
hexadcimal,
octal,
Basic, 3
bibliotheque, 41
mathmatique, 42
standaid, 41
temps et dates, 43
bloc, 1
Boole, Geoige, 8
boucle, 19
dvnement,
paicouiii, 19
iptei, 19
bytecode, 1, 3
C
C, 1, 3
C, 1, 3
C-, 3
CD-ROM, 2
chaine, 11
concatnation, 11
longueui, 11
iptition, 12
COBOL, 3
commentaiie, 4
compilateui, 2
conception
association, 2
diivation, 2
giaphique, 9
console, 1
conteneui, 19, 23
Coideau
Bob, 8
Hlene, iv
D
dictionnaiie, 2
cl, 2
valeui, 2
division,
entieie,
ouante,
duck typing,
dcoiateui, 72
diivation, 53
dveloppement
diiig pai la documentation, 84
E
chappement, 1
Eiel, 3
encodage, 94
ensemble, 28
exception, 21
expiession,
gniatiice, 1
F
chiei, 29
ciituie squentielle, 29
lectuie squentielle, 30
textuel, 29
fonction, 33
application paitielle de, 8
diiective lambda,
incluse, 1
icuisive, 8
fonctions, 12
foimatage, 30
lORTRAN, 3
functoi, 3
G
gestionnaiie,
de contexte,
gniateui, 0
H
hiitage, 51
I
identicateui,
implmentation, 4
CPython, 4
lionPython, 4
Jython, 4
Pypy, 4
Stackless Python, 4
indexation, 13
instiuction, 1
compose, 1
inteifaces giaphiques,
inteipiteui, 2
intiospection,
ipython, ix
itiable, 19
J
Java, 3
K
Knuth, Donald, ix, 82
L
LabView, 3
langage
dassemblage, 2
de haut niveau, 2
machine, 2
LlSP, 3
liste, 23
liteiate piogiamming, 82
M
Meyei, Beitiand, ix
MODULA-2, 3
module, 39
impoit, 39
mot
iseiv,
mthode, 50
mthodes, 12
mthodologie
objet, 4
piocduiale, 4
O
opiateui, 8
de compaiaison, 8
logique, 8
opiation,
aiitmtique,
oidinateui, 2, 2
P
package, 2, 4
paquet, 4
paiametie
self, 0
PASCAL, 3
Peil, 3
Peteis, Tim, 8
PL/1, 3
polymoiphisme, 51
poite, 37
globale, 3
locale, 3
Piogiammation Oiiente Objet, 4
auiibut, 4
classe, 4
encapsulei, 4
instance, 4
mthode, 4
mthode spciale, 0
objet, 4
polymoiphisme, 1
POO, 4
suichaige, 1
piogiamme, 4
piopiit, 74
accesseui, 3
PSl, 1
Python, 2, 3, 88
pythonique, 9
R
RAM, 2
ieST, 81
Rossum, Guido van, 1
BDlL, 1
GvR, 1
Ruby, 3
ifiences, 2
S
saisie, 19
ltie, 19
sciipt, 2
Simula, 3
Smalltalk, 3
souice, 4
spydei, ix
suichaige, 50
squence, 20, 23
iuptuie de, 20
T
tableau, 2
associatif, 2
tcl/Tk, 3
test, 79
fonctionnel, 80
unitaiie, 9
tianche, 24
tianstypei, 1
Tievian, Ccile, iv, 8
tuple, 25
type,
binaiie, 14
bool, 8
complex, 9
oat, 8
int,
U
UAL, 2
UC, 2
Unicode, 93
USB, 2
V
vaiiable, 9
VB.NET, 3
VisualBasic, 3
W
widget, 58
Wingwaie, ix
X
XML, 44
Z
zen, 8
Ziad, Taiek, iv