Le but des exercices de ce recueil n'est pas d'apprendre la syntaxe du langage Python ni ses subtilités, mais de se focaliser sur son utilisation pratique 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. La résolution des exercices proposés devrait permettre 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 avec l'aide de la programmation. Les exercices plus difficiles sont indiqués par des points d'exclamation:
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, mais 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é a fait que Python est devenu l'un des principaux langages de programmation utilisés par les scientifiques.
Les prérequis sont de connaître les bases du langage Python, par exemple telles qu'enseignées dans le cours 1IN001 dispensé à Sorbonne Université. Les personnes ne connaissant pas bien les bases du langage Python sont fortement incitées à suivre le MOOC (Massive Open Online Course) Python 3 : des fondamentaux aux concepts avancés du langage disponible sur le site de France Université Numérique. En dehors des périodes d'ouverture du MOOC, les vidéos du MOOC sont disponibles sur YouTube.
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.5 Lancement de Jupyter Lab pour des alternatives disponibles en ligne sans installation.
Il existe essentiellement quatre façons d'installer Python et les modules requis pour réaliser les exercices:
conda install numpy scipy sympy matplotlib numba networkx pandas jupyterlab python-lsp-server
et confirmer l'installation des dépendances.
conda install jupyterlab-lsp python-lsp-server
sudo apt install python3-numpy python3-scipy python3-sympy python3-matplotlib python3-numba python3-networkx python3-pandas pipx
pipx ensurepath
pipx install jupyterlab --system-site-packages
pipx inject jupyterlab jupyterlab-lsp python-lsp-server[all]
pip install numpy scipy sympy matplotlib numba networkx pandas jupyterlab
pip install jupyterlab-lsp python-lsp-server[all]
pip par pip3.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.Remarque: Si le navigateur par défaut est un snap (c'est le cas par défaut sous Ubuntu 22.04 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:
echo "c.NotebookApp.use_redirect_file = False" >> ~/.jupyter/jupyter_notebook_config.py
Aller sur le site de l'UTES puis cliquer sur l'icône correspondante à votre système d'exploitation et suivez les instructions pour vous connecter au bureau à distance.
Pour lancer Jupyter Lab une fois connecté au bureau de l'UTES:
;jupyter lab dans le champs de rechercher suivi de la touche ENTRÉE;Une fois Jupyter Lab lancé, la fenêtre suivante 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:

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:
SHIFT+ENTRÉE.SHIFT+ENTRÉE.python nomduscript.py dans un terminal pour exécuter le script nomduscript.py.Les versions récentes de Jupyter Lab (3 et suivantes avec un ipykernel supérieur à 6) sont dotées d'un 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 tutorial d'utilisation du débogueur est disponible ici. L'interface LSP permet d'accéder à la documentation et aux signatures des fonctions, offrent 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 et un aspect important est de les localiser et de les identifier de manière efficace. Pour cela, il est possible de mettre des commandes 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:
def add(a, b):
res = a + b
return res
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:
resultat = add(1, 2)
print(resultat)
le programme s'arrêtera à la deuxième ligne de la fonction add. 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.
Survol: Lorsque l'on survole une partie du code avec la souris, si une partie du code devient soulignée il est alors possible d'obtenir des informations sur la fonction avec la touche CTRL. Par exemple, en passant la souris sur le code suivant:
from numpy import linalg
et en appuyant sur la touche CTRL 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*x
Déplacer la souris sur le mot square:
r = square(4)
le souligne, et avec la touche CTRL la définition apparaît.
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:
def f(x):
if x:
undefined_variable
return x
Suggestion: En tapant linalg. 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}
En tapant dic[ dans une cellule suivi de la touche TAB les suggestions 'key1' et 'key2' s'affichent.
Signature: En tapant 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.
Référence: En cliquant sur un symbole, les autres utilisations de ce symbole 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 possible de faire un test sur le code suivant par exemple:
f(None)
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.
Remerciements: Merci à Johann Faouzi, Nicolas Lantos et Marie Postel pour leurs relectures attentives de ce recueil et pour les nombreuses corrections et suggestions. Merci également à Cédric Boutillier, Cindy Guichard et Raphaël Zanella pour avoir pointé différentes erreurs.