1 Introduction

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:

Le séparateur décimal utilisé est le point et non pas la virgule, afin de se conformer avec l'usage international employé par Python et éviter les confusions.

1.1 Pourquoi Python ?

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.

1.2 Prérequis

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.

1.3 Documentation

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.

1.4 Installation

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:

Installation avec Miniforge

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 à l'adresse: https://conda-forge.org/docs/. En résumé la procédure d'installation est la suivante:
  1. Télécharger Miniforge à l'adresse: https://conda-forge.org/download/.
  2. Double-cliquer sur le fichier téléchargé pour lancer l'installation de Miniforge, puis suivre la procédure d'installation.
  3. Une fois l'installation terminée, lancer Miniforge Prompt à partir du menu Démarrer ou de la liste des applications.
  4. Dans le terminal, taper la commande:
    conda install numpy scipy sympy matplotlib numba networkx pandas jupyterlab python-lsp-server
    

    et confirmer l'installation des dépendances.

  5. De manière optionnelle (mais conseillée), installer l'interface LSP, avec la commande:
    conda install jupyterlab-lsp python-lsp-server
    

Installation à partir des dépôts

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.
  1. Installer les modules Numpy, Scipy, Sympy, Matplotlib, Numba, NetworkX et Pandas:
    sudo apt install python3-numpy python3-scipy python3-sympy python3-matplotlib python3-numba python3-networkx python3-pandas pipx
    
  2. Jupyter Lab n'étant pas disponible dans les paquets d'Ubuntu, il faut l'installer avec Pipx:
    pipx ensurepath
    pipx install jupyterlab --system-site-packages
    
  3. De manière optionnelle (mais conseillée), installer l'interface LSP, avec la commande:
    pipx inject jupyterlab jupyterlab-lsp python-lsp-server[all]
    

Installation avancée avec Pip

La procédure suivante décrit l'installation manuelle de modules avec le gestionnaire Pip dans un environnement virtuel.
  1. Installer Python depuis l'adresse: https://www.python.org/downloads/.
  2. De manière optionelle (mais conseillée), créer un environement virtuel en suivant les instructions disponibles à l'adresse: https://docs.python.org/fr/3/library/venv.html.
  3. Installer les modules requis en tapant la ligne de commande suivante dans un terminal:
    pip install numpy scipy sympy matplotlib numba networkx pandas jupyterlab
    
  4. De manière optionnelle (mais conseillée), installer l'interface LSP, avec la commande:
    pip install jupyterlab-lsp python-lsp-server[all]
    
Remarque: Suivant les systèmes d'exploitation il faut remplacer la commande pip par pip3.

1.5 Lancement de Jupyter Lab

En ligne de commande

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 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

Sur le bureau de l'UTES

Avertissement. Disponible seulement pour les personnes disposant d'un accès informatique à Sorbonne Université.

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:

En ligne sans installation

Pour les personnes ne pouvant ou ne voulant pas installer Python et les dépendances nécessaires sur leur propre ordinateur et n'ayant pas accès au bureau de l'UTES, il est possible d'utiliser Jupyter Lab en ligne avec MyBinder en cliquant ici ou sur l'icône représentant un chat dans la barre de navigation. 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.6 Utilisation de Jupyter Lab

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:

La documentation détaillée de Jupyter Lab est disponible ici.

1.7 Utilisation avancée de Jupyter Lab

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.

© 2026, Julien Guillod. Licence CC BY-NC-ND