Tutoriel d'introduction à Python 3

L'objectif de ce tutoriel est de présenter une introduction à Python 3 à des étudiants ayant déjà des notions d'algorithmique et de programmation. Par exemple le fonctionnement des boucles $\mathtt{for}$ n'est pas expliqué mais on y étudie leur implémentation en Python.

La documentation officielle est disponible à l'adresse https://docs.python.org/fr/3/

Voici les différents points abordés dans ce tutoriel.

Introduction à la programmation en Python

Types et opérations de base

Attention le résultat de la fonction $\mathtt{input}$ est toujours une chaîne de caractères (type $\mathtt{str}$).

Notez que le booléen $\mathtt{True}$ prend la valeur $\mathtt{1}$ et le booléen $\mathtt{False}$ la valeur $\mathtt{0}$.

Comme vu plus haut il n'est pas nécessaire de déclarer le type d'une variable avant de lui affecter une valeur. On peut bien évidemment utiliser des fonctions de conversion d'un type à l'autre.

La puissance s'obtient avec le symbole $\mathtt{**}$.

Pour les entiers il existe aussi les fonctions de modulo $\mathtt{\%}$ et de division entière $\mathtt{//}$.

Premières structures de données

Type $\mathtt{list}$

Les listes sont définies via le constructeur $\mathtt{[ ]}$. Le premier élément d'une liste est celui d'indice $\mathtt{0}$.

La somme de deux listes est l'opération de concaténation.

Dans le même esprit on peut répliquer une liste avec l'opération $\mathtt{*}$. Ceci est bien pratique si l'on veut créer une liste d'une taille donnée.

ne va pas copier les valeurs de $\mathtt{l1}$ dans la liste $\mathtt{l2}$ mais donner deux noms différents à la même liste (c'est un pointeur). Ainsi, toute modification de $\mathtt{l1}$ va modifier $\mathtt{l2}$...

Il y a une exception à cette règle : la concatenation.

Pour copier les valeurs d'une liste on préférera l'utilisation de la méthode (notez la différence lors du recours à une méthode par rapport à une fonction) $\mathtt{copy}$

Il faut donc être particulièrement vigilant avec les indices lors des parcours de listes.

Si un élément est présent dans une liste on peut récupérer son indice avec la méthode $\mathtt{index}$.

Avec l'argument $\mathtt{key}$ on peut spécifier par rapport à quel élément on souhaite trier.

Type $\mathtt{tuple}$

On peut récupérer ces éléments en utilisant leurs indices ou la syntaxe suivante

Dictionnaires

Là encore on peut mélanger plusieurs types.

Regardez la différence entre le résultat obtenu et le résultat suivant.

Ce sont des itérables : on peut donc les utiliser dans une boucle $\mathtt{for}$

Symmétriquement la fonction $\mathtt{dict}$ construit un dictionnaire à partir d'une liste de couples (clés, valeurs).

Ensembles : type $\mathtt{set}$

En $\texttt{Python}$ comme en mathématiques un ensemble est non ordonné. Il est défini par des accolades.

On peut tester si un élément est présent ou non dans un ensemble

On peut ajouter et enlever un élément dans un ensemble

On peut aussi réaliser les différentes opérations ensemblistes

Tests et instructions conditionnelles

Il peut être important de remarquer que pour des nombres le type n'importe pas lors du test.

Chacune de ces instructions est suivie du symbole "$\mathtt{:}$" qui débute le champ d'action de l'instruction conditionnelle. Le champ d'action est délimité par l'indentation : en Python il n'y a pas de mot clé de fin d'instruction ! Cela sera aussi valable pour les boucles ou les fonctions. Regardez bien la différence entre les deux programmes suivants.

Exemples d'utilisation

Boucles $\mathtt{while}$ et boucles $\mathtt{for}$

Boucles $\mathtt{while}$

Comme pour les instructions conditionnelles, la boucle démarre après le symbole "$\mathtt{:}$" et concerne toutes les lignes indentées.

Boucles $\mathtt{for}$

La première utilisation est classique.

Il est bien sûr inevisageable de taper les listes $[0,1,2,3,4]$ à la main. Pour cela on va utiliser la fonction $\mathtt{range}$. Cette fonction produit une suite. Même si ce n'est pas tout à fait le cas on peut avoir en tête que $$ \mathtt{range}(N) = [0, 1, 2, \dots, N-1].$$ Donc $\mathtt{range}(N)$ contient $N$ éléments : le paramètre de fin est exclu. On peut préciser le paramètre de début. Alors $$ \mathtt{range}(\text{début}, \text{fin}) = [\text{début}, \text{début}+1, \dots, \text{fin}-1].$$ S'il y a trois arguments, le troisième est le pas de l'itération.

Ainsi, une possibilité pour parcourir une liste est :

En fait la boucle $\mathtt{for}$ itère sur les éléments présents dans la liste (ou le tuple ou la chaîne de caractères ou la suite fournie par $\mathtt{range}$) donnée en paramètre et pas sur un compteur. Le code précédent peut donc être simplifié.

Cette syntaxe est aussi valable pour les dictionnaires. Pour les tuples, il suffit de convertir la liste en tuple.

Les instructions $\mathtt{break}$ et $\mathtt{continue}$

Lorsqu'une boucle rencontre l'instruction $\mathtt{break}$ elle s'arrête.

Lorsqu'une boucle rencontre l'instruction $\mathtt{continue}$ elle arrête l'itération courante mais n'arrête pas la boucle.

Ainsi, le programme ci-dessous donnerait une boucle infinie

Procédures et fonctions

La différence entre les deux étant la présence ou non de l'instruction $\mathtt{return}$. Une fois encore, la définition de la fonction se termine en même temps que l'indentation.

Le résultat d'une procédure est de type $\mathtt{None}$

Une fonction peut renvoyer un résultat de n'importe quel type.

Lors de l'appel d'une fonction on peut spécifier le nom de certains arguments. Dans ce cas, l'ordre des paramètres n'a plus d'importance.

Si l'on commence à mixer des arguments implicites (par leur position) et des arguments par leur nom on ne peut pas faire n'importe quoi...

Importer une bibliothèque

Cette bibliothèque contient par exemple la valeur de la constante $\pi$ ou la fonction trigonométrique $\sin$. Pour y accéder, on préfixe par le nom de la bibliothèque.

Quelques bibliothèques pour faire des maths

La bibliothèque $\mathtt{math}$

Elle a été rapidement vue dans le paragraphe Importer une bibliothèque.

Elle contient les principales constantes ainsi que les fonctions mathématiques usuelles.

La bibliothèque $\mathtt{random}$

Pour fixer la graine du générateur on utilise la fonction $\mathtt{seed}$. Cela permet d'obtenir toujours le même résultat quand on relance le code.

Pour la loi uniforme sur l'intervalle $(a,b)$ on utilise la fonction $\mathtt{uniform}$. C'est l'équivalent de $a + (b-a)*\mathtt{random}$.

Pour un tirage de nombres entiers entre $a$ et $b$ inclus, on utilise la fonction $\mathtt{randint}$.

La bibliothèque $\mathtt{NumPy}$

Le tutoriel de cette bibliothèque est détaillé ici

La bibliothèque $\mathtt{matplotlib.pyplot}$

Le tutoriel de cette bibliothèque est détaillé ici

Théorie des graphes : la bibliothèque $\mathtt{NetworkX}$

Le tutoriel de cette bibliothèque est détaillé ici

Statistiques : les bibliothèques $\mathtt{NumPy}$ et $\mathtt{Pandas}$

Le tutoriel de cette bibliothèque est détaillé ici

Pour aller plus loin en mathématiques :

la bibliothèque $\mathtt{SciPy}$

La bibliothèque $\mathtt{SciPy}$ possède de nombreuses sous-librairies permettant d'attaquer de nombreux problèmes mathématiques numériques :

Une présentation rapide de quelques fonctionnalités est disponible à l'adresse https://www.southampton.ac.uk/~fangohr/teaching/python/book/html/16-scipy.html

Le tutoriel complet est accessible à l'adresse https://docs.scipy.org/doc/scipy/reference/tutorial/index.html

le logiciel $\mathtt{SageMath}$

Le logiciel $\mathtt{SageMath}$ écrit en $\mathtt{Python}$ permet de gérer le calcul formel. Un bref tutoriel est disponible à l'adresse http://mmorancey.perso.math.cnrs.fr/TutorielSage.html

Étant écrit en $\mathtt{Python}$ la syntaxe est très proche de celle décrite dans ce tutoriel. S'il est toujours possible d'y importer des modules, la plupart des fonctions utiles pour faire des mathématiques sont déjà présentes dans ce logiciel (mais parfois la syntaxe diffère, voir notamment le paragraphe sur l'algèbre linéaire).