J’ai écrit un mémento pour le langage Python (70 pages quand même), et un autre (60 pages) pour la bibliothèque Numpy (qui étend les capacités numériques de Numpy).
La petite référence Python
Survolez 💬 devant le titre pour une description.
- Noms, valeurs et affectations : une variable doit recevoir une valeur avant sa première utilisation. Typage dynamique, booléens et distinction entre affectation et comparaison. Variables : initialisation avant utilisation
- Affectation de plusieurs variables en une seule instruction. Échange de deux valeurs, permutations et ordre d’évaluation du membre droit. Variables : affectations simultanées
- Plusieurs instructions sur une même ligne grâce au point-virgule. Ordre d’exécution et distinction avec une affectation simultanée. Le séparateur d’instructions « ; »
- Règles de formation des identifiants et mots réservés du langage. Risques liés à la réutilisation du nom d’une fonction intégrée, comme len ou int. Noms de variables et mots réservés
- Panorama des fonctions intégrées : conversions de types, calculs, caractères, séquences, saisie et aide. Exemples d’appels et de valeurs renvoyées dans l’interpréteur. Quelques fonctions intégrées
- Édition, sauvegarde et exécution d’un script dans IDLE. Le tri par insertion sert d’exemple pour les commentaires, la documentation et les paramètres facultatifs. La fenêtre d’édition dans l’application Idle
- Importation d’un fichier personnel comme module : répertoire courant, chemin de recherche et espace de noms. Noms qualifiés, alias et importation de définitions particulières. Importer un module personnel en mode interactif
- Organisation de plusieurs modules de tri et d’un programme de test. Rôle de __name__ et du test __name__ == '__main__' pour distinguer importation et exécution directe. Importation simultanée de plusieurs modules personnels
Survolez 💬 devant le titre pour une description.
- Types bool, int, float et complex, et identification d’un type avec type. Écriture des nombres complexes et rôle du suffixe j. Quelques types (classes) de base
- Opérations sur les entiers, les flottants et les complexes. Division euclidienne, puissances, conversions, arrondis et accès aux composantes d’un nombre complexe. Opérations entre types numériques
- Affectations augmentées : +=, -=, *=, /= et leurs variantes. Écriture abrégée d’une opération suivie d’une réaffectation, avec des exemples numériques et des séquences. Les opérateurs avec assignation
- Importation et fonctions du module math : racine carrée, exponentielle, logarithmes, trigonométrie et arrondis. Différences entre nom qualifié, importation directe et alias. Les fonctions mathématiques du module math
- Fonctions mathématiques de cmath pour les nombres complexes. Argument, module et conversions entre coordonnées cartésiennes et polaires avec phase, polar et rect. Le module cmath
- Écriture des entiers en bases deux, huit et seize, puis conversions avec bin, oct et hex. Opérations bit à bit et décalages, distincts des opérations arithmétiques usuelles. Arithmétique des entiers
- Booléens, comparaisons simples ou enchaînées et opérateurs and, or et not. Priorités et évaluation des expressions logiques, notamment lorsque le résultat est déjà déterminé. Valeurs booléennes et comparaisons
- Égalité des valeurs avec == et identité des objets avec is. Références partagées, mutabilité et copie d’une liste : des exemples où deux variables ne sont pas indépendantes. Égalité structurelle et égalité physique
Survolez 💬 devant le titre pour une description.
- Saisie d’une chaîne avec input et conversion éventuelle en nombre. Affichage avec print, choix du séparateur et de la fin de ligne. Entrée au clavier (input) et affichage à l’écran (print)
- Blocs d’instructions dans les tests et les répétitions. Nécessité de regrouper les instructions et organisation des blocs emboîtés. Nécessité de délimiter des blocs d’instructions
- Indentation comme délimitation des blocs Python. En-têtes, clauses et suites d’instructions, avec les règles permettant de lire la structure d’un programme. L’importance fondamentale de l’indentation en Python
- Branchements if, elif et else. Succession des tests, sélection d’une branche et délimitation des instructions associées par l’indentation. Branchements conditionnels if...elif...else...
- Expression conditionnelle de la forme « valeur_si_vrai if condition else valeur_si_faux ». Choix d’une valeur selon un test et emboîtement d’expressions conditionnelles. Expressions conditionnelles
- Boucle while, condition de poursuite et sortie de boucle. Instructions break et continue, clause else et exemple de calcul des termes de la suite de Syracuse. Répétitions conditionnelles (while)
- Intervalles d’entiers construits avec range : borne initiale, borne finale exclue et pas. Parcours croissants ou décroissants, intervalles vides et tests d’appartenance. Notion d’intervalle
- Boucle for sur un intervalle ou une autre séquence. Parcours des éléments, instructions break et continue, et rôle de la clause else. Répétitions inconditionnelles (boucles for)
- Instruction pass : une instruction sans effet pour conserver un bloc syntaxiquement valide. Exemple d’une branche laissée vide pendant la mise au point d’un programme. L’instruction pass
Survolez 💬 devant le titre pour une description.
- Valeur None et fin d’exécution d’une fonction. Résultat transmis par return, absence de résultat explicite et distinction entre valeur renvoyée et affichage par print. La valeur None, et l’instruction return
- Espace de noms global, noms associés aux objets et inspection avec globals. Effet d’une importation et distinction entre l’espace du programme et celui d’un module. L’espace de noms global
- Paramètres et variables locales d’une fonction, inspection avec locals et fonctions emboîtées. Effet d’une modification d’objet mutable reçu en argument. L’espace de noms local d’une fonction
- Visibilité des noms dans des fonctions emboîtées et recherche d’une variable. Affectation locale, accès à un nom extérieur et déclaration global. Remarques sur les espaces de noms emboîtés
- Arguments positionnels ou nommés et paramètres munis d’une valeur par défaut. Ordre des arguments et différentes façons d’appeler une même fonction. Paramètres positionnels ou nommés, valeurs par défaut
- Traitement des erreurs avec try et except, sélection des exceptions interceptées et clause else. Déclenchement volontaire d’une exception et exemples d’erreurs usuelles. Rattrapage des exceptions
- Fonctions anonymes définies par lambda. Exemples de clés de tri et de petites fonctions transmises à map ou filter. Fonctions lambda
- Commentaires et chaînes de documentation d’une fonction. Exemple du tri par insertion, personnalisation par un paramètre fonctionnel et consultation de la documentation avec help. Documentation des fonctions
Survolez 💬 devant le titre pour une description.
- Opérations communes aux chaînes, tuples et listes : longueur, indices, tranches, appartenance et parcours. Concaténation, répétition et recherche d’un élément dans une séquence. Propriétés communes aux séquences (hors “mutations”)
- Séquences mutables ou non mutables, affectation et partage des références. Différence entre modification d’un objet existant et association d’un nom à un nouvel objet. Séquences mutables ou non
- Listes en compréhension : expression calculée, parcours et filtrage. Plusieurs clauses for et if, avec l’ordre d’évaluation des boucles emboîtées. Listes définies “en compréhension”
- Modification des éléments ou des tranches d’une liste, insertions et suppressions. Méthodes append, extend, pop et remove, puis distinction entre tri sur place et création d’une copie triée. Opérations de mutation de listes
- Tuples et séquences non mutables : construction, indices, tranches et opérations usuelles. Dépaquetage et différences de syntaxe et d’usage avec les listes. Les tuples
- Chaînes de caractères : écritures possibles, caractères spéciaux et accès par indices ou tranches. Méthodes de recherche, de comptage et de transformation. Les chaînes de caractères
- Découpage d’une chaîne avec split, assemblage avec join et mise en forme avec format. Exemples de construction de textes à partir de plusieurs valeurs. Méthodes importantes sur les chaînes (split, join, format)
- Caractères Unicode et séquences d’octets. Construction et manipulation des objets bytes, puis opérations de modification permises par bytearray. Objets de type bytes et bytearray
Survolez 💬 devant le titre pour une description.
- Dictionnaires : associations entre clés et valeurs, accès, mise à jour et suppression. Parcours des clés ou des éléments et construction par compréhension. Dictionnaires
- Ensembles : création, appartenance et modification. Inclusion, disjonction, réunion, intersection et différences, avec les opérations correspondantes du type set. Ensembles
- Itérateurs et production des valeurs à la demande. Avancement par next, épuisement signalé par StopIteration et conversion en liste. Itérateurs
- Parcours indexé avec enumerate et parcours simultané avec zip. Tests globaux avec any et all, puis parcours en sens inverse avec reversed. Fonctions utiles sur les itérateurs
- Générateurs définis avec yield et suspension de l’exécution entre deux valeurs. La suite de Fibonacci illustre la différence entre une fonction et un générateur. Générateurs (instruction yield)
- Fichiers texte ou binaires : modes d’ouverture, lecture, écriture et fermeture. Parcours ligne par ligne et sauvegarde ou restitution d’objets avec pickle. Fichiers
Survolez 💬 devant le titre pour une description.
- Tirages pseudo-aléatoires du module random : nombres dans un intervalle, choix d’un élément, mélange d’une liste et échantillonnage sans remise. Le module random
- Nombres Decimal et choix de la précision des calculs. Exemples mettant en regard l’arithmétique décimale et les approximations des nombres flottants. Le module decimal
- Nombres rationnels représentés par Fraction. Construction à partir d’entiers, de chaînes ou de flottants, et calcul exact sur les fractions. Le module fractions
- Constantes du module string : lettres, chiffres, ponctuation et caractères imprimables. Ensembles de caractères prêts à l’emploi dans les traitements de textes. Le module string
- Itérateurs du module itertools : suites, répétitions, accumulations et enchaînements de parcours. Produits cartésiens, permutations et combinaisons. Le module itertools
- Opérations représentées par des fonctions du module operator. Calcul cumulatif sur une séquence avec functools.reduce. Les modules operator et functools
- Dates, temps et durées avec le module time. Conversions entre représentations temporelles, pauses et comparaison de temps d’exécution. Le module time
- Compteurs d’occurrences avec Counter : construction, fréquences et opérations sur les compteurs. Exemples d’utilisation dans des tirages et simulations. La classe Counter du module collections
- Files à deux extrémités avec deque : ajouts, retraits et rotations. Longueur éventuellement limitée et comparaison avec les opérations sur une liste. La classe deque du module collections
- Tas binaires du module heapq et propriété d’ordre entre parents et enfants. Extraction des plus petites ou plus grandes valeurs et fusion d’itérables déjà triés. Le module heapq
- Recherche dichotomique d’une position d’insertion dans une liste triée. Choix du côté en présence d’égalités et insertion préservant l’ordre avec bisect. Le module bisect
- Copies superficielles et profondes avec copy et deepcopy. Partage des objets contenus dans une structure imbriquée, illustré par des listes de listes. Le module copy
- Modules et ressources complémentaires : chemins d’accès, système, fichiers, sérialisation et interfaces graphiques. Adresses de documentation pour prolonger les exemples du cours. Autres modules et adresses utiles
La petite référence NumPy
Survolez 💬 devant le titre pour une description.
- Construction d’un tableau homogène ndarray avec array, à partir de séquences simples ou imbriquées. Type des éléments, importation de NumPy et conversion d’un tableau en liste. Création de tableaux avec array
- Forme d’un tableau, nombre d’axes et nombre d’éléments. Attributs shape, ndim et size, et informations de dimension selon l’axe considéré. Attributs de dimension d’un tableau
- Type commun des éléments d’un tableau, indiqué par dtype. Choix automatique du type lors de la création et conversions nécessaires pour représenter toutes les valeurs. Le « data type » d’un tableau
- Conversion du type des éléments par astype, avec création d’une copie. Taille mémoire d’un élément et du tableau à l’aide de itemsize et nbytes. Copie d’un tableau avec conversion de « data type »
- Types NumPy entiers signés ou non, flottants, complexes, booléens et chaînes. Tailles de représentation et principales familles de dtype. Les différents « data types » disponibles
- Tableaux complexes, parties réelle et imaginaire et conjugaison. Module et argument des éléments, avec les fonctions abs et angle. Tableaux de nombres complexes
Survolez 💬 devant le titre pour une description.
- Accès aux éléments d’un vecteur par indice et sélection de tranches. Bornes, pas, indices négatifs et parcours en sens inverse. Lecture de valeurs dans un vecteur, « slicing »
- Indices de ligne et de colonne d’une matrice. Sélection d’un élément, d’une ligne, d’une colonne ou d’une sous-matrice par combinaison d’indices et de tranches. Lecture de valeurs dans une matrice
- Affectation d’une valeur à un élément ou à une tranche d’un vecteur. Compatibilité des valeurs affectées avec le type et la taille de la sélection. Écriture de valeurs dans un vecteur
- Affectation d’éléments, de lignes, de colonnes ou de blocs d’une matrice. Rôle de la forme du tableau fourni et exemples de sélections par tranches. Écriture de valeurs dans une matrice
- Copies indépendantes et vues partageant les mêmes données. Effets d’une modification, méthode copy et attribut base pour reconnaître les liens entre tableaux. Copies de tableaux, « vues » sur des tableaux
- Sélections par tableaux d’indices ou masques booléens. Lecture et modification ciblées avec take, put, place et copyto. « Fancy indexing »
Survolez 💬 devant le titre pour une description.
- Changement de forme d’un tableau avec reshape ou resize. Différences entre méthodes et fonctions, modification sur place ou nouveau tableau et ajustement du nombre d’éléments. Redimensionnement par « reshape » ou « resize »
- Aplatissement d’un tableau avec flatten, ravel ou flat. Ordre de parcours par lignes ou colonnes et distinction entre copie, vue et itérateur. Aplatissement d’un tableau
- Transposition d’une matrice par échange des indices de ligne et de colonne. Fonction transpose et lecture du tableau obtenu. Transposition d’une matrice
- Suppressions avec delete, insertions avec insert et ajouts avec append. Choix de l’axe pour agir sur les éléments, les lignes ou les colonnes. Suppressions/insertions de lignes, de colonnes
- Retournement horizontal ou vertical, rotations d’un quart de tour et décalages circulaires. Fonctions fliplr, flipud, rot90 et roll, puis échange d’axes avec swapaxes. Permutations/rotations de lignes, de colonnes
- Assemblage de tableaux par concaténation horizontale ou verticale et découpage en blocs. Fonctions hstack, vstack, hsplit et vsplit, puis répétition d’un motif avec tile. Opérations par blocs
Survolez 💬 devant le titre pour une description.
- Tableaux de zéros ou de uns et remplissage par une constante. Forme imposée ou reprise d’un tableau existant avec zeros_like et ones_like. Tableaux constants
- Matrices identité, diagonales et triangulaires. Construction, extraction ou modification d’une diagonale et choix d’une partie triangulaire avec les fonctions dédiées. Identité, matrices diagonales ou triangulaires
- Valeurs échelonnées avec arange, linspace et logspace. Choix d’un pas ou d’un nombre de points, espacement linéaire ou logarithmique et conventions sur les bornes. Tableaux de valeurs échelonnées
- Construction d’un tableau à partir d’une formule portant sur ses indices avec fromfunction. Exemples de la matrice de Hilbert et des matrices de Vandermonde. Tableaux répondant à une formule donnée
- Tableaux pseudo-aléatoires réels ou entiers et choix de leur forme. Graine, tirages, choix d’éléments et permutations avec les fonctions de numpy.random présentées dans le cours. Tableaux pseudo-aléatoires
- Simulations de lois discrètes : binomiale, géométrique, binomiale négative, hypergéométrique, multinomiale et Poisson. Paramètres des lois et taille des échantillons. Probabilités, lois discrètes usuelles
- Simulations de lois continues : uniforme, exponentielle et normale. Paramètres de position ou d’échelle et production de tableaux d’échantillons. Probabilités, lois continues usuelles
Survolez 💬 devant le titre pour une description.
- Opérations arithmétiques élément par élément et fonctions universelles associées. Distinction entre multiplication des éléments et produit matriciel. Opérations arithmétiques
- Fonctions universelles trigonométriques, hyperboliques, exponentielles et logarithmiques. Application aux éléments d’un tableau, conversions d’angles et fonctions numériques usuelles. Fonctions mathématiques usuelles
- Arguments de sortie des fonctions universelles. Écriture d’un résultat dans un tableau fourni, contraintes de type et variantes de syntaxe. Variantes de syntaxe
- Adaptation d’une fonction Python aux tableaux avec vectorize. Fonctions définies par morceaux, application selon un axe et opérations reduce, accumulate ou reduceat. Vectorisation d’une fonction
- Négation, conjonction, disjonction et ou exclusif sur des tableaux booléens. Fonctions logical_not, logical_and, logical_or et logical_xor. Opérations logiques sur tableaux booléens
- Opérations bit à bit sur les tableaux d’entiers : et, ou, ou exclusif et complément. Décalages à gauche ou à droite avec les fonctions NumPy correspondantes. Opérations binaires sur les tableaux d’entiers
Survolez 💬 devant le titre pour une description.
- Comparaisons élément par élément et test d’égalité de tableaux entiers. Égalité approchée avec allclose et traitement de valeurs presque réelles avec real_if_close. Comparaisons entre tableaux
- Tri d’un tableau sur place ou dans une copie. Indices de classement avec argsort et cas des tableaux de nombres complexes. Tris de tableau
- Minimum, maximum et étendue d’un tableau, globalement ou selon un axe. Positions des valeurs extrêmes avec argmin et argmax. Minimum et maximum
- Tests any et all, positions et nombre des éléments non nuls. Sélections conditionnelles avec where ou extract et recherche d’une position dans un tableau trié avec searchsorted. Recherches dans un tableau
- Éléments distincts d’un tableau et tests d’appartenance. Intersection, réunion, différence et différence symétrique avec les fonctions ensemblistes de NumPy. Tableaux d’un point de vue ensembliste
- Sommes et produits globaux ou cumulés, différences successives et gradient numérique. Produit vectoriel et approximation d’une intégrale par la méthode des trapèzes. Sommes, produits, différences
- Moyenne, variance, écart-type, covariance et corrélation. Moyennes pondérées, médiane, percentiles et histogrammes à une ou plusieurs dimensions. Calculs statistiques, histogrammes
Survolez 💬 devant le titre pour une description.
- Combinaisons linéaires de vecteurs ou de matrices. Trace et sommes sur les diagonales décalées, avec une présentation de la fonction einsum. Opérations linéaires
- Produits scalaires ou hermitiens, produits matriciels et puissances de matrices. Produits extérieurs, produits de Kronecker et contractions de tableaux. Produits matriciels
- Inverse et déterminant d’une matrice, résolution d’un système linéaire et moindres carrés. Fonctions de numpy.linalg et extensions aux tableaux de dimension supérieure. Inversion de matrices, résolution de systèmes
- Normes de vecteurs et de matrices selon le paramètre choisi. Nombre de conditionnement d’une matrice et calcul d’une pseudo-inverse. Normes matricielles et vectorielles
- Valeurs propres seules ou accompagnées de vecteurs propres. Fonctions générales eigvals et eig, et versions adaptées aux matrices symétriques ou hermitiennes. Valeurs et vecteurs propres
- Décomposition de Cholesky d’une matrice symétrique définie positive, puis factorisation QR. Vérification des produits reconstruits et mention de la décomposition en valeurs singulières. Décompositions matricielles
Survolez 💬 devant le titre pour une description.
- Polynômes représentés par poly1d : construction à partir de coefficients ou de racines, évaluation et opérations. Dérivation, intégration et division polynomiale. La classe poly1d
- Organisation de numpy.polynomial et représentation d’un polynôme par ses coordonnées dans une base. Bases canonique, de Chebyshev, de Legendre, de Laguerre et d’Hermite. Le package numpy.polynomial
- Classe Polynomial : coefficients, domaine et fenêtre, évaluation et opérations. Dérivation, intégration, racines, degré et outils d’approximation. La classe « Polynomial »
- Classes associées aux bases de polynômes orthogonaux, notamment Chebyshev. Polynômes de base, domaine et fenêtre, puis conversion d’une représentation à une autre. Les classes « Chebyshev », etc
Abrégé de syntaxe et exercices
À ce jour, j'ai rédigé une soixantaine d'exercices du Project Euler. Vous trouverez ici mes solutions à quelques-uns des tous premiers énoncés (réponses écrites en Python). Je vous engage à essayer de répondre par vous-même aux problèmes posés avant de consulter les solutions.
- Euler 001: somme des entiers de [0,N[ divisibles par 3 ou par 5
- Euler 002: somme des nombres de Fibonacci pairs et inférieurs à N
- Euler 003: fonction donnant le plus grand facteur premier de N
- Euler 004: palindrome max produit de deux entiers à trois chiffres
- Euler 005: plus petit entier >0 et divisible par les entiers de 1 à N
- Euler 006: fonction calculant \bigl(\sum_{k=1}^{n}k\bigr)^{2}-\sum_{k=1}^{n}k^{2}
- Euler 007: fonction renvoyant le n-ième nombre premier
- Euler 008: produit max de 5 chiffres consécutifs de n (1000 chiffres)
- Euler 009: triplets rectangulaires de somme donnée
- Euler 010: somme des entiers premiers strictement inférieurs à N
- Euler 011: produit max de 4 nombres adjacents d'une grille 20\times 20
- Euler 012: plus petit nombre triangulaire ayant plus de N diviseurs
- Euler 013: dix premiers chiffres de la somme de cent nombres
- Euler 014: plus longue suite avant retour à 1 dans suite de Collatz
- Euler 015: nombre de déplacements dans une grille
- Euler 016: somme des chiffres de la représentation décimale de 2^{N}
- Euler 017: combien de lettres pour les nombres de 1 à 1000 en anglais
- Euler 018: somme max des parcours d'une grille triangulaire
- Euler 019: combien de 1ers du mois sont un dimanche, de 1901 à 2001
- Euler 020: somme des chiffres de l'écriture décimale de l'entier N!
- Euler 021: somme des paires d'amiables strictement inférieurs à N
- Euler 022: total des scores dans un fichier de 5000 noms
- Euler 023: somme des n>0 qui ne sont pas somme de deux abondants
- Euler 024: N-ième permutation lexicographique de '0123456789'
- Euler 025: indice du plus petit nombre Fibonacci F_{n} à N chiffres
- Euler 026: pour quel d < N la période de 1/d est-elle maximum?
- Euler 029: entiers distincts parmi les a^{b} avec a,b entiers, 2\le a,b < N
- Euler 030: entiers \ge2 sommes des puissances 5èmes de leurs chiffres
- Euler 031: façons de payer une somme s avec des pièces d'une liste p
- Euler 032: produits n=pq contenant une seule fois les chiffres 1 à 9
- Euler 033: fractions xy/yz qui se simplifient en x/z
- Euler 034: entiers qui sont sommes des factorielles de leurs chiffres