Vous êtes sur la page 1sur 55

Prog.Python FST-LCS1 N.

AMDOUNI

Cours Programmation
Python
Pour les étudiants de la 1ère année Licence
Licence

Préparé par :
Dr. Naama AMDOUNI

A.U : 2021-2022

1 / 55
Prog.Python FST-LCS1 N.AMDOUNI

PLAN DU COURS

Chapitre 1: Variables, Types et Opérations de base en Python

Chapitre 2: Les structures conditionnelles en Python

Chapitre 3: Les structures itératives en Python

Chapitre 4: Les conteneurs à accès séquentiel (Listes, Tuples et Chaînes) en Python

Chapitre 5: Les conteneurs à accès direct (Dictionnaires & Ensembles) en Python

Chapitre 6: Les fonctions en Python

2 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Chapitre 1 : Variables, Types et Opérations de base en Python

I- Introduction
Python est un langage de programmation interprété, càd l’'interpréteur va exécuter les
lignes du code une par une, en décidant à chaque étape ce qu'il va faire ensuite, développé en
1989. Ses principales caractéristiques sont les suivantes :

• «open-source» : son utilisation est gratuite et les fichiers sources sont disponibles et
modifiables ;
• simple et très lisible ;
• doté d’une bibliothèque de base très fournie ;
• importante quantité de bibliothèques disponibles : pour le calcul scientifique, les
statistiques, les bases de données, la visualisation . . . ;
• grande portabilité : indépendant vis à vis du système d’exploitation (linux, windows,
MacOS);
• orienté objet ;
• typage dynamique : le typage (association d’un type à une variable et allocation d’une
zone mémoire en conséquence) est fait automatiquement lors de l’exécution du
programme, ce qui permet une grande flexibilité et rapidité de programmation.
• présente un support pour l’intégration d’autres langages.

Pour travailler en Python, il suffit d’écrire vos instructions et de les interpréter.


Cependant, on utilise souvent un environnement de développement pour faciliter la
programmation. Il existe deux versions de Python. : 2.7 et 3.3. La version 3.3 n’est pas une
simple amélioration de la version 2.7. Attention, toutes les librairies Python n’ont pas effectué
la migration de 2.7 à 3.3. La version de Python utilisée dans ce cours est Python 3 (toutes les
versions 3.x).
Quel que soit votre système d'exploitation, pour Windows ou MacOS, téléchargez Python
directement depuis le site principal du langage : https://www.python.org/download
II- Les variables en Python
Une variable est une zone de la mémoire de l’ordinateur dans laquelle une valeur est
stockée. Aux yeux du programmeur, cette variable est définie par un nom, alors que pour
l’ordinateur, il s’agit en fait d’une adresse, c’est-à-dire d’une zone particulière de la mémoire.
En Python, la déclaration d’une variable et son initialisation (c’est-à-dire la première
valeur que l’on va stocker dedans) se font en même temps.

3 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Remarque :
Le nom des variables en Python peut être constitué de lettres minuscules (a à z), de lettres
majuscules (A à Z), de nombres (0 à 9) ou du caractère souligné (_). Vous ne pouvez pas
utiliser d’espace dans un nom de variable.
Par ailleurs, un nom de variable ne doit pas débuter par un chiffre et il n’est pas
recommandé de le faire débuter par le caractère _ (sauf cas très particuliers).
Python est sensible à la casse, ce qui signifie que les variables TesT, test ou TEST sont
différentes.
En plus de ces règles, il faut encore ajouter que vous ne pouvez pas utiliser comme nom de
variables les 33 « mots réserves » ci-dessous (ils sont utilisés par le langage lui-même) :

NB : Tout ce qui suit le caractère # est considéré comme un commentaire et ne sera jamais
évalué.

III- Les types de variables


Le type d’une variable correspond à la nature de celle-ci. Les principaux types dont nous
aurons besoin dans un premier temps sont :

• les entiers (int) : exemples de valeurs : 4 50 10000,


• les nombres décimaux (float) : exemples de valeurs : 4. 5.1 1.23e-6,
• les chaînes de caractères (str),
• les booléens (bool) : sont essentiels en informatique. Ce type comprend uniquement
deux constantes : True et False (Vrai et Faux). Ils sont principalement utilisés dans les
structures de contrôle.
• les nombres complexes (complex) exemples de valeurs : 3+4j 5-10j
La fonction type() retourne le type d’une variable ou d’une expression.

Remarque :
Python reconnaît certains types de variable automatiquement (entier, float). Par contre,
pour une chaîne de caractères, il faut l’entourer de guillemets (doubles, simples, voire trois
guillemets successifs doubles ou simples) afin d’indiquer à Python le début et la fin de la
chaîne de caractères.

4 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Dans l’interpréteur, l’affichage direct du contenu d’une chaîne de caractères se fait avec
des guillemets simples, quel que soit le type de guillemets utilisé pour définir la chaîne de
caractères.
En Python, comme dans la plupart des langages de programmation, c’est le point qui est
utilisé comme séparateur décimal.

IV- Opérations de base


1- Affectation (ou assignation)
Les termes « affecter une valeur » ou « assigner une valeur » à une variable sont
équivalents. Ils désignent l’opération par laquelle on établit un lien entre le nom de la variable
et sa valeur (son contenu).
En Python comme dans de nombreux autres langages, l’opération d’affectation est
représentée par le signe égal.

Il est interdit d’utiliser une variable non initialisée (sans valeur de départ) dans une
expression :

2- Affectation multiples

Sous Python, on peut assigner une valeur à plusieurs variables simultanément.

5 / 55
Prog.Python FST-LCS1 N.AMDOUNI

On peut aussi effectuer des affectations parallèles à l’aide d’un seul opérateur.

3- Opérateurs avancés d’affectation : += ; -= ; *= ; /= ; //= ; %= ; **=

4- Affichage de la valeur d’une variable

Pour afficher la valeur d’une variable à l’écran, il existe deux possibilités. La première qui est
une fonctionnalité secondaire de l’interpréteur consiste à entrer au clavier le nom de la
variable, puis la touche <Entrée>. Python répond en affichant la valeur correspondante. La
deuxième consiste à utiliser la fonction print().

6 / 55
Prog.Python FST-LCS1 N.AMDOUNI

NB : La fonction print() n’affiche strictement que la valeur de la variable, telle qu’elle a été
encodée, alors que l’autre méthode (celle qui consiste à entrer seulement le nom de la
variable) affiche aussi des apostrophes afin de vous rappeler que la variable traitée est du type
« chaine de caractères ».

Il est également possible d’afficher le contenu de plusieurs variables (quel que soit leur type)
en les séparant par des virgules :

Pour éditer sur écran un message, on a recours à la fonction print() :

On peut afficher plusieurs messages sur une même ligne en choisissant le caractère de
séparation en utilisant la syntaxe suivante : print(mes1,mes2,…mesk,sep=caractère)

7 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Pour choisir le caractère de fin de ligne, on utilise l’option end de la commande print (si le
caractère choisi est «» alors il n’y aura pas de retour à la ligne) :

Pour avoir plus de contrôle sur le formatage de vos sorties que de simplement imprimer des
valeurs séparées par des espaces, on a recours à utiliser la méthode format().

5- La saisie (lecture) des données

On utilise la commande input() qui quand rencontrée, le script attend jusqu’à ce que
l’utilisateur introduise une valeur qui peut importe son type sera comptée comme une chaine
de caractères. On peut documenter l’opération d’entrée en ajoutant un message entre les () de
input et qui sera affiché au moment de l’exécution de l’instruction :

8 / 55
Prog.Python FST-LCS1 N.AMDOUNI

La validation de la saisie est obtenue en tapant la touche ENTREE.

On peut tout de même forcer la saisie d’un entier ou d’un réel directement en utilisant
respectivement les deux commandes int et float déjà rencontrées :

Parfois l’utilisateur se trompe sur la valeur introduite, l’instruction input déclenche une
erreur ou une exception, un message en rouge apparait indiquant la nature de l’erreur :

6- Opérations arithmétiques
Les opérateurs sont précisés dans la liste ci-dessous :

Certains opérateurs sont évalués avant les autres, dans l’ordre de priorité suivant :

Ordre décroissant Opérateurs


1 Not, -(opposé)
2 ** (puissance)
3 *, % , / , //
4 +, -
5 >, <,<=,>=
6 =, ≠
7 and
8 or
Les opérateurs de même priorité sont évalués de gauche à droite, et les parenthèses
permettent de changer ces priorités. En effet, les expressions entre parenthèses sont traitées en
premier lieu.

9 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• Addition +, soustraction -, multiplication *, division / et puissance ** :

• Quotient // et reste % d’une division euclidienne :

7- Commandes sur les nombres complexes :

• Partie réelle

10 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• Partie imaginaire

• Conjugué

Mais pas uniquement, on a d’autres commandes applicables sur le corps C appartenant au


module cmath (voir le dernier paragraphe du chapitre).
8- Commandes sur les booléens

Les opérateurs applicables sont and, or et not :

9- Opérations sur les chaînes de caractères

Pour les chaînes de caractères, deux opérations sont possibles, l’addition et la


multiplication :

L’opérateur d’addition + concatène (assemble) deux chaînes de caractères.


L’opérateur de multiplication * entre un nombre entier et une chaîne de caractères duplique
(répète) plusieurs fois une chaîne de caractères.

V- Les fonctions intégrées en Python


Pour interagir avec Python, on tape des commandes, appelés aussi des builtins, qui sont des
commandes prêtes à l’utilisation et qui sont chargées d’une manière automatique en mémoire
de l’ordinateur.

11 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• Valeur absolue :

• Conversion de types :

• Passage entre bases (binaires, hexa et octale) :

Par défaut, la base utilisée est la base 10. Il est possible d’exprimer un entier dans les bases
classiques en informatique : la base 2 (binaire), la base 8 (octal) et la base 16 (hexadécimal).
Pour cela, on fait précéder la représentation du nombre dans ces bases du préfixe 0b (binaire),
0o (octal) ou 0x (hexadécimal).

VI- Les modules Python


Dans le paragraphe précédent, on a évoqué les builtins Python qui se chargent au moment
du démarrage de Python, mais ce ne sont pas les uniques commandes utilisables. Python
regroupent les commandes par thème dans des unités spéciales appelées modules. Un module
regroupe un ensemble de variables et de fonctions prêtes à l’utilisation. Il suffit d’importer le
module avec le mot clé import et d’appeler les fonctionnalités qu’il offre en utilisant une
notation préfixée de la forme nomModule.nomFonction ou nomModule.nomVariable.

12 / 55
Prog.Python FST-LCS1 N.AMDOUNI

1- Commandes du module math

Parmi les modules les plus importants, on note le module math qui regroupe un ensemble
de fonctions mathématiques définies sur le corps IR tels que la racine carrée, les fonctions
trigonométriques, les fonctions
ctions log, exp…

Le contenu d’un module peut être affiché en utilisant la commande dir(nomModule) :

Et l’aide correspondant est accessible via la commande help(nomModule) :

De même l’aide correspondant à une commande d’un module est accessible via la commande
help(nomModule.NomCommande
.NomCommande) :

13 / 55
Prog.Python FST-LCS1 N.AMDOUNI

On peut importer le contenu d’un module avec alias:

Aussi on peut importer le contenu d’un module autrement :

Dans ce cas, la notation préfixée n’est plus valide.


Parmi les fonctions les plus utiles du module math, on trouve :

• Racine carrée : sqrt


• Factorielle : factorial The math.ceil() method rounds a
number upwards to its nearest
• Fonctions trigonométriques : cos, sin, tan, asin, acos, atan
integer, and the math.floor()
• Conversion des angles :degrees, radians method rounds a number
• log, exp : log,log10, log2 downwards to its nearest integer,
• fonctions d’arrondissement : floor, ceil and returns the result.
• troncature : trunc
NB : Le module math stocke aussi la valeur de pi et de e.

14 / 55
Prog.Python FST-LCS1 N.AMDOUNI

2- Commandes du module cmath :

D’une manière analogique, le module cmath offre toutes les fonctions mathématiques
applicables sur les nombres complexes :

Parmi les fonctions, on note :

• la forme polaire : polar

• l’argument : phase

• la forme algébrique à partir de la forme polaire : rect(module,argument)

15 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Chapitre 2: Les structures conditionnelles en Python

I- Introduction
En programmation, on est souvent confronté à des situations où on a besoin de choisir
entre 2 ou plusieurs traitements selon la réalisation ou non d’une certaine condition d’où la
notion de traitement conditionnel.

II- Opérateurs de comparaison :


Python est capable d’effectuer toute une série de comparaisons entre le contenu de deux
variables, telles que :

Observez les exemples suivants avec des nombres entiers.

Python renvoie la valeur True si la comparaison est vraie et False si elle est fausse. True et
False sont des booléens.

Dans le cas des chaînes de caractères, seuls les tests == et != ont un sens. En fait, on peut
aussi utiliser les opérateurs <, >, <= et >=. Dans ce cas, l’ordre alphabétique est pris en
compte, par exemple "a" < "b" renvoie True c.à.d. "a" est inférieur à "b" car le caractère a est
situé avant le caractère b dans l’ordre alphabétique. En fait, c’est l’ordre ASCII des caractères
qui est pris en compte (à chaque caractère correspond un code numérique).

Enfin, on peut comparer des chaînes de caractères de plusieurs caractères. Dans ce cas,
Python compare les deux chaînes de caractères, caractère par caractère, de la gauche vers la

16 / 55
Prog.Python FST-LCS1 N.AMDOUNI

droite (le premier caractère avec le premier, le deuxième avec le deuxième, etc). Dès qu’un
caractère est différent entre l’une et l’autre des deux chaînes, il considère que la chaîne la plus
petite est celle qui présente le caractère ayant le plus petit code ASCII (les caractères suivants
de la chaîne de caractères sont ignorés dans la comparaison).

III- Structure conditionnelle simple :


Syntaxe :

Si <condition> Alors
<action(s)>
Fin si

Dans cette forme, la condition est évaluée. Si elle vaut vrai alors c'est la séquence d'actions
qui est exécutée sinon c'est l'action qui suit l'action conditionnelle dans l'algorithme qui est
exécutée.

On remarque que Python utilise la notion d’indentation (espacement) au niveau du bloc


d’instruction ce qui lui permet de distinguer quelles sont les instructions à exécuter si la
condition est vraie. Python gère automatiquement l’ensemble de ces espacements, il suffit de
mettre : et de taper ENTREE pour que le curseur soit placé au bon endroit d’écriture.

17 / 55
Prog.Python FST-LCS1 N.AMDOUNI

IV- Structure conditionnelle composée :


Syntaxe :

Si <condition> Alors
<action(s)1>
Sinon
<action(s)2>
Fin si

Dans cette forme, la condition est évaluée. Si elle vaut vrai alors c'est la séquence d'actions
1 qui sera exécutée sinon c'est la séquence d’actions 2 qui sera exécutée.

V- Structure conditionnelle imbriquée


Syntaxe

Si <condition1> Alors
<action(s)1>
Sinon
Si <condition2> Alors
<action(s)2>
SinonSi <condition k-1> Alors
<action(s)k-1>
Sinon
<action(s)k>
Fin si

18 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Si la condition 1 est vraie, alors la séquence d’actions 1 sera exécutée sinon on évalue la
condition 2 si elle est vraie la séquence d’actions 2 sera exécutée. Enfin, si aucune des k-1
conditions est vraie alors on exécute la séquence d’actions k.

VI- Importance de l’indentation

Pourtant les 2 codes sont très similaires produisent des résultats très différents.

Donc il faut faire bien attention à l’indentation !

19 / 55
Prog.Python FST-LCS1 N.AMDOUNI

VII- Tests multiples


Les tests multiples permettent de tester plusieurs conditions en même temps en utilisant
des opérateurs booléens. Les deux opérateurs les plus couramment utilisés sont le OU et le
ET. Voici un petit rappel sur le fonctionnement de l’opérateur OU :

et de l’opérateur ET :

En Python, on utilise le mot réservé and pour l’opérateur ET et le mot réservé or pour
l’opérateur OU. Respectez bien la casse des opérateurs and et or qui, en Python, s’écrivent en
minuscule. En voici un exemple d’utilisation :

Notez que le même résultat serait obtenu en utilisant deux instructions if imbriquées :

20 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Chapitre 3: Les structures itératives en Python

I- Introduction
En programmation, on est souvent amené à répéter plusieurs fois une ou plusieurs
instructions. Les structures itératives (ou répétitives) permettent d'exécuter plusieurs fois de
suite une ou plusieurs instructions, d’où leur appellation équivalente de boucle.
Incontournables à tout langage de programmation, les boucles vont nous aider à réaliser cette
tâche de manière compacte et efficace.

II- La fonction range()


L’instruction range() est une fonction spéciale en Python qui génère des nombres entiers
compris dans un intervalle. Elle fonctionne sur le modèle range([début,] fin[, pas]). Les
arguments entre crochets sont optionnels.
L’argument optionnel début est par défaut égal à 0.
On s’arrête toujours en fin-1.
L’argument optionnel pas qui est par défaut égal à 1 peut être un entier positif ou négatif.

NB : _ donne le résultat de la dernière commande exécutée.

La notion d’intervalle est utilisée pour déterminer la plage des valeurs que va prendre un
compteur dans une boucle.

21 / 55
Prog.Python FST-LCS1 N.AMDOUNI

III- La boucle for

Syntaxe :

L’instruction Pour est matérialisée via le mot clé for de python dont la syntaxe a la forme
suivante :
Pour <compteur> de <début> à <fin> faire
<instruction(s)>
Finpour

indentation

• <compteur> : est un compteur de type entier généralement;


• <début> et <fin> : valeur initiale et valeur finale du compteur ;
• <instruction(s)> : action ou séquence d’actions à répéter (fin-debut +1) fois ;
• La boucle for est utilisée lorsque le nombre d’itération est connu à l’avance ;
• <compteur> reçoit une valeur initiale <début> pour la première fois (par défaut égale 0),
<début> ne doit pas être modifiée par une action de traitement à l’intérieur de la boucle;
• <compteur> est incrémenté par défaut par 1 à chaque exécution du corps de la boucle for.
Cette valeur d’incrémentation est appelée le pas de la boucle ;
• L’exécution de la boucle s’arrête lorsque <compteur> atteint <fin-1>.
• Notons que l’instruction for réserve une indentation pour le bloc qui se répète.

1- Boucle croissante

Supposons qu’on veut utiliser une boucle for pour effectuer différents affichages :

• affichage des entiers compris entre 0 et 3 :

• affichage des entiers compris entre 1 et 10 :

22 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• affichage des entiers impairs compris entre 1 et 20 :

2- Boucle décroissante :
Le pas doit être une valeur négative avec l’argument début > l’argument fin :

Remarque :
On peut utiliser une boucle for pour itérer sur les éléments d’une chaîne de caractères. La
forme générale de la boucle est la suivante :

Exemple :

23 / 55
Prog.Python FST-LCS1 N.AMDOUNI

IV- La boucle while

On utilise l’instruction while pour répéter un traitement tantque une condition est vérifiée
ou jusqu’à ce qu’une condition soit vraie. Notons que l’instruction while réserve une
indentation pour le bloc qui se répète.
1- TANTQUE ….FAIRE :

Syntaxe :

Tantque (Condition) faire


<instruction(s)>
Fintantque

• <Condition> : condition d’exécution de la boucle.


• <instruction(s)> : action ou ensemble d’actions à exécuter tant que la condition est
vérifiée.
• Le traitement est exécuté tant que la condition est vérifiée sinon on sort de la boucle.
• Si la condition n’est pas vraie dès le début, la boucle ne sera jamais exécutée (0 fois).

• Exemple 1: le nombre d’itérations est connu à l’avance :


On se propose de calculer la somme S=1+2+…+n avec n une donnée :

• Exemple 2 : le nombre d’itérations est inconnu à l’avance (durée imprévisible du


traitement) :
On demande de saisir une variable x strictement positive et de proposer à l’utilisateur la
possibilité d’introduire une nouvelle valeur en cas où x ne vérifie pas la condition :

24 / 55
Prog.Python FST-LCS1 N.AMDOUNI

2- REPETER ….JUSQU’A :

Syntaxe :

Répéter
<instruction(s)>
Jusqu’à (<Condition>)

• <Condition>: condition d’arrêt et de sortie de la boucle


• <instruction(s)>: action ou ensemble d’actions à exécuter tant que la condition n’est pas
vérifiée, dès qu’elle soit vérifiée, l’exécution du traitement s’arrête.
• Le nombre de répétition n’est pas connu à l’avance.
• Le traitement est exécuté au moins une fois quelque soit le résultat de la condition.

Exemple 1 : Contrôle de saisie

Exemple 2 : On se propose de calculer la somme s=1+2+…+n avec n une donnée avec le


contrôle de saisie :

25 / 55
Prog.Python FST-LCS1 N.AMDOUNI

V- Les instructions continue – break – else


1- L’instruction continue

Elle permet de sauter une itération d’une boucle et de passer à l’itération suivante :

2- L’instruction break

Elle permet de quitter la boucle quand une condition est vraie :

3- L’instruction else

Elle permet d’exécuter un traitement alternatif quand une boucle se termine :

26 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Chapitre 4: Les conteneurs à accès séquentiel


(Listes, Tuples et Chaînes) en Python

I- Introduction
Python permet de regrouper un ensemble de données de même type ou de types différents
à l’intérieur de structures de données spéciales appelées conteneurs. Il existe deux catégories
de conteneur :

• Les conteneurs séquentiels : On note les listes, les tuples et les chaines de caractères.
A l’intérieur de ces structures de données, les éléments sont rangés en utilisant des
index (commençant de 0).
• Les conteneurs à accès directs qui seront abordés dans le chapitre suivant.
Dans la suite, on va exposer les propriétés communes aux conteneurs séquentiels, puis on
abordera le côté spécifique de chacun de ces derniers.

II- Opérations communes aux conteneurs :


On dispose d’un conteneur séquentiel C qui peut être :

• Une liste : Une séquence d’éléments encadrés par des crochets []

• Un tuple : une séquence d’éléments encadrés par des parenthèses

• Une chaine : une séquence de caractères encadrés par des côtes ou des chevrons ‘’ ou
«»:

Les opérations communes sur un conteneur séquentiel C sont :

• Taille : len(C)

• Accès à un élément : C[index de l’élement] : Les index permis sont compris entre 0 et
len(C )-1 pour un parcours de gauche à droite et entre -1 et –len(C) pour un parcours
de droite à gauche

27 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• Accès à une partie des éléments : C[i :j] : renvoie un conteneur constitué des éléments
se trouvant entre la position i et la position j-1.
NB :
C[ :i] : un conteneur constitué des éléments d’indices compris entre 0 et i-1
C[i :] : un conteneur constitué des éléments d’indices compris entre i et len(C)-1.
C[ ::] : renvoie la totalité du conteneur
C[ ::-1] : inverse la liste des éléments

• Accès à une partie des éléments avec notion de pas : C[i :j :k] : renvoie un conteneur
stockant les éléments entre les deux positions i et j-1 en effectuant des sauts
d’amplitude k

• Test d’appartenance : x in C

• Test de non appartenance : x not in C

28 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• Concaténation : l’opérateur + permet de coller les éléments de deux ou plusieurs


conteneurs

• Répétition : C*n : l’opérateur * permet de créer un conteneur contenant n copies de C

• Recherche de la position d’un élément : C.index(x)

• Calcul du nombre d’occurrence d’un élément : C.count(x)

• Minimum et maximum : min(C), max(C)

NB : Les conteneurs ne peuvent pas être tous modifiés après leurs créations, seules les listes
sont des structures de données modifiables ou mutables ou non immuables. Les tuples et les
chaines sont non modifiables, non mutables ou immuables.

29 / 55
Prog.Python FST-LCS1 N.AMDOUNI

III- Commandes spécifiques aux listes


• création :
liste vide :

liste non vide :

avec les [] :

liste en compréhension : La syntaxe est la suivante :


NomListe=[expression for indice in conteneur/itérable if condition] :

30 / 55
Prog.Python FST-LCS1 N.AMDOUNI

conversion

• modification : on utilise l’opérateur d’affectation =


d’un élément

d’un slice

• ajout
d’un élément à la fin : on utilise la commande append

d’un slice : avec la commande extend

31 / 55
Prog.Python FST-LCS1 N.AMDOUNI

insertion : avec la commande insert(position,nouvel_élément)

• suppression
d’un élément : trois possibilités : del, remove et pop

d’un slice

• copie :
copie normale : avec la commande copy :

32 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Donc, on remarque que A=L (une affectation) n’implique pas la création d’un
nouvel objet, mais plutôt la création d’une nouvelle étiquette (référence) vers
l’objet déjà créé.
D’où la modification d’une liste implique la modification de l’autre liste. La
solution à ce problème consiste à créer une copie de l’objet mutable indépendante
de l’originale.
Mais si une liste contient des objets eux-mêmes mutables, la copie que nous
venons d’effectuer est insuffisante car ile s’agit d’une copie superficielle.
La solution : Effectuer une copie profonde, en utilisant la fonction deepcopy du
module copy.

copie profonde : avec la commande deepcopy

• tri : avec la commande sort

• inversion : avec la commande reverse

33 / 55
Prog.Python FST-LCS1 N.AMDOUNI

IV- Commandes spécifiques aux tuples


• création :
tuples vides :

création d’un tuple non vide avec les () :

avec la commande tuple :

par conversion

en compréhension

• modification :
Les tuples sont non modifiables, toute tentative de mise à jour déclenche une erreur :

34 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• ajout d’un élément :

On écrase l’ancien tuple avec le résultat de la concaténation de t avec le tuple (1,)


(1,) est un tuple composé d’un seul élément, la virgule est obligatoire.

• Récupération d’un élément/ Mise à jour d’un élément :

Un tuple est immuable (non modifiable) donc chaque modification revient à créer un
nouveau tuple et non à modifier le tuple existant (L’id du tuple change).

35 / 55
Prog.Python FST-LCS1 N.AMDOUNI

V- Commandes spécifiques aux chaînes


Les chaînes de caractères sont des objets non mutables (non modifiables). Outre les
opérations communes, Python offre plusieurs méthodes de manipulation de chaînes de
caractères :

• test de la nature de la chaine :


alphabétique (isalpha), numérique (isdigit) , vide (isspace) ou alphanumérique
(isalnum) :

• conversion majuscule / minuscule : upper et lower :

• commence avec/ se termine avec : startswith, endswith :

• éliminer les espaces à droite et à gauche : avec la commande strip :

• décomposition : commande split : décompose une chaine en utilisant un caractère ou


une sous chaine comme séparateur. Le résultat est toujours une liste :

36 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• coller plusieurs chaines : commande join : opération réciproque de split :

• Recherche d’une sous chaine dans une autre chaine : commande find :

• Remplacer une sous chaine par une autre : commande replace :

• Affichage formaté : commande format : Syntaxe : chaine.format(parametres) :

37 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Chapitre 5: Les conteneurs à accès direct


(Dictionnaires & Ensembles)
E en Python

I- Introduction
Dans le chapitre précédent, on a traité les conteneurs séquentiels de Python. Pour accéder à un
élément d’un conteneur, on utilise son index. Les valeurs autorisées des index sont
obligatoirement séquentielles. Python permet d’utiliser une autre catégorie de conteneurs
maniant des index organisés d’une manière non séquentielle. Le conteneur n’est plus une
structure ordonnée, il s’agit bien d’un conteneur à accès direct.

II- Les dictionnaires


Un dictionnaire est un conteneur modifiable non ordonné composé d’un ensemble de couples
index : valeur. Les index sont aussi appelés des clés et les valeurs des entrées. La création
d’un dictionnaire peut se faire de plusieurs manières :

• Dictionnaire vide :

• La commande dict (avec comme paramètre une liste de listes,


listes, chacun de la forme
[clé ,valeur]) :

• Les {} :

38 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• En compréhension

• Directement (en utilisant la syntaxe NomDict[cle]=valeur) :

La taille d’un dictionnaire qui est le nombre d’entrées qu’il contient est accessible via la
commande len,, pour afficher une valeur correspondante à une clé, on utilise la syntaxe
NomDict[clé],, les deux opérateurs in et not in testent l’appartenance d’une clé à un
dictionnaire :

39 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Python permet d’accéder aux informations stockées au niveau d’un dictionnaire de plusieurs
manières :

Une entrée peut être accédée par la commande get :

Par contre, la commande setdefault permet de :

• créer une entrée vide si on fournit un index non encore utilisé et pas de valeur en
deuxième paramètre :

• Ajouter une entrée :

La mise à jour d’un dictionnaire passe par l’ajout, la modification et la suppression d’entrées :

40 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Python offre un ensemble de commande de mise à jour pour les dictionnaires :

• update : La syntaxe est d1.update(d2) : Fusionne deux dictionnaires. Si la clé figure


dans les deux dictionnaires alors la valeur de l’entrée correspondante dans d1 sera
mise à jour, sinon, une nouvelle entrée est créée dans d1 :

• pop : la syntaxe est NomDict.pop(index) : supprime l’entrée dont la clé est index et la
retourne en résultat ; popitem : la syntaxe est NomDict.popitem() : supprime
aléatoirement une entrée et la retourne :

• clear : La syntaxe est NomDict.clear() : efface le contenu d’un dictionnaire

• copy : La syntaxe est d2=d1.copy() : copie un dictionnaire dans un autre après avoir
importer le module copy.

41 / 55
Prog.Python FST-LCS1 N.AMDOUNI

III- Les ensembles


Les ensembles Python modélisent les ensembles mathématiques. C’est une collection
d’objets non ordonnées sans redondance de même types ou de types différents. Les éléments
d’un ensemble ne doivent jamais être des listes, des dictionnaires ou d’autres ensembles.
Un ensemble peut être créé de plusieurs manières :

• ensemble vide :

• la commande set :

• les {}

• en compréhension

Un ensemble est une structure de données non ordonnée. La commande len donne la
cardinalité de l’ensemble. On peut tester l’appartenance d’un élément à un ensemble mais on
ne peut pas utiliser un indice :

La mise à jour d’un ensemble est possible vue que


que c’est un type mutable :

• ajout d’un élément

42 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• Suppression d’un élément :


remove : La syntaxe est s.remove(elt) : supprime un élément existant et déclenche une
exception dans le cas échéant :

discard : La syntaxe est s.discard(elt) : supprime un élément s’il existe et ne déclenche


pas d’erreurs si elt ne fait pas partie de s :

pop : Le syntaxe est s.pop() : supprime un élément aléatoire de s et déclenche une


exception si l’ensemble est vide :

Toutes les opérations ensemblistes sont possibles en Python, on peut tester si :

• deux ensembles sont identiques ou différents : Les opérateurs de comparaisons ==


et != :

43 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• deux ensembles sont disjoints (aucun élément en commun) :

• un ensemble est un sous ensemble d’un autre

• un ensemble contient un autre ensemble

• L’union

• L’intersection

• La différence

Les opérations de réunion, intersection et différence se présentent sous une 2ème forme en
python qui autorise une sorte de mise à jour de l’ensemble en question :

44 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Chapitre 6 : Les fonctions en Python

I- Introduction
Python offre une panoplie de fonctions prédéfinies prêtes à l’utilisation. On distingue les
fonctions qui se chargent au moment du démarrage de l’interpréteur comme la fonction abs()
ou la fonction len() …(il suffit d’appeler ses fonctions en précisant le(s) paramètre(s) de
chacune), d’autres qui se chargent au moment de l’importation de modules (cas de sqrt du
module math ou de polar du module cmath) … Ce chapitre a pour but d’initier à la
programmation des fonctions en Python.

II- Définition
Une fonction est un bloc d’instructions qui possède un nom, qui reçoit (éventuellement) un
certain nombre de paramètres non typés et retourne un résultat (un ou plusieurs objets),
comme elle peut ne rien retourner (procédure). L’usage des fonctions permet :
• d’éviter la répétition
• de rendre le code réutilisable à travers l’importation de fichiers de fonctions
• et de décomposer les tâches complexes en tâches simples plus abordables.

On doit définir une fonction alors à chaque fois qu’un bloc d’instructions se trouve répété à
plusieurs reprises.

III- Syntaxe
La syntaxe Python pour la définition d’une fonction est la suivante :

• Le mot clé def sert à déclarer un objet de type fonction


• Il est suivi du nom de la fonction ainsi que de parenthèses contenant les paramètres
de cette dernière (Si la fonction a plusieurs paramètres, on utilise les virgules pour
les séparer. En cas où il n’y a pas de paramètres, on ouvre et on ferme les
parenthèses obligatoirement. On ne précise jamais le type des paramètres. Une
fonction peut recevoir des paramètres de natures différentes entre deux jeux
d’appels grâce à la notion de typage dynamique (le type d’une variable dépend de
son contenu)
• La chaine de documentation est optionnelle mais fortement recommandée.
• Le bloc d’instruction est obligatoire. L’instruction pass permet d’avoir un bloc
d’instruction vide (si on n’a pas encore désigné de quoi est chargé notre fonction).

45 / 55
Prog.Python FST-LCS1 N.AMDOUNI

• L’appel d’une fonction se fait comme suit :


res=NomFonction(paramètres_
res=NomFonction(paramètres_effectifs)
• Une fonction ne retournant pas de résultat (une procédure) est appelée comme
suit : NomFonction(paramètres_effectifs) et si vous utilisez la syntaxe :
res= NomFonction(paramètres_effectifs),
NomFonction(paramètres_effectifs), la variable res contiendra la valeur
None.

IV- Première fonction Python

On vient de créer une première fonction sous Python (La saisie peut être effectuée au
niveau du shell ou à l’intérieur d’un nouveau fichier .py. La fonction TableMul5
bleMul5 ne possède
pas de paramètres, on lui a confié la responsabilité d’afficher la table de multiplication
mu de 5,
ce qui explique la documentation entre triple côte. Une fois déclarée, la fonction peut être
appelée comme le montre l’exemple suivant :

Une fonction est définie pour assurer la factorisation du code et la réutilisabilité. Dans
l’exemple
ple précédent, en dehors de la valeur 5, la fonction n’accepte aucune autre valeur. D’où
la pertinence de la notion de paramétrage. On redéfinit alors TableMul en réservant un
paramètre n qui représentera la valeur de l’entier dont on cherche à afficher sa table de
multiplication :

46 / 55
Prog.Python FST-LCS1 N.AMDOUNI

La fonction TableMul autorise des appels avec des paramètres de natures différentes
(Besoin de contrôle d’éventuelles erreurs de saisie à travers la gestion des exceptions…) :

V- Le NonType & les fonctions avec retour


On peut aller un peu plus loin avec les fonctions Python et développer une vraie fonction
qui retourne un résultat récupérable par le programme appelant. Le mot clé return permet
d’arrêter l’exécution d’une fonction et de renvoyer un résultat. Tous les types vus en Python
peuvent être utilisés comme un retour. Quand la fonction ne programme pas d’instructions de
type return, Python retourne tout de même un objet vide ayant comme type NoneType. C’est
un type réservé par le langage pour exprimer le vide.

On va partir d’une fonction qui affiche la somme de deux entiers passés en paramètres :

En vérifiant le type du résultat obtenu, on tombe sur le cas d’un objet vide, très logique
print ne fait pas le travail de return :

47 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Rectifions la fonction som de sorte qu’elle soit une vraie fonction avec un return :

Le type du résultat est bel et bien un entier.


Le mot clé return peut figurer dans plusieurs endroits au sein d’une fonction.
Exemple :
Soit la fonction signe qui retourne une chaine exprimant le signe d’un argument x :

Quand l’instruction return retourne plus d’un résultat en retour (plusieurs objets retournés
en même temps), la fonction retourne un tuple composé des objets retournés.retournés La fonction
somdifprod calcule la somme, la différence et le produit de deux entiers a et b passés en
paramètres, un objet de type tuple constitué des trois résultats est alors retourné. Au moment
de l’appel, il faut prendre en considération la nature du résultat. Soit qu’on utilise un objet qui
stockera tout le tuple
ple puis pour accéder aux résultats on utilise les indices respectifs suivant la
taille de ce dernier, soit qu’on effectue un appel basé sur trois variables :

48 / 55
Prog.Python FST-LCS1 N.AMDOUNI

VI- Passage
assage des paramètres

1- Passage de paramètres par position


Chaque paramètre formel sera substitué par le paramètre effectif correspondant selon sa
position lors de l’appel (il faut respecter l’ordre des paramètres).

2- Passage de paramètres par nom


Python
ython autorise d’appeler la fonction sans trop respecter l’ordre des arguments au moment
de la déclaration. Il suffit d’utiliser le nom du paramètre au moment de l’appel et de préciser
la valeur qu’il prend : paramètre_formel=paramètre_effectif.

3- Paramètres
res par défaut
Le principe est d’affecter des valeurs aux paramètres formels lors de la définition de la
fonction. Si le paramètre n’est pas précisé lors de l’appel, c’est la valeur par défaut qui sera
considérée. Si la valeur du paramètre est précisée lors de l’appel, c’est bien cette dernière qui
sera utilisée.
Les paramètres formels avec valeur par défaut doivent être regroupés à la fin de la liste des
paramètres.

Attention, cette définition n’est pas correcte : def QR(a=25,b),, il faut utiliser la définition
d
suivante : def QR(b,a=25)

49 / 55
Prog.Python FST-LCS1 N.AMDOUNI

4- Mode de passage des paramètres


En Python, les paramètres sont toujours passés par référence (par variable) mais ils sont
modifiables selon qu’ils soient :
• mutables (listes, ensembles et dictionnaires)
• non mutables (int, float, str, complex, bool, tuple et chaînes de caractères)

Exemple 1 :

On va essayer de modifier un objet non mutable (int).

L’affichage de la valeur de a et de son identifiant après l’appel de la fonction donne les


valeurs initiales de l’avant appel.

Pour réussir la modification, l’appel doit créer un nouvel objet en écrasant l’ancien contenu
de a en utilisant une affectation :

50 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Exemple 2 :

On va essayer de modifier un objet mutable (list) :

L’identifiant de la liste L est constant. La modification de L est visible à l’extérieur de la


fonction modifier_mutable. C’est le cas de tous les types mutables.

VII- Variables locales et variables globales


Une variable locale est une variable définie au niveau d’une fonction. Elle n’est visible que
dans cette fonction.

Une variable globale est une variable définie au niveau du programme principal. Elle est
donc visible par n’importe qu’elle fonction définie au niveau de ce programme.

Pour qu’une fonction utilise une variable globale définie au niveau du programme
principal, on utilise le mot clé global suivi du nom de la variable en question.

De façon générale, il est déconseillé de faire usage de variables globales.

51 / 55
Prog.Python FST-LCS1 N.AMDOUNI

VIII- Fonction locale et Fonction globale


Il est possible de définir une fonction dans une autre fonction. Dans ce cas, on parle de
fonction locale càd elle n’est visible que par la fonction dans la quelle elle a été définie.

L’appel de la fonction max2 dans le programme principal provoquera une erreur.

IX- Nombre de paramètres variable


Python permet de définir une fonction avec un nombre arbitraire de paramètres.
Généralement ce paramètre est appelé args ou params et il est toujours précédé du caractère
*. Utiliser ce modèle de fonctions permet une flexibilité de programmation quand on ne sait
pas vraiment quel sera le nombre de paramètres au moment de l’appel.

52 / 55
Prog.Python FST-LCS1 N.AMDOUNI

X- Les fonctions lambda


En Python, la fonction lambda est utilisée lorsque la fonction est une expression
mathématique. Syntaxe de définition d’une fonction lambda:
lambda

NomFonction=lambda
lambda paramètres : expression

Ou

NomFonction=lambda
lambda paramètres : expression1
expression1 if condition else expression 2

NB : lambda est un mot réservé du langage.

Les
es fonctions lambda sont réservées à des situations
situations relativement simples. Leur définition
doit tenir sur une seule ligne, et elles ne peuvent pas contenir d’instructions composées (pas
d’affectation, pas de boucle, etc.). Elles consistent donc essentiellement en la définition d’une
expression calculée en fonction des paramètres qui lui sont passés.

Pour prendre un exemple simpliste (et pas très utile), les deux définitions suivantes de la
fonction f sont équivalentes :

Exemples :

Les fonctions anonymes permettent d’appliquer deux commandes intéressantes intér sur les
listes :
• map : Applique une fonction sur tous les éléments d’une liste pour former une
nouvelle liste distincte de l’initiale. La syntaxe de map est la suivante : list(map(f,l))

53 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Supposons qu’on veut ajouter 1 à tous les éléments d’une liste l :

• filter : crée une liste contenant les éléments qui ne vérifient pas un critère spécifié par
une fonction f d’une liste initiale. La syntaxe de filter est la suivante : list(filter(f,l))

Supposons qu’on veut supprimer tous les multiples de 3 d’une liste d’entiers :

XI- Les fonctions récursives


Une fonction est dite récursive si elle s’appelle elle-même.
elle même. Il faut prévoir toujours une
condition d’arrêt pour stopper les appels récursifs sinon on obtient un traitement similaire à
une boucle infinie. Les appels récursifs se déroulent selon le principe LIFO (Last In First
Out). Python utilise une pile d’exécution pour enregistrer les appels et leurs contextes
(paramètres utilisés, résultats rendus, variables locales déclarées par chacun des appels …).

Exemple :

On sait que n !=n*(n-1)*…*1,


1)*…*1, il suffit de remarquer que calculer n ! revient à multiplier n
par (n-1) ! que le problème soit résolu. Dans la suite, on présente une fonction python chargée
de calculer la factorielle de n d’une manière
maniè récursive :

54 / 55
Prog.Python FST-LCS1 N.AMDOUNI

Parfois la fonction ne retourne aucune valeur, mais effectue des actions récursives,
récursives tel est
le cas de l’affichage d’une liste ou son inversion :

XII- Les modules personnels (Bibliothèques)


Python permet de créer des modules personnels qui regroupent un ensemble de fonctions et
de variables (voir de classes, notion
notio qui sera abordée plus tard)) à l’intérieur d’un même fichier
.py et de les utiliser en cas de besoin. Le fichier possède un nom défini par le programmeur.
Avant de penser
enser développer un module, vérifier que python n’offre pas déjà une alternative.

• L’instruction import nom_module permet de charger la totalité du module en


mémoire. Les fonctions et les variables du module sont accessibles de la façon
suivante : nom_module.nom_element_du_module.
nom_modu

• L’instruction import nom_module as alias permet de charger la totalité du


module en mémoire. Les fonctions et les variables du module sont accessibles de
la façon suivante : alias.nom_element_du_module.

• Pour choisir les éléments à charger d’un module et gagner en mémoire, la syntaxe
suivante est sollicitée : from nom_module import fonction1,fonction2,var1 …
Dans ce cas, les éléments importés sont accessibles sans le préfixe nom_module.

• Le contenu d’un module


mo est affiché par la commande dir(nom_module).
dir(nom_module)

55 / 55

Vous aimerez peut-être aussi