Professional Documents
Culture Documents
Prog - Python
Prog - Python
Programmation Python
Enseignant Responsable:
Maroua ABDELHAFIDH
Auditoire: LCE 2
2020-2021
Chapitre 1:
Introduction
Programmer?
Programmer commence
d’abord par un algorithme et
finit par un code (écrit dans un
langage de programmation ) qui
est exécuté par la suite par
l’ordinateur pour fournir un
résultat.
3
Langages de Programmation
Pour l’Université, les entreprises et l’industrie (Data Science,
prototypes, mathématiques avancées,…) : Java, Python, R, Matlab,…
4 Et autres….
Langages de Programmation
Selon PYPL index: PopularitY of Programming Language
5
Pourquoi Python?
Portable: Unix, Windows, Mac OS
Hautement Productif:
Open source: communauté de développeurs python est très productive et
fournit plusieurs extensions. .
Langage Interprété.
Orienté Objet
6
Domaines d’Application
Machine Learning, Data science
Administration système
…
7
Chapitre II:
Notions de Base de Python
Les variables
En programmation, les variables servent à mémoriser les données.
Les variables sont des espaces de mémoire auquel ont donne un nom et une
valeur.
Il existe plusieurs type de variables:
String = chaînes de caractères se place entre quotes (’) ou entre guillemets (")
Integer = Suite de chiffres éventuellement préfixé par un signe (+ou −).
Float = Nombre à virgule
Boolean = True/False
type(nom_de_variable)
Affiche le type d’une variable (ex. type(1.2) <class ‘float’>)
9
Les variables
Identificateur de variable
Exemple :
Affectations multiples
#même valeur pour plusieurs variables
a = b=2.5
>>> print (a, b)
2.5 2.5
Affectations parallèles
a, b=2.5, 3.2
>>> print (a, b)
2.5 3.2
12
Les Opérateurs
Opérateur d’affectation =
>>> x = 3 / 4
N.B: En Python 3, la division de >>> x
nombres entiers renvoie par défaut >>> 0.75
un nombre réel (float) . >>> type (x)
14
>>> <class ‘float’>
Les opérations sur les nombres (entier, réel)
Priorité des opérateurs (PEMDAS)
P: Parenthèse
E: Exposant
M et D: Multiplication et division
A et S: Addition et soustraction
>>> x = 5
>>> y = 3
>>> print ((50-x*6)/y)
6.666
>>>
15
Les opérations sur les nombres (entier, réel)
Les opérateurs d’affectation +=, -=, *=, /=, %=, **=, //=
16
Les opérations de Comparaison
Les opérateurs de Comparaison
Opérateur Signification
== Est égal à
!= Est différent de
>>> a = 2 #Integer
>= Est plus grand ou égal que >>> b = 1.99 #Float
<= Est plus petit ou égal que >>> c = ‘2’ #String
> Est plus grand que >>> print (a>b)
True
< Est plus petit que
>>> print (a==c)
False
Opérateurs
>>> print ((a==c) and (a>b))
[Condition 1] and [Condition 2] False
AND
Si les deux conditions sont vraies => True >>> print ((a==c) or (a>b))
[Condition 1] and [Condition 2] True
OR
Si une des conditions est vraie => True
Not [Condition]
NOT
17
Si la condition est fausse => True
Les opérations de Comparaison
Les opérateurs de comparaison renvoient « True » ou « False ».
>>> nom=‘’a’’
>>> val= 5.6547
>>> message=‘’la valeur de %s est de %f mais on peut l’arrondir à %.2f.’’
%(nom,val,val)
>>>
la valeur de a est de 5.6547 mais on peut l’arrondir à 5.65.
20
Saisie et affichage à la console
Saisie des données au clavier
input()
- permet d’effectuer une saisie au clavier
- La fonction renvoie toujours une chaîne, il faut convertir
La fonction input avec un seul paramètre, une chaîne de caractères, lequel est
un message explicatif destiné à l’utilisateur.
21
Saisie et affichage à la console
Saisie des données au clavier
>>> u = 1 + 3.4j
>>> type(u)
<type 'complex'>
>>> type(3 + 4.4)
<type 'float'>
>>> divmod(18,6)
25 (3,0)
Fonctions sur types numériques
pow(m, n) ou pow(m, n, p) >>> pow(4, 2)
Dans les 2 cas, mn est d’abord calculé; puis, 16
si le troisième argument est fourni, >>> pow(3, 2, 5)
alors (m ** n) % p est retourné; 4
sinon, m ** n est retourné.
>>> round(3.499)
26
Fonctions sur type String
Accès aux caractères d’une chaîne
mot = "apprendre" # Le premier caractère est en position 0.
print (mot[3], mot[4], mot[5], mot[6]) r e n d
Concaténation de chaînes à l’aide de l’opérateur +
mot = "apprend"
mot = mot + "re"
print (mot[3] + mot[4] + mot[5] + mot[6]) rend
Répétition de chaînes à l’aide de l’opérateur *
mot = "cher" * 2 chercher
print (mot)
>>> print ("On peut concaténer une chaîne et un nombre converti : " + str(1.14 + 3))
On peut concaténer une chaîne et un nombre converti : 4.14
>>>
Fonctions sur le type String
Extraîre une sous-chaîne
En déclarant l’indice de début (inclus) et l’indice de fin (exclu), séparés par (:)
En déclarant l’indice de début (inclus) et l’indice de fin (exclu) et le pas , séparés
par (:) 0 1 2 3 4 5
P y t h o n
-6 -5 -4 -3 -2 -1
>>> mot = ”python” >>> mot[2:6]
>>> mot[0] ‘thon’
‘p’ >>> mot[0:2] + mot[2:6]
>>> mot[-1] ‘python’
‘n’ >>> mot[:2]
>>> mot[0]==mot[-1] ‘ py ‘
False >>> mot[-2:]
>>> mot[0:2] ‘on’
‘py’
>>> mot[2:5] >>> mot[1:5:2]
‘tho’ ‘yh’
Fonctions sur type String
Exemples d’Autres Fonctions
>>> mot = ”python”
>>> mot.capitalize() #1er lettre en Majuscule
‘Python’
>>> phrase=‘je suis à la maison’
>>> ‘’maison’’ in phrase #savoir si « maison » dans la phrase ou non
True
>>> ‘’Maison ‘’ in phrase
False
>>> phrase.find(‘’maison’’) >>> phrase.find(‘’Maison’’)
13 # « maison » commence à partir -1 # n’existe pas
de l’index 13
>>> phrase.count(‘’i’’) #renvoie le nombre de ‘’i’’ dans phrase
2
>>> phrase.upper() #convertit en majuscule
>>> phrase.lower() #convertit en miniscule
Chapitre III:
Listes et Tuples
Listes
Une liste est une variable pouvant contenir plusieurs informations. Ces listes
peuvent contenir plusieurs type d’information.
info=[“Liz”,1.73,”Emna”,1.68,”man”,1.71, “dad”,1.89]
Les listes peuvent également être ajoutées dans d’autres listes : (Liste de listes)
info2=[[“Liz”,1.73],[”Emna”,1.68],”man”,1.71, “dad”,1.89]
32
Listes
Pour manipuler les données des listes, nous devons faire appel à leurs
coordonnées:
0 1 2 3 4 5 6 7
info1=[“Liz”,1.73,”Emna”,1.68,”man”,1.71, “dad”,1.89]
-8 -7 -6 -5 -4 -3 -2 -1 index
info1[-1]=2 2
print(info1[-1])
33 info1=[“Liz”,1.73,”Emna”,1.68,”man”,1.71, “dad”,2]
Listes
Pour repérer des éléments présents dans une liste incluse dans une liste, il faut
faire comme suit:
info1=[“Liz”,1.73,”Emna”,1.68]
info2=[”man”,1.71, “dad”,2]
info3=[info1, info2]
34
Listes
Manipulation des Listes
>>>info=[‘Luis’, 1.74, ‘Sami’, 1.65, ‘Amal’, 88]
Changer les éléments de Liste:
>>>info[3]=7
[‘Luis’, 1.74, ‘Sami’, 7, ‘Amal’, 88]
N.B: Supprimer un élément d’une liste –> les index des autres éléments qui
viennent après celui supprimé sont tous modifiés.
Listes
Manipulation des Listes
[‘Luis’, 1.74, 7, ‘Amal’, 88,’Mouna’, ‘Ali’, 1.79]
Supprimer la première occurrence d’un élément à partir de sa valeur:
>>>info .remove(88)
>>>a .remove(x)
[‘Luis’, 1.74, 7, ‘Amal’, ‘Mouna’,‘Ali’, 1.79]
>>>info .count(7)
>>>a .count(x)
1
Listes
Manipulation des Listes
Liste_num=[21,34,17,100,83,20,37,2]
Modifier la liste en la triant:
Liste_num .sort()
>>>a .sort()
[2,17,20,21,34,37,83,100]
Si X est une liste, la commande Y=X ne crée pas un nouvel objet Y mais
simplement une référence (pointeur) vers X –> Les deux listes pointent
sur le même objet.
Tout changement effectué sur Y sera répercuté sur X aussi .
Y [1]=‘z’ X [1]=‘z’
‘a’
>>> print(Y) >>> print(X)
‘b’ ’z’
[‘a’, ’z’, ‘c’] [‘a’, ’z’, ‘c’]
>>> print(X) >>> print(Y) ‘c’
[‘a’, ’z’, ‘c’] [‘a’, ’z’, ‘c’]
Listes
Créer une liste avec une copie d’une autre liste
X=[‘a’, ‘b’, ‘c’] ‘a’ X crée une référence vers la liste
X
‘b’
1ère Solution: ‘c’
Pour faire une copie de X, nous devons faire une copie plus explicite avec list ()
ou en utilisant [ : ].
Y=list(X) créer une liste Y qui pointe sur une nouvelle liste.
Ou
Y=X[ : ] utiliser le découpage pour sélectionner explicitement tous les
éléments de la liste.
‘b’
2ème Solution: ‘c’
Utiliser la commande deepcopy du module copy :
>>>A=range(0,10)
>>>A=range(0,10)
>>>A=list(A)
>>>print(A)
Pour les afficher, >>>print(A)
range(0,10) on crée une Liste [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Listes
La fonction range
>>>print(list(range(5)))
[0,1,2,3,4]
>>>print(list(range(0,30,3) ))
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
>>>print(list(range(0,-30,-3)))
[0, -3, -6, -9, -12, -15, -18, -21, -24, -27]
>>>print(list(range(3,7)))
[3, 4, 5, 6]
>>>print(list(range(30,0,-3)))
Les objets dans un tuple sont rangés dans un certain ordre , séparés par des
virgules et encadrés par des parenthèses.
Un tuple n’est pas forcément homogène: il peut contenir des objets de types
différents les uns des autres.
>>>tuple = (12, 10, 18, 7, 15, 3, "toto", 1.5)
>>>print(tuple[2])
18
>>>D={'nom':‘Ali','prenom':‘Salem ‘}
>>>D ["nom"]
‘Ali’
>>> D [‘prenom’]
‘Salem’
>>>print(D)
{'nom':‘Ali','prenom':‘Salem‘}
Dictionnaire (Tableau Associatif)
>>>D1=dict(nom=‘Ali’, prenom=‘Salem’}
>>>print(D1)
{'nom':‘Ali','prenom':‘Salem‘}
>>>B={ }
>>> B[(3,2)]=12
>>> B[(4,5)]=13
>>>print(B)
{(3,2): 12,(4,5):13}
Dictionnaire (Tableau Associatif)
Pour vérifier la présence d’une clé on utilise in :
>>>C={ }
>>> C["nom"] = " Ali "
>>> C["prenom"] = " Salem "
>>>verif="nom" in C
>>> print(verif)
True
>>>verif="age" in C
>>> print(verif)
False
Supprimer une entrée en indiquant sa clé:
>>>D1={'nom':‘Ali','prenom':‘Salem ‘}
>>>del D1[‘nom’]
>>> print (D1)
{'prenom':‘Salem ‘}
Dictionnaire (Tableau Associatif)
Récupérer les clés, on utilise la méthode keys
Récupérer les valeurs et les clés en même temps, on utilise la méthode items
qui retourne un tuple.
>>>D1={'nom':‘Ali','prenom':‘Salem ‘}
>>>print( [cle for cle in D1. keys()] )
[‘nom’,’prenom’]
>>> print( [val for val in D1. values()] )
[‘Ali‘, ‘Salem’]
>>> print( [k for k in D1. items()] )
[('nom',’Ali'), ('prenom',‘Salem')]
Dictionnaire (Tableau Associatif)
Créer une copie: (comme avec les listes , utiliser la méthode copy)
>>>D1={'nom':‘Ali','prenom':‘Salem ‘}
>>> e = D1.copy()
>>> print(D1)
{'nom':‘Ali','prenom':‘Salem‘}
>>> print(e)
{'nom':‘Ali','prenom':‘Salem‘}
>>>D1[‘nom’]=‘Sami’ //modifier le nom
>>>print(D1)
{'nom':‘Sami','prenom':‘Salem‘}
>>>print(e)
{'nom':‘Ali','prenom':‘Salem‘} //pas de modification dans la copie
Chapitre IV:
Structure Conditionnelle
Structure Conditionnelle
Dans un programme, les conditions permettent de faire des choix dépendants
des différentes données que l’on peut retrouver dans notre programme.
>>>
If expression is True then doSometing
Ou
If expression == True : doSomething
*Attention, pour que les lignes soit considérées dans le « if », il est nécessaire
de faire un alinéa! (indentation) délimiter chaque bloc d’instructions
Structure Conditionnelle
Dans un Il est également possible de gérer plusieurs conditions:
>>> >>>
If condition_1: age1=int(input(« Quel est votre age? »))
instruction_1.1 age2=int(input(« Quel est l’ age de ton
instruction_1.2... frère? »))
elif condition_2:
instruction_2.1 If age1 > age2 :
instruction_2.2...... print(« vous êtes le plus vieux »)
else: elif age1<age2 :
instruction_n.1 print(« vous êtes le plus jeune »)
instruction_n.2 Else:
print(« vous avez le même age»)
Chapitre V:
Les boucles
Les boucles
Les boucles sont très importantes en programmation. Elles permettent de
Condition de sortie de la
boucle. La boucle va se
répéter tant que cette
condition est vérifiée
La variable i va s’incrémenter
à chaque boucle.
Cette instruction n’est pas dans la boucle. Le résultat affiché dans la console
sera la valeur de la variable i à la fin du programme (i = 10 000)
Les boucles : While
Exemple de boucle infinie:
0 Ali
L=[‘Ali’, ’est’, ’dans’, ’le’, ’jardin’] 1 Est
2 Dans
for i in range(len(L)): 3 Le
print(i, L[i]) 4 jardin
N.B: Il est toujours possible de remplacer une boucle for par une boucle while.
i=0
for i in range(4): while i < 4:
print("i a pour valeur", i) print("i a pour valeur", i)
i=i+1
L’instruction break
L’instruction break permet de « casser » l’exécution d’une boucle (while ou for).
Elle fait sortir de la boucle et passer à l’instruction suivante.
OK 2
for num in range(2,10): KO 3
If num% 2==0: OK 4
print("OK", num) KO 5
continue OK 6
print ("KO", num) KO 7
OK 8
KO 9
Chapitre VI:
Les Fonctions
Les Fonctions
Une fonction est un morceau de code que l’ont peut appeler à tout moment
dans une autre partie de son code.
Lorsque l’on a un nombre important de fonctions, il est possible de les
regrouper dans des modules.
N.B:
-Le nom de la fonction ne doit pas être l’un des mots-clés réservés du langage,
et ne contient pas un caractère spécial ou accentué (le caractère souligné « _ »
est permis).
- Comme c’est le cas pour les noms de variables, on utilise par convention des
minuscules, notamment au début du nom (les noms commençant par une
majuscule seront réservés aux classes).
Les Fonctions
Fonction sans paramètres
def compteur3():
Fonction sans paramètres est
i=0
bonjour souvent connue comme une
while i < 3:
0 procédure dans la terminologie de la
print(i)
1 programmation
i=i+1
2
print("bonjour")
compteur3()
* La fonction peut être appelée à différents endroit sans pour autant devoir répéter
les instructions:
def div_mod(a,b):
div=a//b
mod=a%b
return div,mod bonjour
20
print("bonjour")
val1,val2= div_mod(20,10)
print(val1,val2)
print(div_mod(a=20,b=10))
Les Fonctions
Fonction avec paramètres: Valeurs par défaut pour les paramètres
* Il est possible de donner des valeurs aux arguments, ceux-ci prendront alors la
valeur indiquée si aucune valeur ne leurs sont appliqué.
def calcul(x1,y1,x2=3,y2=5):
a=(y2-y1)/(x2-x1)
b=y1-a*x1
return a,b 2.0 -1.0
x,y= calcul(20,10)
print(x,y)
Les Fonctions
Variables locales, variables globales
Les variables définies à l’intérieur du corps d’une fonction, ne sont accessibles qu’à
la fonction elle-même. => variables locales à la fonction.
Les variables définies à l’extérieur d’une fonction sont des variables globales.
Leur contenu est « visible » de l’intérieur d’une fonction, mais la fonction ne
peut pas le modifier.
Une variable locale peut avoir le même nom qu’une variable globale mais elle
reste néanmoins indépendante.
total=0
def sum(arg1, arg2):
total=arg1+arg2
print(« inside the function , total is: »,total) inside the function , total is: 30
return total outside the function , total is: 0
sum(10,20)
print(« outside the function , total is: »,total)
Les Fonctions
Utilisation d’une variable globale - global
Il peut se faire par exemple que vous ayez à définir une fonction qui soit capable de
modifier une variable globale.
Pour atteindre ce résultat, il vous suffira d’utiliser l’instruction global
def test():
global b
b=5 25
print(a, b) 25
a=2
b=7
test()
print(a, b)
Les Fonctions
Passage var valeur et par référence
Tous les paramètres du langage python sont passés par référence
mylist=[10,20,30] mylist=[10,20,30]
change_me(mylist) change_me(mylist)
print(“values outside are:”, mylist) print(“values outside are:”, mylist)
values inside are: [10, 20, 30, [1, 2, 3, 4]] values inside are: [1, 2, 3, 4]
values outside are: [10, 20, 30, [1, 2, 3, 4]] values outside are: [10, 20, 30]
Chapitre VII:
Modules et importations
Modules et importations
Comment utiliser une même fonction dans plusieurs programmes différents ?
Comment avoir la définition d’une fonction dans un fichier différent de celui qui
contient le programme principal ?.
On importe le module
import puissance
a=5
u=puissance.carre(a)
print("le carre vaut", u)
v = puissance.cube(a)
print("le cube vaut", v)
Packages
Un dossier qui rassemble des modules.
def fonction1(a):
return a**2
import package1.module1
u = package1.module1.fonction1(3)
print("u vaut", u)
NumPy (Numerical Python)
import numpy as np
NumPy
Les Variables Prédéfinies
Variables pi
>>>np.pi
NumPy définit par défaut la valeur de pi. 3.141592653589793
>>> np.random.random()
0.5540884899329033
>>>np.random.random(3)
Passer des arguments pour
array([ 0.86431861, 0.88519197, 0.30663316]) obtenir des tableaux.
>>>np.random.random((2,3)) Les arguments précisent alors
la forme (shape) du tableau
array([[ 0.66265691, 0.39385577, 0.09319192], souhaité.
[ 0.43483474, 0.42859904, 0.79189574]])
NumPy
Indexation et Slicing
Accéder à un ou plusieurs éléments contigus d'un tableau.
Accéder à un seul élément
>>> A = np.array(([1,2],[3,4]))
>>> B = np.array(([5,6],[7,8]))
>>> C = np.concatenate((A, B), axis=1)
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
>>> C = np.concatenate((A, B), axis=0)
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
NumPy
Opérations sur les tableaux Numpy
Produit terme à terme
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>>b = np.array([[2, 1, 3], [3, 2, 1]])
>>>a*b
array([[ 2, 2, 9],
[12, 10, 6]])
Produit Matriciel numpy.dot() Le produit d’une matrice de taille n x m par une
matrice m x p donne une matrice n x p
Il est possible fixer indépendamment les domaines des abscisses et des
ordonnées en utilisant les fonctions xlim() et ylim().
xlim(xmin, xmax)
ylim(ymin, ymax)