Intro_Python
Intro_Python
programmation Python
Ilyas Bambrik
2024
Table des
matières
Introduction 3
I - Syntaxe Python 5
IV - Les tableaux 11
X - Fonction lambda 21
Python est un langage de scripte extrêmement simple syntaxiquement et possédant une bibliothèque riche (regex,
manipulation des matrices, combinaison et permutation, programmation web coté serveur,etc). Comme d'autres
langages de script ( php et OTCL), python supporte la programmation orientée objet.
Pendant les dernières années, python a gagné en popularité due aux nombreux projets développés en python comme
(par exemple OpenStack, Fsociety et MechanicalSoup).
Afin de vérifier que python est correctement installer, il suffit de vérifier que les fichiers sources python ( .py) sont
distingués par l’icône python.
- Bibliothèque riche;
- Syntaxe simple à apprendre ;
- Prototypage d'algorithme simplifié ;
- Large communauté active dans le développement Web, Intelligence Artificielle, Data Science, Cyber Sécurité
et teste de pénétration;
3
4
Syntaxe Python
Syntaxe Python
I
Contrairement aux langages static-typed comme C et Java, les types des variables sont dynamiquement inférés
lors de l'affectation. Ceci facilite énormément la programmation ;
1 print('x=')
2 x=int(input())
3 print('p=')
4 p=int(input())
5 print(x,' puissance ',p,' =',x**p)
- print est la fonction d'affichage sur écran comme printf et System.out.print (et println) ;
- input permet la lecture d'une ligne de chaîne de caractères comme scanf (voir aussi gets en C) et Scanner.
next;
- Afin de calculer x à la puissance p, l'opérateur ** est utilisé ;
Exemple
Listing 2 Simple calculatrice en python
5
27 print("Resultat= ", calculatrice(nbr1, nbr2,op))
28
- Il n'existe pas de commentaire multi-lignes en python et le caractère # marque le début d'un commentaire
mono-ligne (comme en TCL et Bash/sh);
- La déclaration d'une procédure (ou fonction) commence par le mot clé "def". Comme dans le corps du
programme, les types des paramètres ainsi que le type de retour d'une procédure ne sont pas déclarés
explicitement (il sont dynamiquement inférés selon le traitement effectué sur les arguments). Par
exemple :
def NomProcedure (argment1, argument2,argument3) :
- La clause "switch" n'existe pas dans la syntaxe python. Cependant, cette clause est remplacée par "if-elif-
else", pour le teste de multiple cas. En outre, une condition est formulée de la manière suivante :
if ( condition) :
Par exemple, le programme présenté dans Listing 3 illustre comment les conditions sont formulées
1 def Mention(note):
2 if(note <7):
3 return "F"
4 elif (note >=7 and note<10):
5 return "D"
6 elif (note >=10 and note<13):
7 return "C"
8 elif (note>=13 and note<15):
9 return "B"
10
11 return "A"
12
13
14 Note=int(input())
15 print(Mention(Note))
- Le type "char" n'existe pas en python. De plus les chênes de caractères peuvent être enfermer entre double
quottes (") ou single quottes (') comme en php et Javascript. Une chaîne de caractères multi-lignes est
déclarée avec """ (ou ''') au début et à la fin. Celle-ci peut aussi être utilisée à la place d'un commentaire
multi-lignes ;
- Les opérateurs logiques binaires en python sont and et or à la place && et || dans les langages C-type.
L'opérateur not remplace l'opérateur de négation (!) . En outre, les valeurs logiques en python sont True
et False (sensible à la case) ;
6
1. Structure de bloques par tabulations
La principale innovation syntaxique en python est l'utilisation de tabulations. La tabulation dans un programme
python indique le niveau du bloque et l'imbrication des instructions. Toute violation de cette règle syntaxique
est notifié par un message d'erreur lors de l'interprétation. Selon le nombre de tabulations séparant l'instruction
du début de la ligne, l’interpréteur python infère le bloque où l'instruction est située . L'imposition de cette
convention syntaxique rend la lecture du code source plus facile. Par exemple, voir Listing 4 :
1 #Bloque~1
2 instruction1
3 instruction2
4 if (Condition1):
5 #Bloque~2
6 instruction3
7 instruction4
8 if (Condition1):
9 #Bloque~3
10 instruction5
11 instruction6
12 instruction7
13 else :
14 #Bloque~4
15 instruction8
16 instruction9
17 instruction10
18 instruction11
Variable1=TypeVariable1(Varible2D_UnAutreType)
ou bien
Variable1=TypeVariable1(ValeurD_UnAutreType)
Dans le programme présenté dans Listing 4 (ligne 28) la valeur lue du clavier (input()), qui est une chaîne de
caractères, est convertie en type float avant d’être affectée à la variable nbr1.
7
Les boucles en python
- La déclaration d'un tableau se fait simplement par l'affectation à un tableau vide ( ligne 19).
- Les éléments sont dynamiquement ajoutés par la méthode append (ligne 22).
Le programme présenté dans Listing 5 comporte une procédure qui calcule la somme des valeurs des éléments
d'un tableau (ligne 2) :
1 import sys
2 def Somme (tab):
3 valeur_somme=0
4 for element in tab:
5 valeur_somme=valeur_somme+element
6 return valeur_somme
7
8 # Programme principale
9
10 print("Entrez le nombre d'elements du tableau")
11 Nombre_D_Elements=int(input())
12
13 TableauD_Entier=[]
14 for i in range(Nombre_D_Elements):
15 print("TableauD_Entier[" + i + "]=")
16 TableauD_Entier.append(int(input()))
17
18 print( "Somme = ",Somme(TableauD_Entier) )
La fonction Somme suivante est la même fonction présentée dans Listing 5, écrite avec la boucle while (ligne 4):
8
Les boucles en python
L'invocation de la fonction range(Nombre_D_Element) (ligne 13- Listing 5) retourne une collection contenant
les chiffres allant de 0 jusqu'à Nombre_D_Element - 1. Pour voir ce résultat, il suffit d’exécuter le programme
suivant (list représente le type tableau qui permet de convertir l'objet retourné par range ne tableau):
1 print(list(range(10)))
range(N1,N2,step) génère un tableau de nombre allant de N1 jusqu'à N2-1 un pas de valeur step. Step peut être
négatif
1 print("Tableau de 10 a 20",list(range(10,20)))
2
3 print( "Tableau de 50 a 100 avec un pas de 15",list(range(50,100,15)))
9
Exercice : Somme des N carrés pairs
Question
On vous donne N carrés de tailles croissantes dans l'ordre croissant, et chaque côté de tous les carrés est un
nombre pair. Chaque côté du premier carré est 2, et chaque côté de tout carré suivant est 2 plus long que le
précédent.
Quelle est la somme des surfaces de tous les N carrés ? Étant donné que le résultat peut être grand, veuillez
sortir la réponse modulo 1000000007.
Exemple :
Input
Output
Exemple :
10
Les tableaux
Les tableaux
IV
Dans le programme suivant, la taille du tableau (TailleTableau, ligne 1) est lue à partir du clavier. Ensuite, les
éléments lus à partir du clavier sont ajoutés au tableau (Tableau.append(Element), ligne 5). En outre, la fonction
len() prend en paramètre un tableau et retourne la taille de celui-ci (ligne 8).
1 TailleTableau=int(input())
2 Tableau=[]
3 for i in range(TailleTableau):
4 print ("Tableau[",i,"]=")
5 Tableau.append(int(input()))
6 print("Tableau=",Tableau)
Comme dans la fonction range() présentée précédemment, l'indice de l'élément tableau supporte jusqu'à 3
paramètres (testez l'exemple présenté dans le listing suivant).
- Tableau [i] : désigne le iem élément du tableau si (i>=0). Si i<0 , Tableau [i] désigne l'élément à la position
N-iem avec N définie comme la taille du tableau.
- Tableau [N1 : N2] : désigne la séquence d'éléments du tableau allant de l'indice N1 jusqu'à N2-1.
- Tableau [N1 : N2 :step] : désigne la séquence d'éléments du tableau allant de l'indice N1 jusqu'à N2 avec
un pas = step (l'élément à l'indice N2 est exclu de la séquence). Par défaut, Tableau[ : : ] et Tableau[ :]
sont équivalents à Tableau[0 :len(Tableau) :1] (équivalant au tableau entier).
La fonction split() (équivalente à la fonction split implémentée dans la classe String en Java) découpe une chaîne
de caractères en morceaux selon le délimiteur (le caractère espace dans l'exemple suivant, ligne 1) et renvoie un
tableau des éléments séparés par le séparateur:
1 Tableau=input().split(" ")
2 print( "Tableau = ", Tableau)
11
3 print( "Tableau [-4] = ", Tableau[-4])
4 print( "Tableau [3 : 5] = ", Tableau[3:5])
5 print( "Tableau [5:2:-1]= ", Tableau[5:2:-1])
6 print( "Tableau [::]= ", Tableau[::])
Conseil
La concaténation des listes se fait par une simple opération + :
1. Les dictionnaires
Un dictionnaire est une collection qui supporte comme indice une chaîne de caractères (comme les tableaux
associatives en php) ainsi que d'autres types de valeurs immuables et supportant le hachage :
La syntaxe de la boucle for-in fonctionne de la même façon sur les dictionnaires. Le code suivant boucle sur les
valeurs des clés (keys) avec la variable key (Ligne 2) et affiche ensuite chaque clé avec la valeur associée (Ligne
3).
1 UnDictionnaire ={ "Nom":"Mohammed","Specialite":"Informatique","Age":25}
2 for key in UnDictionnaire:
3 print(key , UnDictionnaire[key ])
1 Nom Mohammed
2 Specialite Informatique
3 Age 25
4
12
Exercice : Compter le nombre d'occurences
Exercice : Compter le
nombre d'occurences V
Question
Dans ce défi, l'utilisateur saisit une chaîne et une sous-chaîne. Vous devez imprimer le nombre de fois que la
sous-chaîne apparaît dans la chaîne donnée. Le parcours de la chaîne se fera de gauche à droite, et non de
droite à gauche.
Input
La première ligne d'entrée contient la chaîne d'origine. La ligne suivante contient la sous-chaîne.
Output
Affiche le nombre entier indiquant le nombre total d'occurrences de la sous-chaîne dans la chaîne d'origine.
Exemple input
ABCDCDC
CD
Résultat
Indice :
A.count(B) retourne le nombre de fois la chaîne de caractères B se répète dans A.
13
Les classes et objets en python
Python supporte de même les concepts de la POO. Le programme présenté dans Listing III.6 présente une
classe TypeJoueur :
1 class TypeJoueur:
2 def __init__(self):
3 self.PointsDeVie=100
4 self.Score=0
5 self.NomJoueur=''
6
7 def lireNomJoueur(self):
8 self.NomJoueur = input()
9
10 def mettreAJourScore(self,scoreRecompense):
11 self.Score=self.Score+scoreRecompense
12
13 def afficherStatisticJoueur(self):
14 print( "NomJoueur=",self.NomJoueur,"\nPoints De Vie=",self.PointsDeVie,
"\nScore=",self.Score)
15
16 Med=TypeJoueur()
17
18 Med.lireNomJoueur()
19 Med.mettreAJourScore(10)
20 Med.afficherStatisticJoueur()
- Le mot clé self, passé en argument dans tous les déclarations de méthode de la classe TypeJoueur,
représente l'objet qui a invoqué la méthode ou le constructeur. Cependant, lors de l'appel d'une
méthode, cet objet self est automatiquement inféré. Par exemple :
Med=TypeJoueur()# est équivalente à Med=TypeJoueur(Med). Donc l'objet courant (self) prendra la
référence de l'objet qui a invoqué la méthode
Med.mettreAJourScore(10) # de même cette instruction est équivalente à Med.mettreAJourScore( Med,
10)
- En outre, les attributs de la classe sont déclarés à l'intérieur du constructeur __init__ (self.PointsDeVie ,
self.Score, self.NomJoueur).
- L'appel du constructeur (ligne 16) se fait sans opérateur new contrairement à la syntaxe Java.
14
Les classes et objets en python
1 def __init__(self,pointsvie,score,nom):
2 self.PointsDeVie=pointsvie
3 self.Score=score
4 self.NomJoueur=nom
Il est possible aussi de définir l'implémentation des opérateurs comme +, -, *, [] , (). Par exemple, la classe list
(tableau) définie l'opérateur + pour concaténer une liste avec une autre et * pour répéter une liste un certain
nombre de fois. Voir l'exemple suivant :
1 A=[10,20,30,40]
2 B=[100,200,300,400]
3 C=A+B
4 print(C) # [10, 20, 30, 40, 100, 200, 300, 400]
5 C=A*3
6 print(C) # [10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40]
La surcharge d'opérateur peut être défie dans une classe avec la méthode correspondante à l'opérateur
spécifique. Par exemple, + est définie par la méthode __add__, * par __mul__, / par __div__. L'exemple
suivant définie l'opérateur d'addition (__add__ ligne 15) pour modifier le score du joueur et l'opérateur de
multiplication (__mul__ ligne 18) pour multiplier le score par un facteur. Les deux méthodes précédentes
retourne l'objet après la modification du score (ligner 17 et 20). La surcharge des deux opérateurs est testée
dans ligne 26 et 28.
1 class TypeJoueur:
2 def __init__(self):
3 self.PointsDeVie=100
4 self.Score=0
5 self.NomJoueur=''
6
7 def lireNomJoueur(self):
8 self.NomJoueur = input()
9
10 def mettreAJourScore(self,scoreRecompense):
11 self.Score=self.Score+scoreRecompense
12
13 def afficherStatisticJoueur(self):
14 print( "NomJoueur=",self.NomJoueur,"\nPoints De Vie=",self.PointsDeVie,
"\nScore=",self.Score)
15 def __add__(self,scoreRecompense):
16 self.Score=self.Score+scoreRecompense
17 return self
18 def __mul__(self,multiplicateurScore):
19 self.Score=self.Score*multiplicateurScore
20 return self
21
22 Med=TypeJoueur()
23
24 Med.lireNomJoueur()
25 Med.mettreAJourScore(10)
26 Med+=20
27 Med.afficherStatisticJoueur()
15
Les classes et objets en python
28 Med*=5
29 Med.afficherStatisticJoueur()
16
Tuple et unpacking
Tuple et unpacking
VII
Python offre un autre type similaire au tableau appelé tuple. Les tuples supportent la plus part des opérations
sur les tableaux sauf qu'ils sont immuables (une fois que le tuple est créé, on ne peux pas changer son contenu).
Les tableaux et les tuples sont souvent utilisés pour déballer (unpack) plusieurs valeurs. Supposant que ont
possède un tuple T contenant le nom, l'age et le niveau d'un étudiant et on souhaite attribuer chaque valeur à
une variable.
1 T=("Mohammed",18,"L3")
2 nom,age,niveau=T
3 print(nom)
4 print(age)
5 print(niveau)
Syntaxe
L'instruction "nom,age,niveau=T" est équivalente à :
nom=T[0]
age=T[1]
niveau=T[2]
17
Tuple et unpacking
Cette syntaxe peut être utilisée afin de permuter les valeurs des variables :
a=1
b=2
a,b=b,a
ou bien
a,b=[b,a]
18
Exercice : Trie
Exercice : Trie
VIII
Question
Le code suivant lit à partir du clavier la taille du tableau (Ligne 2) et remplit celui-ci avec des valeurs aléatoires
(Ligne 3).
19
Paramètres de fonction par défaut
Paramètres de fonction
par défaut IX
Dans une fonction il est possible de déclarer un ou plusieurs paramètres par défaut.
1 def multiplier(nombre,facteur=2):
2 return nombre*facteur
3 print( multiplier(3,5)) # resultat =15
4 print( multiplier(7)) # resultat = 14
- Dans l'exemple précédant, la fonction multiplier possède un paramètre par défaut facteur avec une valeur
2. Ceci dit que si la valeur du paramètre n'est pas précisée, la valeur de ce dernier est égale à 2 (voir
l'appel de multiplier avec un seul paramètre).
- Il est possible de déclarer plusieurs paramètres par défaut. La seule restriction est que les paramètres par
défaut ne sont pas suivies par un paramètre obligatoire :
L’écriture suivante est correcte :
def fontion(argobligatoire1,argobligatoire2,parametrepardefaut1=3,parametrepardefaut2=2,
parametrepardefaut3=1) ;
Par contre l'écriture suivante est incorrecte car argobligatoire2 vient après parametrepardefaut3 ;
def fontion(argobligatoire1,parametrepardefaut1=3,parametrepardefaut2=2,parametrepardefaut3=1,
argobligatoire2)
1 variableGlobal=4
2 def impromerlavaleurdeVG():
3 global variableGlobal
4 print( variableGlobal)
5 print( impromerlavaleurdeVG())
20
Fonction lambda
Fonction lambda
X
Souvent, il est nécessaire de déclarer des fonctions qui assurent un traitement limités ou calculer une formule
prédéfinie.
Par exemple supposant qu'ont souhaite écrire une fonction permettant de convertir la température en degré
Celsius vers Fahrenheit.
temp_Fahr=(temp_celsius × 9/5) + 32
1 def convertirCelsiusToFahr(temp_celsius):
2 return (temp_celsius * 9./5) + 32
A ce niveau, il faudra noter qu'une fonction peut être affectée à une variable. Une fonction déclarée en python
n'est qu'un objet de type fonction :
1 def convertirCelsiusToFahr(temp_celsius):
2 return (temp_celsius * 9./5) + 32
3 var1=convertirCelsiusToFahr
4 print (type(var1)) # imprime <type 'function'>
5 print( var1(3.))
Comme d'autres langages évolués, il existe une façon plus concise afin de déclarer une telle opération appelée
expression lambda:
- L'expression lambda précédante déclare une fonction anonyme avec un seul paramètre temp_celsius, et
retourne la valeur de la formule (temp_celsius * 9./5) + 32.
- La fonction déclarée est attribuée à la variable fun. Par la suite, afin d'invoquer cette fonction il suffit
d'utiliser la variable fun (Ligne 2).
- Dans cette déclaration le mot clé return n'est pas utilisé alors que la fonction retourne la valeur de la
formule. Ceci est appelé implicite return.
21
Fonction d'ordre supérieur (higher order function)
Fonction d'ordre
supérieur (higher order XI
function)
Une fonction d'ordre supérieur est une fonction qui a en paramètre une/plusieurs autre(s) fonction(s) ou
retourne une fonction. Il existe plusieurs fonctions d'ordre supérieurs prédéfinies qui sont très utiles.
Exemple : map
Supposant qu'ont souhaite lire une liste d'entiers, séparés par des espaces, à partir du clavier. Ce travail peut être
accompli de la manière suivante :
1 def convertirEnListEntier(L):
2 resultat=[]
3 for valeur in L:
4 resultat.append(int(valeur))
5 return resultat
6 print( convertirEnListEntier(input().split(" ")) )
Le programme précédant prend chaque valeur de la liste, la convertie vers le type int en faisant appel à int
(valeur) et ajoute le résultat au tableau resultat. Il existe une fonction qui permet d'appliquer une fonction à
chaque élément de la liste et de retourner la liste contenant le résultat sans changer la liste originale. Cette
fonction est appelée map :
- La fonction map, prend une fonction en paramètre (dans cet exemple int) et une collection / tableau,
applique cette fonction à chaque élément et ajoute le résultat à la collection en sortie.
- L'avantage de ceci est que si on souhaite changer le type de conversion ou la fonction appliquée sur les
éléments de la liste, il suffit de changer la fonction argument de map. Par exemple supposant que on
souhaite avoir les valeurs de la liste saisie du clavier comme des doubles ( float). La seule chose qui a
changée est la fonction passée en paramètre (float au lieu de int).
Exemple : filter
Une autre fonction similaire à map, est la fonction filter. Supposant qu'on possède une liste des notes et on
souhaite retenir seulement les notes supérieures à 14. La fonction suivante fait exactement ça :
1 def notesSuppA14(L):
22
Fonction d'ordre supérieur (higher order function)
2 resultat=[]
3 for valeur in L:
4 if valeur>14:
5 resultat.append(int(valeur))
6 return resultat
7 Liste=[13, 15, 16, 10, 9, 18, 11, 10]
8 print( notesSuppA14(Liste))
1 def supp14(note):
2 return note>14
3 print(list(filter(supp14,Liste)))
- Il suffit de définir une fonction qui va retourner une valeur booléenne (True ou False) et la mettre comme
paramètre pour filter. Appelons cette fonction comme la fonction d’évaluation.
- La fonction d'évaluation va être appliquée sur chaque élément de la liste. L’élément est ajouté à la
collection résultat si l'évaluation retourne True.
- Il est possible d’écrire la fonction précédente d'une manière plus concise avec une expression lambda :
23