def add(a, b):
res = a + b
return res1 Introduction
Python est un langage de programmation phare dans le monde scientifique. Il est parfaitement adapté pour programmer des problèmes mathématiques. Cet ouvrage propose de se focaliser sur l’utilisation pratique du langage Python dans différents domaines des mathématiques : les suites, l’algèbre linéaire, l’intégration, la théorie des graphes, la recherche de zéros de fonctions, les probabilités, les statistiques, les équations différentielles, le calcul symbolique, et la théorie des nombres. À travers 55 exercices de difficulté croissante, et corrigés en détails, il permet d’avoir une bonne vision d’ensemble des possibilités d’utilisation de la programmation dans les mathématiques et d’être à même de résoudre des problèmes mathématiques complexes.
Il n’est pas nécessaire de faire les exercices dans l’ordre proposé, même si certains exercices font parfois appel à des notions vues dans des exercices précédents. Les exercices plus difficiles sont indiqués par des points d’exclamation:
- ! : plus long ou plus difficile;
- !! : passablement long et complexe;
- !!! : défi proposé sans correction.
Le séparateur décimal utilisé dans cet ouvrage est le point et non pas la virgule, afin de se conformer avec l’usage international employé par Python et éviter les confusions. Merci à Marie Postel et Nicolas Lantos pour leurs relectures attentives de la première version de ce recueil et pour les nombreuses corrections et suggestions. Pour cette seconde édition, un merci particulier à Johann Faouzi et Louis Thiry. Merci également aux membres des équipes pédagogiques de Sorbonne Université ayant utilisé ces exercices pour leurs retours et contributions: Mathieu Barré, Constantin Bône, Jules Bonnard, Cédric Boutillier, Thibault Cimic, Jeanne Decayeux, Cécile Della Valle, Guillaume Duboc, Jean-Jil Duchamps, Jean-Merwan Godon, Elise Grosjean, Cindy Guichard, Nicolas Lantos, Mathieu Mari, David Michel, Leo Miolane, Anouk Nicolopoulos, Arnaud Padrol, Diane Peurichard, Marie Postel, Xavier Poulot-Cazajous, Alexandre Rege, Othmane Safsafi, Emmanuel Schertzer, Agustín Somacal, Didier Smets, Robin Strudel, Gauthier Tallec, Nicolas Thomas, Paul Vernhet, Jules Vidal et Raphaël Zanella. Finalement merci aux étudiantes et aux étudiants ayant planché sur ces exercices pour leurs retours constructifs qui ont contribué à l’amélioration du présent recueil. La lectrice attentive ou le lecteur attentif est remercié·e par avance pour tout signalement de coquilles ou autres. Python est un langage généraliste de programmation interprété qui a la particularité d’être très lisible et pragmatique. Il dispose d’une très grosse base de modules externes, notamment scientifiques, qui le rend particulièrement attractif pour programmer des problèmes mathématiques. Le fait que Python soit un langage interprété le rend plus lent que les langages compilés, il assure en revanche une grande rapidité de développement qui permet à l’humain de travailler un peu moins tandis que l’ordinateur devra travailler un peu plus. Cette particularité fait que Python est devenu l’un des principaux langages de programmation utilisés par les scientifiques. Cet ouvrage n’a pas pour but premier d’exposer la syntaxe et les principes du langage Python, aussi les prérequis sont-ils d’en connaître les bases. Il existe de nombreuses ressources pour se mettre à jour en cas de besoin, par exemple: Par ailleurs la réalisation des exercices demande d’avoir accès à un ordinateur ou un service en ligne disposant de Python 3.6 (ou plus récent) complété par les modules suivants: NumPy, Scipy, SymPy, Matplotlib, Numba, NetworkX et Pandas. L’emploi d’un éditeur de code permettant l’écriture en Python est aussi vivement conseillé. Il est ici suggéré d’utiliser Jupyter Lab, qui permet à la fois l’écriture des notebooks interactifs et des scripts et également l’ajout de ses propres solutions en dessous des énoncés, ce qui est très pratique. Il n’est pas indispensable d’utiliser Jupyter Lab, d’autres environnements sont aussi adaptés, notamment Spyder ou Jupyter Notebook. Les sections suivantes décrivent comment installer et lancer l’environnement Python ou l’utiliser en ligne sans installation. Il n’est généralement pas utile (ni souhaitable) de connaître toutes les fonctions et subtilités du langage Python lors d’une utilisation occasionnelle. Par contre il est indispensable de savoir utiliser la documentation de manière efficace. La documentation officielle est disponible à l’adresse https://docs.python.org/. La langue et la version peuvent être sélectionnées en haut à gauche. Il est fortement conseillé de regarder comment la documentation est écrite et d’apprendre à l’utiliser. Les personnes ne pouvant ou ne voulant pas installer Python peuvent directement se rendre à la Section 1.6 pour des alternatives disponibles en ligne sans installation. Il existe essentiellement trois façons d’installer Python et les modules requis pour réaliser les exercices: La façon la plus simple d’installer Python 3 et toutes les dépendances nécessaires sous Windows et MacOS est d’installer Miniforge puis d’installer les modules nécessaires manuellement. La documentation détaillée est disponible ici. En résumé la procédure d’installation est la suivante: Télécharger Miniforge depuis: https://conda-forge.org/download/. Double-cliquer sur le fichier téléchargé pour lancer l’installation de Miniforge, puis suivre la procédure d’installation. Une fois l’installation terminée, lancer Miniforge Prompt à partir du menu Démarrer ou de la liste des applications. Dans le terminal, taper la commande: La plupart des distributions Linux permettent d’installer facilement Python et les modules les plus standard directement à partir des dépôts qu’elles incluent. La procédure suivante concerne Ubuntu, mais s’adapte facilement aux autres distributions. Installer Python 3: Mettre à jour Pip: Installer les modules NumPy, Scipy, SymPy, Matplotlib, Numba, NetworkX et Pandas: Jupyter Lab n’étant pas disponible dans les paquets d’Ubuntu, il faut l’installer avec Pip: De manière optionnelle (mais conseillée), installer l’interface LSP, avec la commande: La procédure suivante décrit l’installation manuelle de modules avec le gestionnaire Pip dans un environnement virtuel. Si Python n’est pas déjà préinstallé sur votre système d’exploitation, installer Python depuis: https://www.python.org/downloads/. Créer un environement virtuel en tapant la commande suivante dans un terminal: Activer l’environement virtuel, sous Windows en tapant: et sous MacOS ou Linux en tapant: Installer les modules requis en tapant la ligne de commande suivante dans un terminal: Avec Miniforge, lancer Anaconda Prompt à partir du menu Démarrer ou de la liste des applications. Dans les autres cas, simplement ouvrir un terminal (si un environnement virtuel a été créé, ne pas oublier de l’activer). Ensuite, pour lancer Jupyter Lab en ligne de commande, il faut taper Remarque: Si le navigateur par défaut est un snap (c’est le cas par défaut sous Ubuntu par exemple), le navigateur renvoie une erreur de fichier non accessible. Pour résoudre ce problème éxécuter la ligne suivante dans un terminal: Pour les personnes ne pouvant ou ne voulant pas installer Python et les dépendances nécessaires sur leur propre ordinateur, il est possible d’utiliser Jupyter Lab en ligne avec Une fois Jupyter Lab lancé, la fenêtre représentée à la Figure 1.1 doit apparaître dans un navigateur. Jupyter Lab permet essentiellement de traiter trois types de documents: les notebooks, les scripts et les terminaux. Un notebook est constitué de cellules qui peuvent contenir soit du code soit du texte au format Markdown. Les cellules de code peuvent être évaluées de manière interactive à la demande, ce qui permet une grande flexibilité. Les cellules de texte peuvent contenir des commentaires, des titres ou des formules LaTeX comme représenté sur la Figure 1.2. Un script Python est simplement un fichier texte contenant des instructions Python. Il s’exécute en entier de A à Z et il n’est pas possible d’interagir interactivement avec lui pendant son exécution (à moins que cela n’ait été explicitement programmé). Pour exécuter un script Python il est nécessaire d’ouvrir un terminal. Commandes de base: La documentation détaillée de Jupyter Lab est disponible ici. Les versions récentes de Jupyter Lab (3 et suivantes avec un ipykernel supérieur à 6) sont dotées d’un débogueur et d’une interface LSP (Language Server Protocol) particulièrement utiles. Le débogueur permet de trouver des erreurs dans le code en arrêtant le programme à des points particuliers pour comprendre ce qui se passe. La documentation et un tutoriel d’utilisation du débogueur est disponible ici. L’interface LSP permet d’accéder à la documentation et aux signatures des fonctions et offre des diagnostics sur le code ainsi que l’autocomplétion. Les informations d’installation et d’utilisation de l’inteface LSP sont disponibles ici. Débogueur: En écrivant du code, il est naturel de faire des erreurs, un aspect important est de les localiser et de les identifier de manière efficace. Pour cela, il est possible de mettre des commandes Cliquer à gauche d’un numéro de ligne de code place un point d’arrêt, indiqué par un point rouge. Ici, nous proposons de cliquer sur la deuxième ligne effectuant l’addition. En exécutant le code d’appel de fonction suivant: le programme s’arrêtera à la deuxième ligne de la fonction Survol: Lorsque l’on survole le code avec la souris, si une partie devient soulignée, il est alors possible d’obtenir des informations sur la fonction avec la touche et en appuyant sur la touche Déplacer la souris sur le mot le souligne, et avec la touche Avertissement: Les erreurs ou les avertissements critiques sont indiqués par un soulignement en rouge ou en orange, par exemple dans le cas d’une variable indéfinie: Suggestion: En tapant En tapant Signature: En tapant Référence: En cliquant sur un symbole, les autres utilisations de celui-ci sont mises en évidence. Définition: En cliquant avec le bouton droit de la souris sur un symbole et ensuite sur «Jump to definition», il est possible d’aller à la définition de la fonction en question. Il est par example possible de faire un test sur le code suivant: Renommage: Il est possible de renommer une variable de manière intelligente (c’est-à-dire sans renommer les variables locales, par exemple) en faisant un clic droit sur la variable en question et en sélectionnant «Rename symbol». Panneau de diagnostic: Il est possible de trier et de naviguer dans les diagnostics à l’aide du «panneau de diagnostic». Pour l’ouvrir, il suffit de sélectionner «Diagnostics panel» dans le menu contextuel d’une cellule (bouton droit de la souris). Personnalisation: Le menu «Settings» de Jupyter Lab permet de personnaliser l’environnement de travail, notamment de choisir le thème, la taille de la police, l’indentation par défaut, mais aussi de nombreuses autres options plus avancées.1.1 Remerciements
1.2 Pourquoi Python ?
1.3 Prérequis
1.4 Documentation
1.5 Installation
1.5.1 Installation avec Miniforce
conda install numpy scipy sympy matplotlib numba networkx pandas jupyterlab jupyterlab-lsp python-lsp-server1.5.2 Installation à partir des dépôts
sudo apt install python3 python3-pippip install --upgrade pipsudo apt install python3-numpy python3-scipy python3-sympy python3-matplotlib python3-numba python3-networkx python3-pandaspip install jupyterlabpip install jupyterlab-lsp python-lsp-server[all]1.5.3 Installation avancée
python -m venv .venv.venv\Scripts\activate.batsource .venv/bin/activatepip install numpy scipy sympy matplotlib numba networkx pandas jupyterlab jupyterlab-lsp python-lsp-server[all]1.6 Lancement de Jupyter Lab
1.6.1 En ligne de commande
jupyter lab dans le terminal. Pour quitter, il faut cliquer sur «Shutdown» dans le menu «File» de la fenêtre Jupyter Lab. Il est aussi possible de taper Ctrl+C suivi de y (en anglais) ou o (en français) dans le terminal où la commande jupyter lab a été exécutée.echo "c.NotebookApp.use_redirect_file = False" >> ~/.jupyter/jupyter_notebook_config.py1.6.2 En ligne sans installation
. Aucun compte n’est nécessaire mais les documents modifiés sont automatiquement effacés en quittant donc il faut impérativement les sauvegarder sur votre propre ordinateur avant de quitter. Sinon différents services offrent la possibilité d’utiliser gratuitement Jupyter Lab après création d’un compte:
1.7 Utilisation de Jupyter Lab

SHIFT+ENTRÉE.SHIFT+ENTRÉE.python nomduscript.py dans un terminal pour exécuter le script nomduscript.py.
1.8 Utilisation avancée de Jupyter Lab
print aux bons endroits, mais il est plus approprié d’utiliser un débogueur pour cela. Pour activer le débogueur de Jupyter Lab, cliquez sur le scarabée dans le coin supérieur droit afin qu’il devienne orange. Lorsque le débogueur est activé, la liste des variables globales est disponible dans la barre dédiée. L’aspect le plus utile est la définition de points d’arrêt, qui permettent d’exécuter le code jusqu’à une certaine ligne et d’inspecter l’état du programme à ce moment-là. Pour ce faire, considérons la fonction suivante qui additionne deux nombres:resultat = add(1, 2)
print(resultat)3add. Il est possible de visualiser les valeurs des variables a et b dans l’onglet «Variables» et le code source concerné dans l’onglet «Sources». Les points d’arrêt sont regroupés dans l’onglet «Breakpoints». En naviguant dans l’onglet «Callstack», il est possible de poursuivre l’exécution du programme jusqu’au prochain point d’arrêt.CTRL. Par exemple, en passant la souris sur le code suivant:from numpy import linalgCTRL lorsque la souris est sur numpy ou linalg, une fenêtre avec des explications sur ces modules est affichée. C’est aussi le cas pour les fonctions définies manuellement si elles contiennent une docstring:def square(x):
"""Définition de la fonction puissance x -> x^2"""
return x*xsquare:r = square(4)CTRL la définition apparaît.def f(x):
if x:
undefined_variable
return xlinalg. dans une cellule, des suggestions de fonctions disponibles dans ce module sont affichées. Dans d’autres cas, les suggestions sont activées avec la touche TAB. C’est le cas par exemple avec un dictionnaire défini manuellement:dic = {'key1':3, 'key2':5}dic[ dans une cellule suivi de la touche TAB, les suggestions 'key1' et 'key2' s’affichent.linalg.solve(, on obtient l’aide et la signature de cette fonction, c’est-à-dire la façon dont les arguments doivent être utilisés dans cette fonction. En plaçant la souris sur le mot solve avec la touche CTRL, il y a aussi une description de la fonction.f(None)