Cours Python DIOP
Cours Python DIOP
LE LANGAGE PYTHON
COURS INTRODUCTIF
Formateur
M. Mouhamed DIOP
[email protected]
2
Pourquoi apprendre Python?
Très simple à apprendre
Code moins volumineux
Multiplateformes
Très fun à utiliser
Très documenté
Grande communauté
Peut être utilisé un peu partout (Administration système, applications bureau,
web, jeux vidéo…)
3
Un peu d’Histoire
Crée par Guido van Rossum durant une semaine de vacances
La première version est sortie en 1991
4
Installer Python
Sous linux:
Déjà installé
Utiliser n’importe quel éditeur de texte pour le code source
Exécuter en utilisant la commande python <nom_du_fichier>
Sous Windows:
http://www.python.org/getit/
Il installera aussi l’IDE IDLE qui permet d’utiliser le shell python et d’écrire et exécuter votre
code.
5
Différentes versions de Python
Depuis sa création, Python est passé par plusieurs versions (2.3, 2.5, 2.6, etc.)
Ces versions sont englobées dans l’appellation Python 2.x
Depuis le 13 Février 2009, la version 3.0.1 est sortie
Elle casse la compatibilité ascendante
Avènement de la version 3.x
Un programme écrit en Python 2.x n’est plus forcément compatible avec la version 3.x
Besoin d’adapter certains bouts de code
Les bibliothèques ne sont plus accessibles de la même manière
Ce cours concernera la version 3 du langage
Faites attention aux ressources que vous trouvez sur le NET
Repérer la version adéquate de Python utilisée
6
Syntaxe de base
Opérateurs
Opérateurs arithmétiques:
7+3 #10
7-3 #4
7*3 #21
7**3 #343 (puissance)
5/2 #2.5 (division réelle)
7 % 3 #1 (modulo)
7 // 3 #2 (division entière)
8
Opérateurs
Opérateurs de comparaison: >, >=, ==,<=, <, !=
Opérateurs logiques:
and
or
not
9
Les variables
Pour déclarer une variable, la syntaxe générale est :
nom_de_la_variable = valeur
Une variable doit respecter quelques règles de syntaxe
Le nom de la variable ne peut être composé que de lettres, majuscules ou minuscules, de
chiffres et du symbole souligné « _ » (appelé underscore en anglais).
Le nom de la variable ne peut pas commencer par un chiffre.
Le langage Python est sensible à la casse, ce qui signifie que des lettres majuscules et
minuscules ne constituent pas la même variable (la variable AGE est différente de aGe, elle-
même différente de age).
10
Les types de variables
Pas de déclaration explicite du type d’une variable
Le langage est à typage dynamique
Le type d’une variable est celui de la valeur qu’on lui attribue
Il peut changer pendant le programme
Exemple:
s = " Hello " #s est de type String
a = 2 #a est de type int
s = a+2 #s est maintenant de type int
La fonction type(s) retourne le type de la variable s.
11
Les types de base
Les nombres entiers:
Peuvent être d’une taille quelconque (limité par la RAM)
Correspond au type int en Python
Les nombres flottants (réels)
Notés avec un point décimal (7.2) ou avec une notation exponentielle (6.023e23)
Correspond au type float dans Python
Les types booléens qui prennent deux valeurs : True et False
Notez bien le caractère majuscule au tout début
Les chaines de caractères qui peuvent s’écrire de différentes façons
entre guillemets ("ceci est une chaîne de caractères") ;
entre apostrophes ('ceci est une chaîne de caractères') ;
entre triples guillemets ("""ceci est une chaîne de caractères""" ).
Correspond au type str dans Python
12
Opérations d’affectation
a = 4 # Affectation
a += 2 # idem à : a = a + 2 si a est déjà référencé
a -= 2 # idem à : a = a - 2 si a est déjà référencé
c = d = 8 # cibles multiples (affectation de droite à gauche)
e, f = 2, 5 # affectation de tuple (par position)
e, f = f, e # permutation entre e et f
13
Entrée clavier: input()
Anciennement appelé raw_input() dans Python 2.x, la fonction input()
Prend en paramètre le texte à afficher avant la saisie
Lit ce qui est saisi au clavier et le retourne sous forme de chaine de caractères
Pour lire une variable d’un autre type, il faut faire un transtypage (casting)
Les transtypages sont de la forme : nouveau_type(variable)
Exemple:
nom = input(" Quel est votre nom ? ");
age = int(input(" Veuillez donner votre age") )
14
Sortie écran (print)
La fonction print permet d’afficher un message à l’écran
Elle est devenue une fonction à partir de Python 3.0
Exemple :
nom = "Samba"
print(" Salut ", end = " " )
print(nom)
15
Print dans Python 2.x
L’instruction print ne s’utilise pas de la même manière dans Python 2.x
Elle ne correspond pas à une fonction
Les parenthèses n’y sont pas obligatoires
Exemple:
nom = "Samba"
print "Salut"
print nom
Résultat:
Salut
Samba
16
Print dans Python 2.x
Pour l’empêcher de sauter de ligne, il faut rajouter une virgule à la fin (elle
écrira un espace au lieu d’un saut de ligne)
Exemple:
nom = "Samba"
print "Salut ",
print nom
Résultat:
Salut Samba
17
Notion de bloc d’instructions:
D’autres langages délimitent un bloc par les symboles { } ou BEGIN - END
Python utilise l’indentation pour délimiter les blocs d’instructions
Un bloc d'instructions est une suite d'instructions qui est alignée sur la même
indentation.
Les blocs sont utilisés pour définir les corps des fonctions, des boucles, des
classes, etc.
Il ne faut JAMAIS mélanger les tabulations et les espaces dans l’indentation
Risque d’avoir une erreur
La tabulation est généralement utilisée pour l’indentation
18
Structures de contrôle
Les conditions
Syntaxe 1:
if condition:
instruction…
Syntaxe 2:
if condition:
instruction…
else:
instruction…
20
Les conditions
Syntaxe 3:
if condition_1:
instruction…
elif condition_2: #Equivalent à else if
instruction…
else:
instruction…
21
Les conditions
Exemple:
If n > 0:
print (n + " est strictement positif ")
elif n < 0:
print (n + " est strictement négatif ")
else:
print (n + " est nul ")
22
Les boucles
La boucle while
while condition:
instructions…
Exemple:
i=0
while i < 5:
i = i+1
print (i)
23
Les boucles
La boucle for
Elle est équivalente à un foreach des autres langages
24
Les boucles
Pour faire un for classique, il faut utiliser la fonction range( dont on donnera les
détails plus tard)
for i in range(n) : #Equivalent à for (i=0; i<n; i++ ) en C
instructions…
Autres forme de la fonction range:
for i in range(k, n): # équivalent à for (i=k; i<n ; i++ ) en C
instructions…
for i in range(k, n, p): # équivalent à for (i=k; i<n ; i+=p ) en C
instructions…
25
les instructions break, continue
L'instruction break permet d'arrêter une boucle avant sa fin.
while condition:
if condition2:
break
#si condition2 vérifiée, on sort de la boucle et on passe à instruction1
instructions…
instruction1
L'instruction continue est similaire à break, mais au lieu d'interrompre la
boucle, on passe à la prochaine itération.
26
Structures de données
Les chaines de caractères
Similaire aux chaines de caractères des autres langage (liste de caractères)
Accès aux caractères par index, ie: pour une chaine s, s[i] retourne le ième
caractère
Sont immuables (on ne peut changer leurs valeurs),il est donc interdit d’écrire
par exemple s[0]='a'
Les constantes sont écrites entre "", ou entre ' '
On peut écrire des " " dans les chaines délimitées par ' ' et des ' dans les chaines
délimitées par " "
Le délimiteur peut aussi être « échappé » avec le caractère \
Exemple:
S= " Je m’appelle Onizuka"
S= ' le mot " Oni" signifie démon en japonais ' 28
Opérations sur les chaines
Concatenation " Hello" + " World" # " Hello World "
"Hello " * 3 # ’Hello Hello Hello‘
Supposons que S soit une chaine de longueur n
Accès aux éléments:
Le premier caractère est S[0] et le dernier S[n-1]
S[i] retourne le ième élément de S
S[-i] retourne le ième élément de S en partant de la fin. (à la position n-i)
Sous chaines:
La fonction len(S) retourne la taille de S.
S[i:j] donne la sous-chaine composée des caractères aux positions i, i+1, …, j-1
S[:j] donne la sous-chaine composée des caractères aux positions 0, 1, …, j-1
S[j:] donne la sous-chaine composée des caractères aux positions j, j+1, …, n-1
29
Opérations sur les chaines
len(s) #retourne le nombre de caractères de la chaine
s.isalnum() # retourne vrai si tous les caractères sont alphanumériques
s.isalpha() #retourne vrai si tous les caractères sont alphabétiques
s.isdigit() # retourne vrai si tous les caractères sont des chiffres
s.replace(old, new) # retourne une chaine où toutes les occurrences de « old »
dans s sont remplacées par « new »
s.index(c) #retourne la position de c dans s
Lève une exception s’il ne trouve pas ce qui est recherché dans la chaine
30
Formater une chaine
Pour formater une chaine, on utilise sa fonction format
La chaine en question doit contenir des {}
Les {} seront remplacés dans l’ordre par les paramètres de la fonction format
Exemple:
a=4
b=2
print "{} + {} = {} " .format(a, b, a+b) # 4 + 2= 6
31
Formater une chaine
On peut aussi formater une chaine en utilisant les chaines de format suivants :
%d pour les nombres entiers
%f pour les flottants
%s pour les chaines de caractères
Etc.
Regarder documentation officielle pour plus de détails sur les chaines de format
Exemple
age = 25
nom = "Khady Ndiaye"
print(" Vous vous appelez %s et vous avez %d ans " % (nom, age));
# va afficher : Vous vous appelez Khady Ndiaye et vous avez 25 ans
32
Les listes
Peuvent être considérées comme des tableaux hétérogènes de taille variable
Accès par position
Les objets de la liste peuvent être de types différents
La taille de la liste change à chaque suppression ou insertion
Ils ne sont pas immuables contrairement aux chaines, on peut faire : l[0]=val
On peut créer des matrices sous forme de liste de listes
Exemple: M=[[1, 2, 3], [4, 5, 6]]
33
Opérations sur les listes
Créer une liste (vide) : l = [] ou l = list()
l3 = l1+ l2 #Concaténer deux listes
l.append(v) : Insère un élément v à la fin de l
l.insert(i, v): Insère un élément v à la position i de l
l.pop() retourne la valeur du dernier élément et le supprime de la liste (on le
dépile)
l.pop(i) retourne la valeur du ième élément et le supprime de la liste
l.remove(v): supprime la première occurrence de v dans l
l.count(v): retourne le nombre d’occurrence de v dans l
l1.extend(l2): insère tous les éléments de l2 à la fin de l1 (concaténation)
Modifie la liste, contrairement à l’opérateur « + »
34
Opérations sur les listes
l.sort(): Trie croissant de la liste l (si les objets ne sont pas des types standards,
il faut rajouter une fonction qu’on verra plus tard)
l.reverse(): trie la liste l, dans l’ordre décroissant
len(l): retourne la taille de l (le nombre d’éléments dans la liste)
l[i:j] donne la sous-liste composée des valeurs aux positions i, i+1, …, j-1
l[:j] donne la sous-liste composée des valeurs aux positions 0, 1, …, j-1
l[j:] donne la sous-liste composée des valeurs aux positions j, j+1, …, n-1
35
Les tuples
Ce sont des listes immuables
Le contenu ne peut changer dès qu’il est défini
On ne peut ni ajouter, ni supprimer un élément
Se déclare comme les listes
Remplacer les [] par des ()
Exemple
un_tuple = (1, 2, 3, 4);
un_autre_tuple = (7,) # la virgule est obligatoire ici
print(un_tuple[1]) # affiche 2
un_tuple[0] = 5 # provoque une erreur
36
Opérations sur les tuples
Créer un tuple (vide) : t = () ou t = tuple()
Créer un tuple à partir d’une liste l : t = tuple(l)
t3 = t1+ t2 #Retourne un tuple issu de la concaténation des tuples t1 et t2
t.count(v): retourne le nombre d’occurrence de v dans t
t.index(v): retourne la position de v dans le tuple
37
Les dictionnaires
Comme les listes, ils peuvent contenir un ensemble de données de types divers
Les éléments sont identifiés par des clés (généralement des chaines de caractères)
Ressemble aux tableaux associatifs en PHP
Se crée comme les listes, sauf qu’on remplace les [] par des {}
Exemple
utilisateur = {}
utilisateur["login"] = "kira";
utilisateur["password"] = "passer";
utilisateur["email"] = "[email protected]";
utilisateur["age"] = 27;
print("L’email de l’utilisateur est : " + utilisateur["email"]);
38
Les fonctions
Les fonctions
Les fonctions permettent de regrouper plusieurs instructions dans un bloc qui
sera appelé grâce à un nom.
Python dispose d’un ensemble de fonctions prédéfinies
Print est une fonction permettant de faire un affichage sur l’écran
Type est une fonction permettant de connaitre le type d’une variable
On a aussi la possibilité de créer nos propres fonctions
Les fonctions prédéfinies ne vont pas répondre à tous nos besoins
Le développeur aura assez souvent besoin de créer ses propres fonctions
40
Création d’une fonction
La syntaxe générale de création d’une fonction est la suivante :
def nom_de_la_fonction(paramètre1, paramètre2, …, paramètreN) :
# Bloc d’instructions
Le mot-clé « def », abbréviation de « define » constitue le prélude à toute fonction
Le nom de la fonction est le nom à travers lequel la fonction sera utilisée
Respecte les mêmes règles de nommage que les variables
Ne doit pas correspondre au nom d’une variable déjà définie
La liste des paramètres qui seront fournis lors d'un appel à la fonction
Les paramètres sont séparés par des virgules et la liste est encadrée par des
parenthèses
Les espaces sont optionnels mais améliorent la lisibilité.
Les parenthèses sont obligatoires (même si la fonction ne dispose pas de paramètres)
41
Création d’une fonction
Exemple de fonction sans paramètres
def direBonjour() :
print("Bonjour")
Exemple de fonction avec un seul paramètre
def direBonjour(nom) :
print("Bonjour " + nom)
Exemple de fonction avec plusieurs paramètres
def direBonjour(nom, prenom) :
print("Bonjour " + prenom + " " + nom)
42
Création d’une fonction
Le nom d’une fonction est unique dans un programme
Même si le nombre de paramètres varie
Exemple : direBonjour() et direBonjour(nom) ne peuvent coexister dans un même
programme
Peuvent être remplacées par direBonjour() et direBonjourA(nom) par exemple
43
Appel d’une fonction
Une fois créé, la fonction peut être « appelée » à travers son nom
L’appel correspond à l’utilisation effective de la fonction
Des valeurs effectives seront données aux paramètres (le cas échéant)
Exemple
direBonjour() # va afficher « Bonjour » à l’écran
direBonjourA("Samba") # va afficher « Bonjour Samba » à l’écran
direBonjourA("Mariama") # va afficher « Bonjour Mariama » à l’écran
direBonjourA() # va afficher « Bonjour Mouhamed » (utilisation de la valeur
par défaut du paramètre)
44
Les fonctions à paramètres variables
Il est possible de créer une fonction pouvant être appelée avec un
nombre de paramètres variables
Il suffit de précéder le nom du paramètre avec un « * »
Exemple
def sayHelloTo(*names) :
for name in names :
print("Hello " + name);
sayHelloTo("Samba") # va afficher « Hello Samba »
sayHelloTo("Samba", "Fatou") # va afficher « Hello Samba » et « Hello
Fatou »
45
Les fonctions à paramètres variables
S’il y’a des paramètres autre que celui dont le nombre de valeurs peut
varier, ce dernier devra être mis en dernière position
Exemple
def somme(nombre1, nombre2, *nombres) :
resultat = nombre1 + nombre2;
for nombre in nombres :
resultat += nombre
print("La somme vaut : " + resultat)
somme(12, 13) et somme(2, 7, 18) sont des appels corrects de la
fonction tandis que somme() et somme(5) ne le sont pas
46
Valeur de retour d’une fonction
Une fonction peut retourner le résultat de son calcul
Plus flexible que l’affichage direct
Ca se fait à travers le mot clé « return »
Exemple
def carre(nombre) :
resultat = nombre * nombre;
return resultat;
47
Valeur de retour d’une fonction
La valeur de retour de la fonction est utilisée par le programme appelant
Cette utilisation n’est pas obligatoire
Exemple
nombre1 = carre(5); # récupération du résultat, nombre1 vaut 25
print("Le carré de 5 est : ", nombre1);
carre(2); # appel de la fonction sans utilisation du résultat (inutile ici)
print("Le carré de 8 est : ", carre(8)); # utilisation directe de la valeur de
retour comme paramètre d’une autre fonction
nombre2 = carre(carre(3)) # appels successifs de la fonction, nombre2 = 81
48
Portée des variables
Les variables déclarées dans la fonction ne sont accessibles que dans la
fonction
Un accès depuis le programme appelant va provoquer une erreur
Une fonction peut accéder à des variables définies localement ou non
L’accès aux variables locales peut se faire en lecture et en écriture
L’accès aux variables globales ne peut se faire qu’en lecture
Une tentative de modification (affectation) ne fait que créer une variable locale
à la fonction
Peut provoquer une erreur dans certaines conditions (utilisation de += par exemple)
Le mot-clé global peut être utilisé pour autoriser la modification de variables
globales
49
Portée des variables
Exemple
def calculerSomme() :
nombre1, nombre2 = 3, 5;
somme = nombre1 + nombre2;
print("La somme vaut : ", somme);
calculerSomme();
print(somme); # va provoquer une erreur
50
Portée des variables
Exemple
var nom = "Mané"
def afficherNom() :
print(nom);
nom = "Samb";
print(nom)
afficherNom() ; # va afficher « Mané », puis « Samb »
print(nom); # va afficher « Mané »
51
Portée des variables
Exemple
var nom = "Mané"
def afficherNom() :
nom += "Samb"; # va provoquer une erreur
print(nom)
52
Portée des variables
Exemple
var nom = "Mané"
def afficherNom() :
global nom; # pour autoriser la modification de la variable globale
print(nom);
nom = "Samb";
print(nom)
afficherNom() ; # va afficher « Mané », puis « »Samb »
print(nom); # va afficher « Samb »
53
Les modules
Lorsqu’un programme grandit, il est préférable de séparer le code en
plusieurs fichiers
facilite la réutilisation des fonctions
Permet une meilleure organisation du code
Python permet de placer des bouts de code dans un fichier et de les
utiliser ailleurs
Un tel fichier est appelé « module »
Leur définition et leur utilisation ne sont plus forcément liées
Regroupement de plusieurs fonctions (ou classes) dans un seul espace de nom
54
L’importation de modules
Pour utiliser du code défini dans un module, il faut d’abord l’importer
L’importation se fait à travers le mot clé « import »
Plusieurs syntaxes sont possibles
Le nom du module correspond au nom du fichier contenant le code à
importer
Il ne faut tout de même pas y spécifier l’extension du fichier
55
L’importation de modules
L’importation peut se faire de plusieurs manières
import nom_module [, nom_module2, …]
Si on veut avoir accès à toutes les fonctionnalités définies dans le module
import nom_module as nouveau_nom [, module_2 as nom_2, …]
Accès aux fonctionnalités du module sous un nouveau nom
from nom_module import element_module [, element2, …]
Si on souhaite accéder à une partie des fonctionnalités offertes
La liste des éléments peut être remplacée par « * » pour tout charger d’un seul coup
from nom_module import element_module as nouveau_nom [, em2 as nom, …]
Accès à une partie des fonctionnalités, sous un nouveau nom
56
Exemple d’utilisation des modules
Dans le fichier fonctions.py, on définit les fonctions
def carre(nombre) :
return nombre * nombre;
def triple(nombre) :
return nombre * nombre * nombre;
def puissance(nombre, exposant) :
return nombre ** exposant;
57
Exemple d’utilisation des modules
Dans test_fonctions_1.py, on a :
import fonctions
carre_de_neuf = fonctions.carre(9);
print("Le carré de 9 est : ", carre_de_neuf);
Dans test_fonctions_2.py, on a :
import fonctions as math;
print("Le triple de 8 est : ", math.triple(8));
58
Exemple d’utilisation des modules
Dans test_fonctions_3.py, on a :
from fonctions import carre;
carre_de_neuf = carre(9);
print("Le carré de 9 est : ", carre_de_neuf);
Dans test_fonctions_4.py, on a :
from fonctions import puissance as pow, carre as sqr;
print("Le carre de 18 est : ", sqr(18));
print("Deux à la puissance 3 vaut : ", pow(2, 3));
59
Les modules standards
Python est accompagné d'une bibliothèque de modules standards
La composition de ces modules est configurable (à la compilation) et
dépend aussi de la plateforme cible
Par exemple, le module winreg n’est proposé que pour les systèmes Windows
Certains modules méritent une attention particulière
sys : fournit un accès à certaines variables utilisées et maintenues par
l'interpréteur
os : fournit une manière portable d’utiliser les fonctionnalités dépendantes
du système d’exploitation
Etc.
60
Les modules standards
Faire un tour sur la documentation officielle pour plus de détails
Tutoriel sur les modules
https://docs.python.org/fr/3/tutorial/modules.html
Liste des modules standards
https://docs.python.org/3/py-modindex.html
61
Les paquets
Il y’a possibilité de regrouper des modules pour construire des paquets
Les paquets sont un moyen de structurer les espaces de nommage des
modules Python en utilisant une notation « pointée »
Par exemple, le nom de module A.B désigne le sous-module B du paquet A
Sous Python, les paquets correspondent à des dossiers
Ils doivent contenir un fichier « __init.py__ » (qui peut être vide)
Le mot clé import est utilisé pour importer des paquets
62
Les exceptions
Les exceptions
Même si une instruction ou une expression est syntaxiquement correcte,
elle peut générer une erreur lors de son exécution
Les erreurs détectées durant l’exécution sont appelées des exceptions
Elles ne sont pas toujours fatales : le programme peut les traiter
Si elles ne sont pas traitées, elles provoquent l’arrêt du programme
La plupart des exceptions ne sont pas prises en charge par défaut
Le programmeur doit se charger de les gérer
64
Les exceptions
Même si une instruction ou une expression est syntaxiquement correcte,
elle peut générer une erreur lors de son exécution
Division par zéro, conversion d’une chaine en entier, etc.
Les erreurs détectées durant l’exécution sont appelées des exceptions
Elles ne sont pas toujours fatales : le programme peut les traiter
Si elles ne sont pas traitées, elles provoquent l’arrêt du programme
Les exceptions peuvent être de différents types
Ce type est généralement indiqué dans les messages d’erreur
Il existe des exceptions standards (natives) mais le développeur peut en
créer d’autres
65
Gestion d’une exception
Syntaxe 1
try :
# bloc d’instructions à essayer
except :
# bloc d’instructions à exécuter en cas d’erreurs
Exemple
age = input("Donner votre age")
try :
age = int(age)
except:
print("Erreur lors de la conversion de l’année");
66
Gestion d’une exception
Syntaxe 2
try :
# bloc d’instructions à essayer
except type_exception:
# bloc d’instructions à exécuter en cas d’erreurs
Une autre syntaxe
try :
# bloc d’instructions à essayer
except type_exception as messageErreur:
# bloc d’instructions à exécuter en cas d’erreurs
67
Gestion d’une exception
Exemple
denominateur = input("Donner le dénominateur")
try :
resultat = 12 / denominateur;
except ZeroDivisionError :
print("Le dénominateur ne doit pas être nul")
except :
print("Une erreur inattendue s’est produite")
68
Gestion d’une exception
Syntaxe 2
try :
# bloc d’instructions à essayer
except type_exception:
# bloc d’instructions à exécuter en cas d’erreurs
Une autre syntaxe
try :
# bloc d’instructions à essayer
except type_exception as messageErreur:
# bloc d’instructions à exécuter en cas d’erreurs
69
Gestion d’une exception
Syntaxe 3
try :
# bloc d’instructions à essayer
except type_exception:
# bloc d’instructions à exécuter en cas d’erreurs
else :
# instructions à exécuter si aucune erreur
70
Gestion d’une exception
Syntaxe 4
try :
# bloc d’instructions à essayer
except type_exception:
# bloc d’instructions à exécuter en cas d’erreurs
finally :
# instructions à exécuter qu’il aie erreur ou pas
Le bloc finally est exécuté dans tous les cas de figures
Même quand le bloc except se termine par une instruction return
71
La Programmation Orientée
Objet