INTRODUCTION AU PYTHON
Dr. NSENGE MPIA HERITIER, PhD
Introduction
• Python présente de multiples avantages par rapport aux langages traditionnels
car il est naturel (utilisation de l’indentation, typage dynamique), utilisable en
ligne de commande (interactif), moderne (orienté objet), extensible (modules
externes de calcul et de visualisation écrites en C/C++/fortran), utilisé pour le
calcul scientifique (grâce à la réutilisation de librairies de calculs déjà existantes),
libre et multi-plateforme.
• Python est un langage de programmation orienté objet interprété. Et, un
programme écrit en Python n'est opérationnel que si l'interpréteur est disponible
sur la machine (bien que des solutions de compilation existent). En contrepartie,
il peut fonctionner dès lors que l'interpréteur est présent, quel que soit le
système d'exploitation de la machine. Sous cet angle, on peut le considérer
comme un langage multiplateforme.
• La distribution Python intègre un grand nombre de librairies. Elles couvrent un
large choix de domaines (bases de données, accès réseaux, multimédia,
traitements systèmes, compression, multithreading, Data science...).
• Outre les librairies standards, un grand nombre de paquetages développés par
des contributeurs indépendants donne accès à des fonctionnalités spécialisées
performantes. Ces paquetages nous donnent la possibilité de programmer des
applications dans quasiment tous les secteurs de l'informatique
Environnement de développement
• Pour des raisons pratiques, nous utiliserons, dans ce cours,
l’environnement Anaconda. En effet, Anaconda regroupe un
ensemble d'outils gravitant autour des langages de programmation
Python et R : il fournit notamment les deux environnements
d'exécution. Cette distribution de Python est orientée Data Science et
Machine Learning : dans ces domaines, elle est certainement la plus
populaire. Anaconda s'installe aussi bien sur Windows, MacOs ou
Linux.
• On peut trouver le logiciel Anaconda à partir de son site officiel :
[Link] Anaconda propose son propre
gestionnaire de paquets appelé « conda ».
Installation de Anaconda
• Premièrement, on se dirige sur le site d’Anaconda dans ce lien:
[Link] et après, on va cliquer sur Install
Anaconda.
• Ce qui amènera cette interface :
• On peut ainsi télécharger une version d’Anaconda en fonction de son
Système. On va installer Anaconda et après l’installation, on pourra
lancer Anaconda qui se présentera comme suit :
• Dans cette interface, nous allons utiliser Jupyter et Spyder comme
éditeurs pour programmer en Python
Jupyter et Spyder
• Spyder qui signifie Scientific Python Development EnviRonment, est
un environnement de développement intégré gratuit (IDE) qui est
inclus avec Anaconda. Il comprend des fonctions d'édition, de test
interactif, de débogage et d'introspection
• Jupyter Notebook est une application web open source qu’on peut
utiliser pour créer et partager des documents qui contiennent du
code en direct, des équations, des visualisations et du texte. Jupyter
Notebook est maintenu par les gens du Projet Jupyter. Le nom,
Jupyter, vient des langages de programmation de base qu'il supporte :
Julia, Python et R.
Variables
• On doit rappeler qu’une variable est caractérisée par :
• un identificateur : il peut contenir des lettres, des chiffres, des blancs soulignés mais il ne
peut commencer par un chiffre. Minuscules et majuscules sont différenciées. Il est aussi
unique.
• un type : c’est une information sur le contenu de la variable qui indique à l’interpréteur
python, la manière de manipuler cette information.
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Variables (Cont.)
Les fonctions
Les fonctions (Cont.)
Structure de contrôle if … else
Structure de contrôle For
Structure de contrôle For (Exemples)
Structure de contrôle While
Structures des données
Liste
Liste (Cont.)
Liste (Cont.)
Liste (Cont.)
Liste (Cont.)
Liste (Cont.)
Liste (Cont.)
Liste (Cont.)
Liste (Cont.)
Tuple
Indexing
• L’indexing n’est pas une structure des donnees, mais plutot la technique d’accès aux éléments (des
listes) via leurs index.
Exemple:
couleurs = ['red', 'green', 'blue', 'yellow', 'white', 'black']
Ici, nous avons défini une liste de couleurs. Chaque élément de la liste possède une valeur (le nom de la
couleur) et un index (sa position dans la liste).
Python utilise une indexation basée sur zéro. Cela signifie que le premier élément(valeur 'red') a un index
0, le second(valeur ‘green') a un index 1, et ainsi de suite:
Indexing (Cont.)
Les index négatifs
• En utilisant l'indexation, nous pouvons facilement obtenir n'importe quel
élément par sa position. C'est pratique si nous utilisons la position de la
tête d'une liste.
• Mais qu'en est-il si nous voulons prendre le dernier élément d'une liste ?
Ou l'avant-dernier élément ?
• Dans ce cas, nous voulons énumérer les éléments de la queue d'une liste.
Pour répondre à cette exigence, il existe l'indexation négative. Ainsi, au lieu
d'utiliser des index de zéro et plus, on peut utiliser des index de -1 et
moins:
Indexing (Cont.)
• Dans le système d'indexation négative, -1 correspond au dernier
élément de la liste (valeur ‘black'), -2 à l'avant-dernier (valeur ‘white'),
et ainsi de suite.
• Auparavant, nous utilisions l'indexation uniquement pour accéder au
contenu d'une cellule de liste. Mais il est également possible de
modifier le contenu d'une cellule en utilisant une opération
d'affectation :
Indexing (Cont.)
• Nous pouvons également supprimer facilement tout élément de la
liste en utilisant l'indexation et l'instruction del :
• Les opérations d'indexation en lecture seule fonctionnent
parfaitement bien pour tous les types séquentiels (liste, dictionnaire,
dataset et classes définies par l'utilisateur). Mais les opérations
d'affectation et de suppression ne sont pas applicables aux types
séquentiels immuables (string, tuple, int, bool, range, decimal…)
Slicing
• Comme Indexing, le slicing est une technique d’accès à une fourchette
d’éléments en indiquant la fourchette.
• Comme nous l'avons montré, l'indexation permet d'accéder à une
seule cellule d'une liste, de la modifier ou de la supprimer.
• Le slicing est utile quand nous voulons obtenir une sous-liste de la
liste.
• Ou si nous voulons mettre à jour un groupe de cellules en une seule
fois
• Ou si l'on veut se lancer dans une frénésie et étendre une liste avec un
nombre arbitraire de nouvelles cellules dans n'importe quelle position.
Usage basic de Slicing
• nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
• Que faire si l'on veut prendre une sous-liste de la liste nums ?
• Voici donc notre premier exemple de tranche (slicing) : 2:7.
• La syntaxe complète d'une tranche est la suivante :
• start:stop:step.
• start fait référence à l'indice de l'élément qui est utilisé comme début de notre tranche.
• stop fait référence à l'indice de l'élément que nous devons arrêter juste avant pour terminer notre tranche.
• step vous permet de prendre chaque nième élément dans une plage start:stop.
• Dans notre exemple, start est égal à 2, donc notre tranche commence à la valeur 30. stop est égal à 7, donc
le dernier élément de la tranche est 70 avec l'index 6.
• A la fin, slice crée une nouvelle liste (nous l'avons nommée some_nums) avec les éléments sélectionnés.
Usage basic de Slicing (Cont.)
Nous n'avons pas utilisé de pas (step) dans notre tranche, donc nous n'avons sauté aucun
élément et obtenu toutes les valeurs dans l'intervalle
Dans le slide qui vient, nous allons illustrer un exemple avec les steps
Usage basic de Slicing avec le step
Prendre chaque nième élément d'une liste
• Que faire si l'on veut avoir seulement tous les deuxièmes éléments de
nums ? C'est là que le paramètre step entre totalement en jeu :
• Et si nous ne voulons pas inclure certains éléments à la fin, nous pouvons
également ajouter le paramètre stop :
Utilisation de l'étape négative et de la liste inversée
• Nous pouvons utiliser un pas négatif pour obtenir une liste inversée:
• Le pas négatif change d'une certaine manière, le fonctionnement de la
notation de la tranche.
• Il fait que la tranche est construite à partir de la queue de la liste.
• Donc, elle va du dernier élément au premier élément.
• C'est pourquoi nous obtenons une liste inversée avec un pas négatif.
• En raison de cette particularité, le début et la fin doivent également être
indiqués de droite à gauche. Par exemple, si vous voulez avoir une liste
inversée qui commence à 80 :
Utilisation de l'étape négative et de la liste inversée
• Nous pouvons utiliser la valeur stop pour arrêter la prise avant un
certain élément. Par exemple, n'incluons pas les valeurs 20 et 10 :
Couper (Slice) et copier
• Une chose importante à noter - est que la tranche de liste crée une copie
superficielle de la liste initiale. Cela signifie que nous pouvons modifier la
nouvelle liste en toute sécurité et que cela n'affectera pas la liste initiale :
• Bien que nous ayons muté l'élément sous l'indice 2, cela n'affecte pas la
liste nums, car la liste premier_cinq_elements est une copie partielle de la
liste nums.
• Il existe la forme la plus courte de la notation des tranches - juste des deux
points nums[ :]
Création d’un objet tranche (slice)
• Il peut arriver que nous voulons utiliser la même tranche à plusieurs reprises.
• Sur ce, on crée un objet tranche au lieu d'utiliser uniquement la forme
syntaxique de slice, o utilise la fonction slice():
• La fonction slice() accepte les arguments dans le même ordre que dans la
notation slice, et si vous devez sauter un élément, utilisez simplement None :
Affectation des tranches
• Python supporte l'opération d'assignation de tranche, qui nous permet de faire un tas
d'opérations soignées sur une liste existante. Contrairement aux opérations de tranche
précédentes, celles-ci modifient l'objet original sur place.
• C'est pourquoi elles ne sont pas applicables aux types séquentiels immuables.
Remplacer une partie d'une liste: L'affectation de tranches vous permet de mettre à jour une partie
d'une liste avec de nouvelles valeurs :
Remplacer et redimensionner une partie de la liste: Nous pouvons remplacer une partie d'une liste
par un plus gros morceau à la place :
Affectation des tranches (Cont.)
• Dans le cas de l’exemple ci-haut, nous nous avons étendu la liste originale.
• Il est également possible de remplacer un gros morceau par un plus petit nombre d'éléments :
Remplacer chaque n-ième élément: L'ajout d'un pas permet de remplacer chaque n-ième élément
par une nouvelle valeur :
• L'utilisation de l'affectation par tranche avec étape fixe une limite à la liste que nous fournissons
pour l'affectation. La liste fournie doit correspondre exactement au nombre d'éléments à
remplacer. Si la longueur ne correspond pas, Python lève l'exception :
Suppression de tranches
• Nous pouvons également utiliser l'instruction del pour supprimer une
tranche d'une liste :
• Nous pouvons également fournir un paramètre de pas pour découper
et supprimer chaque n-ième élément :
• Avec la syntaxe complète, nous pouvons définir des limites pour les
éléments à supprimer :
Dictionnaire
• C’est une structure des donnees comme liste, tuple, …
• Le dictionnaire en Python est une collection non ordonnée de valeurs de
données, utilisée pour stocker des valeurs de données comme une carte,
qui, contrairement aux autres types de données qui ne contiennent qu'une
seule valeur en tant qu'élément, le dictionnaire contient une paire
clé:valeur.
• La clé-valeur est fournie dans le dictionnaire pour le rendre plus optimisé.
• En Python, un dictionnaire peut être créé en plaçant une séquence
d'éléments entre accolades {}, séparés par une virgule.
• Le dictionnaire contient des paires de valeurs, l'une d'entre elles étant la
clé et l'autre l'élément correspondant à la paire clé:valeur.
• Les valeurs d'un dictionnaire peuvent être de n'importe quel type de
données et peuvent être dupliquées, tandis que les clés ne peuvent pas
être répétées et doivent être immuables (cad pas de modification,
suppression…).
Création d'un dictionnaire
Dictionnaire imbriqué
• En Python, un dictionnaire imbriqué est un dictionnaire à l'intérieur
d'un dictionnaire. Il s'agit d'une collection de dictionnaires en un seul
dictionnaire.
Accéder aux éléments d'un dictionnaire
imbriqué
Ajouter un élément dans un dictionnaire
imbriqué
• Nous avons ajouté un element (Married) dans le nouveau
dictionnaire numero 3.
Supprimer des éléments d'un dictionnaire imbriqué
Supprimer le dictionnaire d'un dictionnaire imbriqué
Itérer dans un dictionnaire imbriqué
Points clés à retenir pour les dictionnaires imbriqués
• Un dictionnaire imbriqué est une collection non ordonnée de dictionnaires.
• Le découpage en tranches (slicing) d'un dictionnaire imbriqué n'est pas
possible.
• Nous pouvons réduire ou augmenter le nombre de dictionnaires imbriqués
selon les besoins.
• Comme les dictionnaires, ils ont aussi une clé et une valeur.
• Les dictionnaires sont accessibles à l'aide de la clé.
Listes Compréhension
Exemple d’illustration d’exécution en termes de performance d’une
liste compréhension
Dictionnaires Compréhension
La syntaxe du dictionnaire comprehension
avec condition
Tuple Comprehension
Exercice sur les fonctions/méthodes
1. Equation du second degré avec paramètres fixes
Exercice sur les fonctions/méthodes (Cont.)
2. Equation du second degré avec saisie de l’utilisateur des paramètres