Cours Python
Cours Python
ISIGK
2023-2024
1
Plan du cours
2
Chapitre 1 –Le langage Python : Notions
de base
3
Qu’est ce que Python ?
4
Qu’est ce que Python ?
➢ Usage :
▪ Scripts pour automatiser des tâches
▪ Analyse de données
▪ Calcul numérique
▪ Développement web
▪ Instagram, YouTube,
5
Présentation générale de Python
6
Présentation générale de Python
7
Présentation générale de Python
▪ De nombreux langages vous obligent ▪ Python est plutôt directement
à compiler (traduire) votre programme interprété en instructions machine.
sous une forme que la machine
comprend.
8
Avantages de Python (1)
▪ C’est un langage interprété. Un script Python n’a pas besoin d’être compilé pour être
exécuté, contrairement à des langages comme le C ou le C++.
▪ Python est un langage portable (peut fonctionner sur différentes plateformes OS
(operating system);
▪ Python convient aussi bien à des scripts d'une dizaine de lignes qu'à des projets
complexes de plusieurs dizaines de milliers de lignes;
▪ La syntaxe de Python est très simple et, combinée à des types de données évolués
(listes, dictionnaires,…), conduit à des programmes à la fois très compacts et très
lisibles;
▪ Python est un Langage de haut niveau. Il demande relativement peu de
connaissance sur le fonctionnement d’un ordinateur pour être utilisé.
▪ Il permet de faire beaucoup avec peu de code, un programme python est 3 à 5
fois moins court qu’un programme C ou java.
9
Présentation générale de Python
Un exemple!
10
Avantages de Python
➢ Python est Dynamiquement typé:
▪ tout objet manipulable par le programmeur possède un type bien défini à l'exécution, qui n'a pas
besoin d'être déclaré à l'avance.
➢ Il est gratuit. Vous pouvez l’installer sur autant d’ordinateurs que vous voulez
(même sur votre téléphone !).
11
Avantages de Python
➢ Python intègre, comme Java ou les versions récentes de C++, un
système d'exceptions,
▪ permettant de simplifier considérablement la gestion des erreurs,
▪ lorsqu'une exception se produit, l'exécution normale du programme est interrompue
et l'exception est traitée !!
*: Auto-complétion – ou complément automatique – est une fonctionnalité d’un logiciel qui propose à l’utilisateur des compléments
de réponses pouvant convenir aux premières mots ou aux premières phrases qu’il a commencé à taper dans le champ de saisie.
13
Environnement de développement intégré
➢ Il existe d'autres IDE pour Python :
▪ Eclipse/Pydev,
▪ NetBeans,
▪ Spyder,
▪ Eric...
15
Mode interactif & mode script :
Mode script (1)
Une nouvelle fenêtre s’ouvre , vous écrivez votre code Python. Il faut
l’enregistrer dans un fichier d’extension « .py »
16
Mode interactif & mode script
Mode script (2)
Exécution :
17
Commentaires, Aide et modules en Python :
Commentaires
➢ Les commentaires rendent votre programme plus facile à comprendre.
Lorsque vous regardez votre code ou que d'autres veulent collaborer avec
vous, ils peuvent lire vos commentaires et facilement comprendre ce que fait
votre code.
▪ Le signe # est pour les commentaires. Un commentaire est une ligne de
texte que Python n'essaiera pas d'exécuter en tant que code. C'est juste
pour les humains à lire.
▪ Vous pouvez écrire un commentaire multi-ligne, en commençant chaque
ligne avec #, cela peut être une douleur.
▪ Au lieu de cela, pour les commentaires sur plusieurs lignes, vous pouvez
inclure le bloc entier dans un ensemble de guillemets (" " " )
18
Commentaires, Aide et modules en Python :
Utilisation de l’aide
➢ L’utilisation de l’aide en ligne se fait par la commandehelp(identificateur)
➢ Exemple :
>>>help(int)
Help on class int in module builtins: class int(object)
| int(x=0) -> integer
| int(x, base) -> integer
….
Methods defined here:
| abs (...)
| x. abs () <==> abs(x)
| add (...)
| x. add (y) <==> x+y
| and (...)
| x. and (y) <==> x&y
| bool (...)
| x. bool () <==> x != 0 19
Commentaires, Aide et modules en Python :
Import de modules (1)
Trois manières d’import de modules :
❖ 1ère manière:
>>>import math
>>>dir(math)
[' doc ', ' name ', ' package ', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'copysign', 'cos',………, 'pi', 'pow', 'radians',
'sin', 'sinh','sqrt', 'tan', 'tanh', 'trunc']
>>> math.ceil(7.8989) #partie entière supérieure
8
>>> math.floor(7.8989) #partie entière inférieure
7
>>>help(math.ceil)
Help on built-in function ceil in module math:
ceil(...)
ceil(x)
Return the ceiling of x as an int.
This is the smallest integral value >= x. 20
Commentaires, Aide et modules en Python :
Import de modules (2)
21
Commentaires, Aide et modules en Python :
Import de modules (3)
Non
Mutables
Mutables
Non
Ordonnés Ordonnés
Ordonnés
-Tuples
-Ensembles
-Chaînes de Les listes
-Dictionnaires
caractères
25
Les Types sous Python
Python est un langage dont le typage est automatique. Cela signifie que bien qu’il gère
différents types, lorsqu'une variable est affectée, l'interpréteur trouvera automatiquement
son type.
26
Les types élémentaires
Affectation des variables
En Python comme dans de nombreux autres langages, l'opération d'affectation est représentée
par le signe égal :
Mémoire
@
n 7 en binaire
@
msg « quoi de neuf » en binaire…
@ 3,14159 en binaire
Pi .
27 27
Les types élémentaires
Affectation des variables : référence → objet
L’affectation opère de droite à gauche :
– le terme de droite est une expression évaluée, qui crée ou référence un objet
– le terme de gauche est un identificateur (référence, nom, étiquette)
C’est l’objet qui porte le type et les données (la valeur, pour un objet numérique).
– Un objet ne peut pas changer d’identité (≈ adresse mémoire), ni de type.
– Un objet peut avoir plusieurs noms (alias).
– Un identificateur associé d’abord à un objet peut ensuite référencer un nouvel objet !
28
Les types élémentaires
Affectation des variables
>>>x=5 x
>>>y=5 5
>>>x,id(x),type(x) y
(5, 505626168, <class 'int'>) 505626168
>>>y,id(y),type(y)
(5, 505626168, <class 'int'>)
29
Les types élémentaires
Affectation des variables
– Quand un objet n’a plus de nom (nombre de références nul), il est détruit
(mécanisme automatique de "ramasse-miettes", garbage collector).
30
Les types élémentaires
Nom des variables et mots réservés
▪ Les noms de variables sont des noms qu’on choisit assez librement.
▪ Quelques règles pour les noms de variables sous Python :
31
Les types élémentaires
Nom des variables et mots réservés
En plus de ces règles, il faut encore ajouter que vous ne pouvez pas
utiliser comme noms de variables les 29 « mots réservés » au langage ci-
dessous :
32 32
Les types élémentaires
34
Les types élémentaires :
Le type entier : <class int>
>>> pow(x,y) # calcul de x à la puissance y
729
>>> x/y # division réelle
0.5
>>> x//y #quotient de la division entière
0
>>> x%y #reste de la division entière
3
Les opérateurs de comparaison <, <=, !=, ==, >, >= :
>>>x==y
False
>>>x>=y
False
>>>x<=y
True
>>>x!=y
True
35
Les types élémentaires
Le type réel: <class float>
>>> x=12/7; y=4.
>>> x;y
1.7142857142857142
4.0
>>> type(x); type(y)
<class 'float'>
<class 'float’>
▪ Les opérations arithmétiques :
>>> x+y
5.714285714285714
>>> x-y
-2.2857142857142856
>>> x*y
6.857142857142857
>>> x/y
0.42857142857142855
36
Les types élémentaires
Le type réel: <class float>
>>> x**y
8.636401499375259
>>> x//y
0.0
>>> x%y
1.7142857142857142
>>> x=12/5
>>> x
2.4
>>>int(x) #Passage de réel en entier, l’objet retourné est un nouvel objet
2
37
Les types élémentaires
Le type booléen : <class bool>
La classe « bool » hérite de la classe « int »
41
Les opérations d’entrée/sortie
Opération de lecture : input()
Il est toutefois possible de convertir la quantité saisie en entier, réel ou même
booléen au moyen de int(), float(), et bool()
# flux parent
if conditionA:
#bloc d'instructions exécuté si la valeur de conditionA est True
if conditionB:
#bloc d'instructions imbriqué, exécuté si conditionA est True
# et si conditionB est True
# retour au flux parent
43
Structures conditionnelles & Itératives
Les structures conditionnelles
Syntaxe: (Attention à l’indentation !!! )
if condition1:
instruction 1
elif condition2:
L'indentation après le ":" est obligatoire.
instruction 2
elif condition3:
instruction 3
instruction 4
else :
instruction 5
instruction 6
44
Structures conditionnelles & Itératives
Les structures conditionnelles
Ecrire un programme qui saisit un nombre et teste si l’entier est nul, pair ou impair
45
Structures conditionnelles & Itératives
Les structures itératives : Boucle For
Syntaxe:
for i in range(a): for i in range(a,b,c):
instructions
instructions
for i in range(a,b): For i in iter:
instructions
instructions
(a) (b)
(c) (d) 47
Structures conditionnelles & Itératives
Boucle For
L’instruction for… in : permet d’itérer sur le contenu d’une liste, d’un tuple, les caractères d’une chaîne ou
même un fichier …
>>>L=list(range(5))
>>>L
[0,1,2,3,4] >>> a = [‘Zero', ‘Un', ‘Deux',
>>>L1=[] ‘Trois', ‘Quatre']
>>>for k in L:
L1.append(k**2) >>> for i in range(len(a)):
>>>L1 print(i, a[i])
[0, 1, 4, 9, 16] ...
>>>ch=”azerty” 0 Zero
>>>ch1='' 1 Un
>>>for c in ch: 2 Deux
ch1=ch1+c*2 3 Trois
aazzeerrttyy 4 Quatre
48
Structures conditionnelles & Itératives
Boucle For
Construction de listes par compréhension:
49
Structures conditionnelles & Itératives
Boucle tant que
▪ Syntaxe: Exemple :
i=1
while condition:
instructions1 while i<=5:
print(i)
else:
i +=1
instructions2 else:
print("Fin boucle")
50
Structures conditionnelles & Itératives
Utilisation du break, continue, pass
51 55
Structures conditionnelles & Itératives
Utilisation du break, continue, pass
▪ « pass » : Si à un endroit on a syntaxiquement besoin d'un bloc mais qu'il n'y a
rien à faire, on peut utiliser l'instruction pass, qui justement ne fait rien. pass a
une valeur nulle et sert à éviter les erreurs lors de l'implémentation de boucles,
fonctions ou méthodes car ces structures doivent contenir au minimum une
instruction.
▪ Exemple :
if condition:
pass
else:
instruction ...
52 55
Structures conditionnelles & Itératives
Utilisation du break, continue, pass
#utilisation de l’instruction « continue »
for num in range(2, 10):
if num % 2 == 0:
print("Un nombre paire", num)
continue
print("Un nombre impaire", num)
#utilisation de l’instruction « break» et « else »
for n in range(2, 10):
print("n=",n)
for x in range(2, n):
print("x=",x)
if n % x == 0:
print(n, "=", x, "*", n//x)
break
else: # exécuté à la fin normale de la boucle
print(n, "est un nombre premier")
53
Exercice 1: Jeu de devinette (1/2)
▪ Ecrire un programme devinette qui permet de deviner un entier généré
par le programme de façon aléatoire (compris entre 1 et 100). On
indiquera à l’utilisateur si l’entier introduit est plus grand ou plus petit
que l’entier caché.
▪ Un bravo sera affiché lorsqu’il aurait deviné l’entier, on lui indiquera
également au bout de combien de tentatives il est parvenu à trouver le
nombre.
Remarque:
Pour générer un entier aléatoire il faut importer le package random, puis
utiliser la fonction randint(a,b) où a et b désigne l’intervalle [a,b] dans
lequel l’entier aléatoire sera tiré.
54
Exercice 1: Jeu de devinette (2/2)
print("Jeu de devinette")
from random import *
c=randint(1,100)
x=int(input("devinez un entier entre 1 et 100: "))
i=1
while x!=c:
if x<c:
print("votre entier est plus petit que l'entier caché")
else:
print("votre entier est plus grand que l'entier caché")
i+=1
x=int(input("devinez un entier entre 1 et 100:"))
print("Bravoooo, vous avez deviné au bout de ", i, "tentatives")
55
Exercice 2 : (1/2)
56
Exercice 2: (2/2)
print ("devinette 2")
while x!=c and i<=tentatives:
from random import*
print ("il vous reste ", tentatives-i, "tentatives")
c=randint(1,100)
if x<c:
rep= input("niveau: F, M ou D: ")
print("votre entier est plus petit que l'entier caché")
while rep!="F" and rep!="M" and rep!="D" :
else:
rep= input("niveau: F, M ou D: ")
print("votre entier est plus grand que l'entier caché")
if rep=='F':
i+=1
tentatives=12
x=int(input("devinez un entier entre 1 et 100:"))
elif rep=='M':
if x==c:
tentatives=7
print("Bravoooo, vous avez deviné au bout de ", i,
else:
"tentatives")
tentatives=4
else:
print("vous avez ", tentatives, "tentatives")
print("Game over, vous avez épuisés vos tentatives, c'est
x=int(input("devinez un entier entre 1 et 100: "))
le :", c)
i=1
57/76
Chapitre 2 – Les Objets et les Fonctions
en Python
58
1) Les objets en Python
Python est un Langage Orienté Objet
▪Tout est objet : les données ordinaires comme les nombres ou les
chaînes de caractère sont des objets ; les fonctions sont des objets ; les
modules sont des objets ; et même les classes sont des objets....
Un objet B possède:
▪identité id(B)
▪Un type type(B): (intrinsèque : int, float, str, bool ... ou définit par
l’utilisateur à l’aide d’une classe)
▪contient des données (valeur).
▪L’opérateur « is » compare l’identité de 2 objets (adresses)
▪L’opérateur « == » compare le contenu de deux objets
59
1) Les conteneurs sous Python :
Objet Composite
60
1) Les conteneurs sous Python
Les séquences (1/2)
Une séquence est un conteneur ordonné d’éléments indexés par
des entiers indiquant leur position dans le conteneur.
Les indices commencent par 0.
Si « S » est une séquence :
▪ S[i] : retourne l’élément d’indice i de S
▪ S[ :a] : sous séquence d’éléments de début jusqu’à l’élément d’indice « a » exclu
▪ S[a: ] : sous séquence d’éléments de l’indice « a » inclus jusqu’à la fin
▪ S[ : ] : toute la séquence
61
1) Les conteneurs sous Python
Les séquences (2/2)
62
1) Les conteneurs sous Python
A. Les listes
Une liste est une collection ordonnée et modifiable d’objets
éventuellement hétérogènes séparés par des virgules et définis
entre crochets [ ].
▪len(L) : nombre d’éléments .
▪L[i] :élément d’indice « i ». Le premier élément d'une liste est
celui d'indice 0, le deuxième celui d'indice 1
Un indice négatif permet d'accéder aux éléments à partir de la fin
(dernier L[-1] et son premier L[-len(L)])
63
A. Les listes : Indexation et Slicing
Exemple :
Création et Accès Slicing
>>> L=[1, 2, 3, 6, 1.3, "hello", "bb"] >>> L[3:]
>>>len(L) [6, 1.3, 'hello', 'bb']
7 >>> L[:5]
>>L[0] [1, 2, 3, 6, 1.3]
1 >>> L[2:5]
>>>L[len(L)-1] [3, 6, 1.3]
‘bb’ >>>L[1:7:2] ou L[1::2]
>>>L[-1] [2, 6, 'hello']
‘bb’ >>>L[::2]
>>> L[:] [1, 3, 1.3, 'bb']
[1, 2, 3, 6, 1.3, 'hello', 'bb'] >>> L[::-1]
>>> L[7] ['bb', 'hello', 1.3, 6,
...IndexError: list index out of range 3, 2, 1]
64
A. Les listes:
Opérations sur les listes
>>>L_vide=[]
>>>L=list(range(5))
>>>L + [0,3,1] #l’opérateur + concatène les listes et donne une nouvelle liste
[0,1,2,3,4,0,3,1]
>>> L # L reste inchangée !!!!
[0,1,2,3,4]
>>>L*2 #L’opération list*n ou n*list concatène n copies de la liste
[0,1,2,3,4,0,1,2,3,4]
>>>L=L*2
>>>L
[0,1,2,3,4,0,1,2,3,4]
>>>L=list(range(5))
>>> L
[0, 1, 2, 3, 4]
>>> L+[1]*4
[0, 1, 2, 3, 4, 1, 1, 1, 1]
65
A. Les listes
Copie de liste (1/4)
>>> L=list(range(10))
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L1=L # Attention les deux listes référencient le même objet en mémoire
67
A. Les listes
Copie de liste (3/4)
▪ Pour recevoir une copie de liste indépendante, plusieurs manières existent:
>>> L2=L[:] print id(L) == id(L2) # False – L2 est un nouvel objet
>>> id(L), id(L1), id(L2) print id(L[0]) == id(L2[0]) # True – L2[0] est le même objet que L[0]
(46713952, 46713952, 37856880)
▪Ou encore:
>>>from copy import *
print id(L) == id(L3) # False – L3 est un nouvel objet
>>> L3=copy(L) print id(L[0]) == id(L3[0]) # True – L3[0] est le même objet que L[0]
Exemple:
>>> ch1='toto' >>> ch="bonjour"
>>> type(ch1) >>> ch_vide=""
<class 'str'> >>> ch_n_vide=" "
>>>ch_vide=‘’ >>> ch_vide==ch_n_vide
>>>ch_vide1="" False
>>>ch_vide==ch_vide1 >>> ch[0]
True 'b'
71
B. Les chaînes de caractères (2/5)
72
B. Les chaînes de caractères (3/5)
>>> dir(str)
[' add ',…… 'index', 'isalnum', 'isalpha',
'isdecimal', 'isdigit', … 'islower', 'isnumeric',
'isspace', 'istitle', 'isupper', 'join', 'ljust',
'lower', 'lstrip', 'maketrans', 'partition',
'replace', 'rfind', 'rindex', 'rjust', 'rpartition',
'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
>>> help(str.isalpha)
Help on method_descriptor:
isalpha(...) S.isalpha() -> bool
Return True if all characters in S are alphabetic
and there is at least one character in S, False otherwise.
73
B. Les chaînes de caractères (4/5)
Principales méthodes
>>>ch="BienVenu"
◦ isupper() et islower() : retournent True si la chaîne ne contient
respectivement que des majuscules/minuscules :
>>> ch.isupper()
False
◦ istitle() : retourne True si seule la première lettre de chaque mot de la chaîne est en
majuscule, et le reste du mot sont des lettres minuscules, sinon False:
>>> ch.istitle()
False
◦ isalnum(), isalpha(), isdigit() et isspace() : retournent True si la chaîne ne contient
respectivement que des caractères alphanumériques, alphabétiques, numériques
ou des espaces :
>>> ch.isalpha()
True
74
B. Les chaînes de caractères (5/5)
Principales méthodes
>>> ch.upper() # le résultat est une nouvelle chaîne
'BIENVENU'
>>> ch
'BienVenu'
>>> ch.lower()
'bienvenu’
>>> ch=ch.upper()
>>> ch
'BIENVENU'
Autres Méthodes utiles:
>>> ch= " bonjour tout le monde "
>>> ch.strip()
'bonjour tout le monde'
>>> ch.split()
['bonjour', 'tout', 'le', 'monde']
75
C. Les tuples (1/3)
Un tuple est une collection ordonnée et non modifiable d’éléments éventuellement
hétérogènes.
Syntaxe:
▪ Éléments séparés par des virgules, et entourés de parenthèses.
>>> t = 12345, 54321, ’salut!’
>>> t[0]
12345
>>> t
(12345, 54321, ’salut!’)
Les Tuples peuvent être imbriqués:
>>> u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, ’salut!’), (1, 2, 3, 4, 5))
76
C. Les tuples (2/3)
77
C. Les tuples (3/3)
Remarque :
Les chaînes et les Tuples n’étant pas modifiable, il est possible de migrer vers des
listes au moyen de l’instruction suivante list()
>>> t=(1,2,3)
>>> t=list(t)
>>> type(t)
<class 'list'>
>>> t.append(5)
>>> t
[1, 2, 3, 5]
>>> ch="Bonjour"
>>>list(ch)
['b', 'o', 'n', 'j', 'o', 'u', 'r']
78
D. Les dictionnaires (1/5)
Un dictionnaire (tableau associatif) est un type de données permettant de stocker
des couples cle:valeur,
▪ avec un accès très rapide à la valeur à partir de la clé,
▪ la clé ne peut être présente qu’une seule fois dans le tableau.
Caractéristiques:
▪ l’opérateur d’appartenance d’un élément « in » ;
▪ la fonction taille « len() » donnant le nombre de couples stockés ;
▪ permet de retrouver un objet par sa clé
▪ Il est itérable (on peut le parcourir)
▪ Non ordonné
▪ Mutable.
79
D. Les dictionnaires (2/5)
>>>d={1:'un', 2:'Deux',3:'trois',4:'Quatre', 5:'cinq'}
>>> type(d)
<class 'dict'>
>>> dir(dict)
[' class ', ….. ' repr ', ' setattr ‘,
setitem ', ‘ sizeof ', ' str ', ' subclasshook ', 'clear', 'copy', 'fromkeys', 'get', 'items',
'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> help(dict.keys)
Help on method_descriptor:keys(...)
D.keys() -> a set-like object providing a view on D's keys
>>>d. setitem (6,’six’) #ajoute un couple clé-valeur
>>>d
{1: 'un', 2: 'Deux', 3: 'trois', 4: 'Quatre', 5: 'cinq', 6:'six'}
80
D. Les dictionnaires (3/5)
>>>coef={"maths":5, "physique":4, "info":4}
>>>coef.items()
dict_items([('maths', 5), ('physique', 4), ('info', 4)])
>>>coef.keys()
dict_keys(['maths', 'physique', 'info'])
>>>coef.values()
dict_values([5, 4, 4])
>>> coef["maths"]
5
81
D. Les dictionnaires (4/5)
Le parcours d’un dictionnaire:
2éme méthode :
>>>for matiere, coefficient in coef.items():
print(matiere, ':', coefficient)
maths : 5
physique : 4
info : 4 82
D. Les dictionnaires (5/5)
Exemples de dictionnaires
>>> # insertion de clés/valeurs une à une >>> # définition en compréhension (ou intension)
>>> d1 = {} # dictionnaire vide >>> d3 = {x: x**2 for x in (2, 4, 6)}
>>> d1["nom"] = 3 >>> print(d3)
>>> d1["taille"] = 176 {2: 4, 4: 16, 6: 36}
>>> print(d1) >>> # utilisation de paramètres nommés
{'nom': 3, 'taille': 176} >>> d4 = dict(nom=3, taille=176)
>>> # définition en extension >>> print(d4)
>>> d2 = {"nom": 3, "taille": 176} {'nom': 3, 'taille': 176}
>>> print(d2) >>> # utilisation d'une liste de couples clés/valeurs
{'nom': 3, 'taille': 176} >>> d5 = dict([("nom", 3), ("taille", 176)])
>>> print(d5)
{'nom': 3, 'taille': 176}
83
E. Les ensembles (1/2)
Un ensemble est une collection non ordonnée et mutable d’objets uniques.
Les ensembles sont des structures non indexées !
Syntaxe:
On crée des ensembles en appelant avec des accolades ou avec la fonction set(). Notez que
{} ne crée pas un ensemble vide, mais un dictionnaire vide ; utilisez set() pour ce cas.
Exemple:
>>>S={1,1,3,3,'a','b','ccc',2,2,1,'a','a','bb'}
>>>S
{'a', 1, 2, 'b', 'bb', 3, 'ccc'}
>>>S.add(9)
>>>S
{'a', 1, 2, 'b', 'bb', 3, 'ccc‘,9}
84
E. Les ensembles (2/2)
Les Opérations :
>>> e={1,2,3,'E','E','R','A',3,3,2,6}
>>> e1=set([1,2,3,'k','j',2,2,'L','A',3,3,2,6])
>>> type(e),type(e1)
<class 'set'> <class 'set'>
>>> e1
{1, 2, 3, 6, 'L', 'A', 'k', 'j'}
>>> e|e1 #opération d'union
{'A', 1, 2, 3, 'E’, 6, 'k', 'j', 'L', 'R'}
>>> e&e1 #opération d’intersection
{'A', 1, 2, 3, 6}
>>> e-e1 #opération de différence
{'R', 'E'}
85
2) Les fonctions en Python
Syntaxe
def NomFonction (Paramètres):
BlocInstructions
Si on veut que celle-ci renvoie une valeur, il faut utiliser le mot clé « return ».
Exemple 1:
>>> def carre(x):
return x**2
>>> carre(3)
9
87
2) Les fonctions en Python
Exemple 2:
>>> res = carre(2)
>>> print(res)
4
▪ Ici, le résultat renvoyé par la fonction est stockée en mémoire dans la variable « res ».
▪ Une fonction ne prend pas forcément un argument et ne renvoi pas forcément une valeur.
Exemple 3:
>>> def hello():
print("bonjour")
>>> hello()
bonjour
88
2) Les fonctions en Python
Dans ce cas la fonction hello() se contente d’imprimer la chaîne de caractères « Bonjour » à
l’écran.
➢ Elle ne prend aucun argument et ne renvoie aucun résultat.
➢ Par conséquent, cela n’a pas de sens de vouloir récupérer dans une variable le résultat
renvoyé par une telle fonction.
➢ Si on essaie tout de même, Python affecte la valeur «None» qui signifie « rien » en anglais :
>>> x = hello()
bonjour
>>> print(x)
None
89
2) Les fonctions en Python
Exemple :
>>>def TableMul5():
""" Affiche la table de
multiplication de 5 """
for i in range (1,11):
print('5 *', i,'= ',5*i)
>>> help(TableMul5)
Help on function TableMul5 in module main :
TableMul5()
Affiche la table de
multiplication de 5
>>> TableMul5()
5*1= 5 5 * 6 = 30
5 * 2 = 10 5 * 7 = 35
5 * 3 = 15 5 * 8 = 40
5 * 4 = 20 5 * 9 = 45
5 * 5 = 25 5 * 10 = 50 90
2) Les fonctions en Python
▪ Python est en effet connu comme étant un langage au typage dynamique, c’est-
à-dire qu’il reconnaît automatiquement le type des variables au moment de
l’exécution,
Exemples :
>>> def fois(x,y):
return x*y
>>> fois(3,2)
6
>>> fois(‘p’,2)
pp
▪ L’opérateur « * » reconnait plusieurs types (entiers, réels, chaînes de caractères),
notre fonction est donc capable d’effectuer plusieurs tâches avec le même
code source!
91
2) Les fonctions en Python
Un autre gros avantage de Python est que ses fonctions sont capables de renvoyer
plusieurs valeurs à la fois, comme dans cette fonction :
>>> def carre_cube(x):
...
return x**2,x**3
En réalité Python renvoie un objet séquentiel qui peut par conséquent contenir
plusieurs valeurs.
▪ Dans notre exemple Python renvoie un objet « tuple » car on a utilisé une
syntaxe de ce type.
▪ Notre fonction pourrait aussi renvoyer une liste :
>>> def carre_cube2(x):
return [x**2,x**3]
92
2) Les fonctions en Python
Paramètres positionnels
Python 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 :
>>> def Aff(nom, prenom, age):
print('nom=', nom)
print('prenom=', prenom)
print('age=', age)
94
2) Les fonctions en Python
Nombre de paramètres variable
Exemple :
>>> def somme(*args):
s=0
for n in args:
s+=n
print (‘la somme est : ’, s)
>>> somme(1,2)
la somme est : 3
>>> somme(1,2,3,4)
la somme est : 10
>>> somme(30,100,2)
la somme est : 132
95
2) Les fonctions en Python
Quand elle ne se trouve pas à la fin d’une fonction, mais au milieu, l’instruction « return »
a pour effet d’interrompre le déroulement de la fonction. Ainsi, on peut écrire :
>>>def puissance(x, n):
if (n==0):
return 1
r=1
for i in range(n):
r = r*x
return r
Si la valeur de « n » est nulle, l’instruction « return 1 » interrompra le
déroulement de la fonction et aucune des instructions suivantes (à partir de r = 1)
ne sera exécutée.
96
2) Les fonctions en Python
Portée des listes (1/2)
Soyez extrêmement attentifs avec les types modifiables (tels que les
listes) car on peut les modifier au sein d’une fonction :
>>> def MaFonction(): >>> liste = [1,2,3]
>>> MaFonction()
... liste[1] = -127 >>> liste
[1, -127, 3]
...
De même que si vous passez une liste en argument, elle est tout autant
modifiable au sein de la fonction :
>>> def MaFonction(x): >>> y = [1,2,3]
>>> MaFonction(y)
... x[1] = -15
>>> y
... [1, -15, 3]
97
2) Les fonctions en Python
Portée des listes (2/2)
Une solution pour éviter la modification d’une liste lorsqu’elle est passée en tant
qu'argument, est de la passer explicitement afin qu’elle reste intacte dans le programme
principal.
>>> def ma_fonction(x):
... x[1] = -15
...
>>> y = [1, 2, 3]
>>> ma_fonction(y[:])
>>> y
[1, 2, 3]
>>> ma_fonction(list(y))
>>> y
[1, 2, 3]
Dans ces deux derniers exemples, une copie de « y » est créée à la volée lorsqu’on appelle
la fonction, ainsi la liste « y » du module principal reste intacte.
98
2) Les fonctions en Python
Fonctions locales
100
Classes et objets en Python
■ Python est un langage de programmation orienté objet. Presque tout en Python est un
objet, avec ses propriétés et ses méthodes. Une classe est comme un usine d’objet pour
créer des objets.
■ Les objets Python sont similaires aux objets du monde réel. Par exemple, nous pouvons
créer un objet voiture en Python, qui aura des propriétés telles que la vitesse et la
couleur; et un comportement comme: accélérer et freiner.
101
Les classes
■ Une classe est un ensemble incluant des variables ou attributs et
des fonctions ou méthodes. Les attributs sont des variables
accessibles depuis toute méthode de la classe où elles sont définies.
■ Syntaxe : Pour créer une classe, utilisez le mot-clé class:
• La forme la plus simple de définition de classe ressemble à ceci :
class nom_classe :
# corps de la classe # ...
102
Les classes
Instanciation
103
Les classes
Instanciation
■ Exemple: Créez une classe nommée Voiture, avec un attribut nommé ‘vitesse’:
class Voiture:
vitesse = 100
■ Créer un objet: Maintenant, nous pouvons utiliser la classe nommée Voiture
pour créer des objets.
■ Exemple: Créez un objet nommé ‘audi’ et affichez la valeur de la vitesse:
>>> audi = Voiture()
>>> print (audi.vitesse)
100
104
Les classes
Constructeur
■ Les constructeurs sont généralement utilisés pour instancier une classe.
La tâche des constructeurs consiste à initialiser (attribuer des valeurs)
aux attributs de la classe lorsqu'un objet de la classe est créé.
■ En Python, toutes les classes ont une méthode appelée __init__(), qui
est automatiquement appelée lors de l’instanciation.
def __init__(self, liste_paramètres):
# Initialisiation
105
Les classes
Types de constructeurs
▪ constructeur par défaut: le constructeur par défaut est un constructeur simple
qui n’accepte aucun argument. Sa définition n’a qu’un seul argument qui soit une
référence à l’instance en cours de construction: __init __ (self)
▪ constructeur paramétré: Le constructeur paramétré prend son premier
argument en tant que référence à l'instance en cours de construction, appelée
self, et le reste des arguments est fourni par le programmeur.
➢ Exemple:
class Personne:
nom= ' '
prenom= ' '
# constructeur de la classe
def __init__(self, nom, prenom):
self.nom=nom
self.prenom=prenom
106
Exemple:
■ Créez une classe nommée Voiture, utilisez la fonction __init__() pour attribuer des
valeurs pour le modèle et la vitesse:
class Voiture:
def __init__(self, modèle, vitesse):
self.modèle = modèle
self.vitesse = vitesse
renault = Voiture("Mégane",, 100)
print(renault.modèle) Sortie:
Mégane
print(renault.vitesse)
100
107
Les classes
Attributs
▪ Les attributs de classe sont des variables qui sont associées de manière explicite à une
classe.
▪ Les attributs de classe se comportent comme des variables globales pour toutes les
méthodes de cette classe.
▪ Comme les variables locales, elles apparaissent lorsqu’on leur affecte une valeur la
première fois.
class MaClasse :
def aff(self,y):
print("hello World"*y)
i=123456 # attribut de classe
▪ Vous pouvez à tout moment créer un attribut pour votre objet.
x= MaClasse()
x.compteur = 1 #création de l’attribut compteur 108
Les classes
Attribut de classe / d’instance
▪ Un attribut de classe est un paramètre statique en dehors et indépendamment de toute
instanciation,
▪ Un attribut d’instance est déclaré généralement dans le constructeur et précédé par self.
class Test:
chat = "noir"
def __init _(self):
self.chat = "gris"
instance = Test()
print (Test.chat)
print (instance.chat)
noir
Sortie :
gris 109
Les classes :
Méthodes
■ Les objets peuvent également contenir des méthodes. Les méthodes dans les objets sont
des fonctions qui appartiennent à l’objet.
■ Une méthode f ( ) est appelée comme suit: x.f( ) ( avec x est une instance de la classe).
■ Créons une méthode dans la classe Voiture:
class Voiture:
def __init__(self, modèle, vitesse):
self.modèle = modèle
self.vitesse = vitesse
def accelerer(self):
#ajoute 10 km par heure à la vitesse actuelle
self.vitesse = self.vitesse + 10
112
Les classes
Méthodes spéciales
▪ Parfois il est intéressant de décortiquer un objet pour résoudre un bug ou pour comprendre un
script.
▪ La fonction dir(x)vous donne un aperçu des méthodes de l'objet x:
>>> class Voiture:
def init (self):
self.nom = "Ferrari"
def donne_moi_le_modele(self):
return "250"
>>> v= Voiture()
>>>dir(v)
['__doc__', '__init__', '__module__', 'donne_moi_le_modele', 'nom’,……….]
113
Les classes
Attribut privé
■ Les attributs privés sont des attributs d'une classe qui ne sont accessibles qu'au
sein de la classe elle-même.
■ Si vous avez déjà travaillé avec des langages comme Java, vous savez peut-être
que les attributs privés sont rendus privés à l'aide du mot-clé private. Cependant,
Python n'a pas de mot-clé privé.
■ En Python, nous pouvons rendre un attribut privé en ajoutant 2 caractères de
soulignement _ avant notre nom de variable. Ici, au lieu d'utiliser name, nous
utilisons __name comme variable.
■ Exemple: class Dog:
def __init__(self, name):
self.__name = name
r = Dog("rocky")
print(r.__name)
AttributeError: 'Dog' object has no attribute '__name'
114
Les classes
Attribut privé
■ Dans l’exemple précédent, pour que nous puissions accéder à l'attribut
__name, nous aurions normalement besoin de créer une méthode Getter
get_name pour accéder au nom.
class Dog:
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
r= Dog("rocky")
print(r.get_name())
rocky
115
Les classes
Accesseur et mutateur (1/2)
116
Les classes
Accesseurs et mutateurs (2/2)
class Voiture :
def _init _(self): >>> v1=Voiture()
>>> print(v1.set_roues(7))
self.__roues=4
set_roues is called:
def get_roues(self): Changement du nombre
de roues
print ("get_roues is called: Récupération du
None
nombre de roues")
>>> print(v1.get_roues())
return self.__roues get_roues is called:
def set_roues(self, v): Récupération du nombre
de roues
print ("set_roues is called: Changement du 7
nombre de roues")
self.__roues = v
117
Les classes
Exemple de classe
class Etudiant:
""" Une classe qui représente un étudiant """
def _init__(self,n,a):
self.nom = n
self.__age = a
def get_age(self):
return self.__age
f = Etudiant("Akrem", 22)
print(f.nom) # Accès à l’attribut
“Akrem”
print(f.__age) # Accès à l’attribut
AttributeError: 'Etudiant' object has no attribute 'age'
print(f.get_age()) # Accès à la méthode
22 118
Les classes
Les méthodes d’instance-self
▪ Voici un exemple de classe qui contient une méthode :
class MaClasse :
def ma_méthode(self):
print (self.mon_attribut)
▪ Le bloc indenté en-dessous du mot-clé class s’appelle le corps de la classe. Et les
méthodes sont définies avec le mot-clé def dans le corps de la classe.
▪ On dit que ce sont des méthodes d’instance parce qu’il faut créer une instance
pour pouvoir les appeler :
mon_instance = MaClasse()
mon_instance.ma_méthode()
class Test:
"""Une classe de test tout simplement"""
@staticmethod
def afficher():
"""Fonction chargée d'afficher quelque chose"""
print("On affiche la même chose.")
print("peu importe les données de l'objet ou de la classe.")
t=Test()
t.afficher()
123
Héritage multiple
<instruction1>
…
<instructionN>
■Lorsqu’on référence un attribut, la recherche s’effectue de gauche à droite. Donc si
un attribut n’est pas trouvé dans NomClasseDerivee, on le cherchera d’abord dans
base1, puis dans base2, et ainsi de suite jusqu’à ce qu’on le trouve…
124
Héritage
Surcharge
Il est possible d'écraser la méthode de la classe parente en la redéfinissant. On parle
alors de surcharger une méthode.
class Voiture: class VoitureSport(Voiture):
roues = 4 def __init__(self):
moteur = 1 self.nom = "Ferrari"
def __init__(self): def allumer(self):
self.nom = "A déterminer" print ("La voiture de sport démarre")
def allumer(self): ma_voiture_sport = VoitureSport()
print ("La voiture démarre") ma_voiture_sport.allumer()
Pour créer une liste d’objets de classe, il suffit de créer une liste et d’y insérer
les instances d’objets.
Exemple :
>>> ListEtudiants=[]
>>> ListEtudiants.append(Etudiant("manel",22))
>>> ListEtudiants.append(Etudiant("akrem",19))
>>> print("Affichage des étudiants : ")
>>> for i in range(len(ListEtudiants)) :
print(ListEtudiants[i].nom)