Python
Apprentissage actif pour l'étudiant et le futur enseignant
Jean-Paul Roy
Ellipses
I L'essentiel du langage1
1 Environnement de programmation
3
1.1 Installation de la distribution Anaconda3
1.2 L'éditeur IDLE et sa console4
1.3 Le gestionnaire de paquets conda5
1.4 L'interface graphique : Anaconda Navigator9
1.5 Un autre IDE pour Anaconda : Spyder10
1.5.1 L'éditeur de Spyder11
1.5.2 La console de Spyder11
1.6 Le projet Jupyter12
1.6.1 Les notebooks de Jupyter13
1.6.2 Jupyter Lab15
1.7 Conclusion15
2 Variables, nombres et fonctions
17
2.1 Qu'est-ce qu'une variable ?17
2.2 Qu'est-ce qu'un type ?18
2.3 Le type int des nombres entiers20
2.4 Les nombres flottants20
2.5 Les nombres complexes22
2.6 Qu'est-ce qu'un module en Python ?22
2.7 Donc pas de nombres rationnels en Python ?24
2.8 L'égalité est-elle fiable sur les nombres flottants ?24
2.9 L'infini existe-t-il en programmation ?25
2.10 Qu'est-ce que la priorité d'un opérateur ?25
2.11 Comment construire couples, triplets, etc. ?26
2.12 Quelle différence entre expression et instruction ?27
2.13 Les expressions booléennes28
2.14 Les instructions conditionnelles30
2.15 Comment tirer un nombre au hasard ?32
2.16 Fonction, paramètres et variables locales32
2.17 Qu'est-ce qu'une variable globale ?34
2.18 Les différentes formes de paramètres36
2.19 Les arguments optionnels de la fonction print37
2.20 Les lambda-expressions38
2.21 Comment documenter une fonction ?40
2.22 Quelle est la différence entre fonction et méthode ?41
2.23 Qu'est-ce qu'une fonction récursive ?41
2.23.1 Suivre une fonction à la trace43
2.23.2 Le rôle de la pile de récursion44
2.24 La boucle while47
2.25 La boucle for49
2.26 Comment interrompre brutalement une boucle ?51
2.27 Le calcul d'une somme en compréhension51
2.28 La complexité d'un calcul52
3 Traitement du texte : les bases
55
3.1 Les caractères Unicode55
3.2 Les textes sont des chaînes de caractères56
3.3 Comment programmer avec des chaînes ?59
3.4 Les chaînes formatées60
3.5 Une chaîne peut-elle contenir du code Python ?61
4 Dessiner
65
4.1 Le graphisme de la tortue65
4.1.1 La fenêtre graphique65
4.1.2 Le graphisme cartésien66
4.1.3 Le graphisme polaire69
4.1.4 Une courbe fractale70
4.2 Le système Processing.py72
4.3 Stéganographie avec le module Pillow75
5 Les collections d'objets
79
5.1 Collections et séquences79
5.2 Les listes sont des séquences mutables79
5.3 Les constructions fonctionnelles de listes81
5.4 Déstructuration d'un objet itérable83
5.5 Suppression d'objets avec del84
5.6 Listes et partage de mémoire84
5.7 Les ensembles88
5.8 Les dictionnaires90
5.9 Gestion des erreurs : les exceptions93
6 Les entrées-sorties
97
6.1 Le système de fichiers et le module os97
6.2 Ecriture dans un fichier texte sur disque (en sortie)99
6.3 Lecture d'un fichier texte sur disque (en entrée)100
6.3.1 La construction with102
6.3.2 L'utilisation de split103
6.4 Des fichiers en mémoire centrale103
6.5 Exécution d'un script Python au terminal104
7 Les objets et les classes
107
7.1 Définition d'une nouvelle classe d'objets107
7.2 Les attributs de classe112
7.3 Utilisation des méthodes spéciales114
7.4 Boucle for et méthodes spéciales : les itérateurs114
7.5 Les générateurs116
7.6 Les objets soft117
7.7 La hiérarchie des classes118
7.8 Les classes abstraites121
7.9 Qu'est-ce qu'un décorateur ?122
8 Traitement avancé du texte
125
8.1 Expressions régulières : le module re125
8.1.1 Présence d'une sous-chaîne dans une chaîne126
8.1.2 Les méta-caractères d'un motif127
8.1.3 Remplacements dans une chaîne130
8.2 Analyse lexicale avec l'outil lex131
8.2.1 Installation avec pip131
8.2.2 Programmation d'un analyseur lexical132
8.3 Analyse syntaxique avec l'outil yacc134
8.4 Recherche de texte dans une page Web : requests138
9 Les interfaces graphiques (GUI)
139
9.1 Le module tkinter139
9.1.1 La programmation dirigée par les évènements139
9.1.2 La fenêtre du programme140
9.1.3 Dessiner avec les classes Canvas et Button141
9.1.4 L'interface graphique comme sous-classe de Tk144
9.1.5 Les options du gestionnaire pack145
9.1.6 Gestion des évènements souris et clavier145
9.1.7 Variables de contrôle148
9.1.8 Compléments sur les évènements souris150
9.1.9 Animation en style MVC avec tkinter152
9.1.10 La tortue dans une interface graphique155
9.2 Programmer une animation avec pyglet156
10 De Java vers Python
159
10.1 Le typage : fort ou dynamique ?159
10.2 Les boucles161
10.3 Les listes162
10.4 Les classes d'objets163
11 Exercices
167
Nombres, fonctions, boucles
11.1 Valeur d'une expression167
11.2 Quotient et reste. Écriture binaire d'un entier167
11.3 Écriture binaire d'un nombre flottant167
11.4 Avec ou sans résultat ?168
11.5 Heures - minutes - secondes169
11.6 Décomposition en sous-fonctions169
11.7 Une fonction, comment ça marche ?169
11.8 Addition relativiste des vitesses170
11.9 La formule de Stirling170
11.10 Payez vos impôts !170
11.11 Une variable locale dans une lambda ?171
11.12 Tirage au hasard de nombres entiers171
11.13 Nombres fractionnaires (rationnels)172
11.14 Solutions complexes d'une équation de degré 2172
11.15 Nombres complexes et géométrie plane172
11.16 La division euclidienne dans les entiers173
11.17 Travail arithmétique sur les chiffres d'un entier173
11.18 Boucles for emboîtées174
11.19 Calcul de xn par dichotomie174
11.20 Tester si un nombre entier est premier (naïf)174
11.21 Nombres premiers entre eux. Le PGCD175
11.22 Calcul de ab modulo n dans les grands entiers176
11.23 Tester si un grand nombre est premier (Fermat)176
11.24 Calcul des nombres de Fibonacci177
11.25 Vérification qu'un dé est correctement truqué178
11.26 Dérivation numérique approchée179
11.27 Approximation numérique d'un sinus180
11.28 Valeur approchée d'une intégrale simple180
11.29 Coût du (temps de) calcul de n !182
11.30 Rectification d'un arc paramétré183
11.31 Valeur approchée d'une intégrale double184
11.32 Centre de gravité d'une figure plane185
11.33 Solution approchée d'une équation (dichotomie)185
11.34 Solution approchée d'une équation (Newton)186
11.35 Régime d'un système dépendant du temps186
11.36 Cryptographie à clé publique (RSA/1)187
Chaînes de caractères
11.37 Affichage d'une table de multiplication188
11.38 Construction de l'alphabet minuscule188
11.39 Les plus longs mots d'une phrase188
11.40 Travail textuel sur les chiffres d'un entier189
11.41 Récurrence sur des chaînes189
11.42 Le codage secret selon César190
11.43 Les palindromes190
11.44 Le nombre de Champernowne191
11.45 Vérification d'un code bancaire IBAN191
11.46 Les règles de réécriture192
11.47 L'addition binaire avec retenue192
11.48 Analyse lexicale à la main193
11.49 HTML et Unicode194
Graphisme de la tortue, Processing
11.50 Graphismes polaire et cartésien194
11.51 Tracé d'un cercle avec centre et rayon195
11.52 Mangez des oursins !195
11.53 Un traceur minimal de courbes paramétrées195
11.54 Dessin d'une courbe en coordonnées polaires196
11.55 Le jeu du chaos197
11.56 Une courbe fractale du dragon197
11.57 La tortue, le hasard et les flaques198
11.58 Génération d'une fractale par un L-système199
11.59 Graphisme avec Processing.py200
Les séquences
11.60 Tirage d'un élément aléatoire dans une séquence202
11.61 Courbe d'un système dépendant du temps203
11.62 Inversion des mots d'une phrase203
11.63 Recherche séquentielle dans une liste non triée203
11.64 Comptage d'éléments dans une collection204
11.65 Extraction d'éléments dans une séquence204
11.66 Recherche dichotomique dans une liste triée205
11.67 Compactage d'une liste205
11.68 Le drapeau hollandais de Dijkstra206
11.69 Les fonctionnelles map et reduce207
11.70 Vérification des éléments d'une collection208
11.71 Attention aux mutations dans les listes !208
11.72 Le triangle de Pascal209
11.73 Tri stupide d'une liste209
11.74 Tri d'une liste sur place, par sélection211
11.75 Chronométrage d'un algorithme sur une longue liste aléatoire211
11.76 Tri par insertion : récurrence et itération212
11.77 Tri d'une liste avec copie, par fusion213
11.78 Tri rapide214
11.79 Trier sur des critères exotiques215
11.80 Crible d'Ératosthène pour les nombres premiers215
11.81 Cryptographie à clé publique (RSA/2)216
11.82 Unicode et les bizarreries typographiques217
11.83 Opérations sur des matrices218
11.84 Construction d'un carré magique d'ordre impair219
11.85 Message caché dans une image220
11.86 Automates cellulaires 1-D220
11.87 Les piles de données222
11.88 Retour sur la pile de récursion223
11.89 Polynômes creux225
11.90 Polynômes de Legendre227
11.91 Polynôme d'interpolation de Lagrange228
11.92 Racines simples d'un polynôme (1)229
11.93 Racines simples d'un polynôme (2)231
Itérateurs, ensembles et dictionnaires
11.94 Fermeture-éclair : l'itérateur zip232
11.95 Générateur des éléments distincts d'une liste233
11.96 Réunion et intersection de listes233
11.97 Produit cartésien d'ensembles234
11.98 Combinaisons dans un ensemble234
11.99 Dictionnaires et fréquences235
11.100 Mémorisation : remplacer le temps par l'espace236
11.101 Automate cellulaire 2-D : le Jeu de la Vie237
11.102 Arbres binaires d'expression239
11.103 La machine à pile VRISC1242
11.104 La machine VRISC2 : les sauts à étiquette243
11.105 Parcours itératif d'un arbre binaire245
11.106 Introduction à la simplification symbolique246
11.107 L'algorithme de dérivation symbolique248
11.108 Calcul numérique avec numpy250
11.109 Ajustement numérique d'une courbe avec scipy253
Expressions régulières
11.110 Quelques expressions régulières255
11.111 Mais tout n'est pas régulier !256
11.112 Fin de l'analyseur lexical du § 8.2 avec lex257
11.113 Fin de l'analyseur syntaxique du § 8.3 avec yacc258
11.114 Une calculette interactive avec lex & yacc259
11.114.1 L'analyseur lexical (lexer)260
11.114.2 L'analyseur syntaxique (parser)261
11.114.3 L'évaluateur262
11.115 Retour sur les cpbb à dos de yacc264
Fichiers, Web
11.116 Écriture dans un fichier texte sur disque264
11.117 Lecture d'un fichier texte sur disque265
11.118 Lecture d'un fichier au format CSV265
11.119 Transformation d'un fichier texte sur disque266
11.120 Construction d'un graphique Excel en Python266
11.121 Trouver une heure locale sur Internet268
11.122 Échange de données au format JSON269
11.123 Sérialisation des données : json ou pickle ?270
11.124 Lancer un programme à heure donnée : cron271
11.125 Dissection d'une page HTML avec Beautiful Soup272
Objets
11.126 Classe des matrices n x p sans numpy276
11.127 Naissance d'une tortue avec Processing.py277
11.128 Incursion dans le graphisme 3D281
11.129 Ajustement par programmation génétique283
11.130 Introduction au moteur physique pymunk286
11.131 Moteur physique appliqué : pendule de Newton292
11.132 Décoration de la récurrence terminale294
11.133 Neurones : le perceptron295
11.134 Neurones : la rétro-propagation (théorie)298
11.135 Neurones : la rétro-propagation (pratique)301
11.136 Programmation audio (théorie)304
11.137 Programmation audio avec Beads (pratique)308
Bibliographie
313
Index
317