Cours Algorithmique et Python 2024
Cours Algorithmique et Python 2024
1. Introduction à l'algorithmique
Qu'est-ce qu'un Algorithme ? Un algorithme est une suite finie et ordonnée d’instructions
permettant de résoudre un problème ou d’effectuer une tâche. Les algorithmes sont utilisés
dans divers domaines pour traiter des données, automatiser des tâches, ou résoudre des
problèmes complexes.
Pourquoi Utiliser le Pseudocode ? Le pseudocode permet de décrire la logique d’un
algorithme sans la complexité d’un langage de programmation spécifique. Il est utilisé pour
illustrer et planifier les étapes d’un programme.
1.1. Notions de Base et Syntaxe en Pseudocode
Voici les éléments de base de la syntaxe algorithmique en pseudocode, avec des exemples
pour chaque structure.
Déclaration d'un Algorithme
On commence par le mot-clé Algorithme suivi du nom de l'algorithme.
Algorithme NomDeLAlgorithme
Entrée : nom_variable_entrée
Assignation de Valeurs
L'assignation se fait avec = pour attribuer une valeur à une variable.
x = 10 // x prend la valeur 10
Si condition alors
// instructions si la condition est vraie
Sinon
// instructions si la condition est fausse
Fin Si
Boucle Tant Que : Pour répéter tant qu’une condition est vraie.
Algorithme MaximumListe
Entrée : liste (une liste d'entiers)
Sortie : max (le plus grand entier de la liste)
Début
max = liste[0] // Initialiser max avec le premier élément
Pour chaque élément dans liste
Si élément > max alors
max = élément // Met à jour max si élément est plus grand
Fin Si
Fin Pour
Ecrire("Le maximum de la liste est :", max)
Fin
Algorithme Factorielle
Entrée : N (un entier positif)
Sortie : fact (la factorielle de N)
Début
fact = 1 // Initialiser fact
Pour i allant de 1 à N
fact = fact * i // Multiplie fact par i
Fin Pour
Ecrire("La factorielle de", N, "est :", fact)
Fin
Algorithme VerifierDivisibilite
2. Introduction à Python
2.1. Présentation de Python
Qu'est-ce que Python ? Python est un langage de programmation de haut niveau, interprété et
orienté objet, créé par Guido van Rossum et introduit en 1991. Python est populaire pour sa
simplicité et sa lisibilité, ce qui en fait un excellent choix pour les débutants, tout en restant puissant
pour des applications complexes. On le retrouve dans des domaines variés :
Développement Web : Utilisé pour créer des sites et applications web (avec Django, Flask,
etc.)
Analyse de données et Machine Learning : Python est largement utilisé dans la science des
données (avec des bibliothèques comme Pandas, NumPy, Scikit-learn).
Installation de Python Pour exécuter du code Python, il faut installer l'interpréteur Python sur votre
ordinateur. Voici comment procéder :
3. Vérification : Une fois installé, ouvrez votre terminal (ou invite de commande) et tapez
python --version. Cela doit afficher la version de Python installée.
Environnements de Développement (IDE) Pour écrire et exécuter du code, vous pouvez utiliser
différents environnements :
Jupyter Notebook : Outil interactif souvent utilisé pour les données et l’analyse.
Déclaration de Variables
En Python, les variables permettent de stocker des informations que vous pouvez utiliser et
manipuler dans votre code. Contrairement à d'autres langages, vous n'avez pas besoin de spécifier le
type de la variable lors de sa déclaration ; Python le déduit automatiquement à partir de la valeur
que vous lui assignez.
age = 25 # Entier
Explications :
nom = "Alice" : Ici, nom est une variable de type str (chaîne de caractères).
est_etudiant = True : est_etudiant est une variable booléenne (bool), qui peut être soit True
(vrai) soit False (faux).
Les types de données sont importants car ils déterminent quelles opérations peuvent être effectuées
sur chaque variable.
Python prend en charge les opérations arithmétiques et logiques. Voici quelques exemples courants :
a = 10
b=5
print("Bonjour,", nom)
Dans cet exemple, input() demande à l'utilisateur de saisir un texte. Ce texte est ensuite stocké dans
la variable nom, qui est affichée avec print().
Les conditions permettent d'exécuter un bloc de code en fonction d'une condition donnée. Si la
condition est vraie, le bloc de code est exécuté. Si elle est fausse, le programme passe à la condition
suivante ou ignore le bloc de code.
Syntaxe de base :
if condition:
elif autre_condition:
else:
2. elif (else if) : Permet de vérifier une autre condition si la première est fausse.
3. else : Exécute le code associé si aucune des conditions précédentes n’est vraie.
Supposons que nous voulions écrire un programme qui vérifie si une personne est mineure, majeure,
ou senior en fonction de son âge :
else:
Explication détaillée :
Si age < 18 est vrai, le programme affiche "Vous êtes mineur." et ignore les autres blocs.
Si age >= 18 et age < 65 sont vrais (grâce à elif), le programme affiche "Vous êtes majeur.".
Si aucune de ces conditions n'est vraie (c’est-à-dire age >= 65), le programme passe au bloc
else et affiche "Vous êtes senior."
Conditions imbriquées : Il est possible de placer une condition à l'intérieur d'une autre condition
pour vérifier des situations plus complexes.
if nationalite == "oui":
else:
else:
Dans cet exemple, la seconde condition vérifie la nationalité uniquement si l'âge est supérieur ou
égal à 18.
== : égal à
!= : différent de
< : inférieur à
> : supérieur à
Exemple combiné :
age = 25
citoyen = True
else:
Ici, le message "Vous pouvez voter." s’affiche uniquement si age >= 18 et citoyen sont tous deux
vrais.
Les boucles permettent de répéter des instructions plusieurs fois, selon une condition donnée.
Python propose deux types de boucles principales : la boucle for et la boucle while.
La boucle for est utilisée pour parcourir une séquence, comme une liste, une chaîne de caractères,
ou un intervalle de nombres. Elle est très pratique pour exécuter un code un nombre fixe de fois.
Syntaxe :
Explication : Dans cet exemple, la variable fruit prend successivement chaque valeur de la liste fruits,
et le programme affiche "J'aime les pomme", puis "J'aime les banane", puis "J'aime les cerise".
La fonction range() génère une séquence de nombres. Elle est souvent utilisée avec une boucle for
pour itérer un certain nombre de fois.
print("Itération numéro", i)
Explication détaillée :
Vous pouvez personnaliser range() pour spécifier un début, une fin, et un pas.
print(i)
Explication :
range(1, 10, 2) démarre à 1, s’arrête avant 10, et avance par pas de 2, donc i prendra les
valeurs 1, 3, 5, 7, et 9.
La boucle while répète un bloc de code tant qu'une condition est vraie. Elle est utile pour des
situations où l'on ne sait pas à l'avance combien de fois il faudra répéter le code.
Syntaxe :
while condition:
compteur = 1
compteur += 1
Explication : La boucle continue de s'exécuter tant que compteur est inférieur ou égal à 5. À chaque
itération, compteur est incrémenté de 1.
Boucles infinies : Si la condition d'une boucle while reste toujours vraie, la boucle s'exécutera sans
fin, ce qui peut bloquer le programme. Assurez-vous que la condition deviendra fausse à un moment
donné !
compteur = 0
while True:
compteur += 1
if compteur == 10:
Explication : Ici, la boucle est infinie (while True:), mais grâce à la condition if compteur == 10, le
break interrompt la boucle après 10 itérations.
Python offre deux instructions pour contrôler le flux des boucles : break et continue.
for i in range(10):
if i == 5:
break
print(i)
for i in range(10):
if i % 2 == 0:
continue
print(i)
Explication : Ici, continue saute l'impression des nombres pairs. Le programme affiche donc
seulement les nombres impairs entre 0 et 9 (1, 3, 5, 7, 9).
somme = 0
somme += i
Explication : La boucle for additionne chaque nombre de 1 à 100, et le résultat final est stocké dans
somme.
est_premier = True
est_premier = False
break
if est_premier:
4. Fonctions en Python
Les fonctions permettent de réutiliser du code sans le réécrire. En regroupant des instructions
spécifiques dans une fonction, on peut appeler cette fonction n'importe où dans le programme, ce
qui rend le code plus clair et modulaire.
Pour définir une fonction en Python, on utilise le mot-clé def, suivi du nom de la fonction, des
parenthèses, et d’un deux-points :. Le code de la fonction est ensuite indenté sous cette ligne.
Syntaxe de base :
# Instructions de la fonction
return valeur_a_retourner
nom_de_la_fonction : Nom de la fonction, qui doit être unique et en minuscules avec des
underscores pour séparer les mots.
paramètres : Ce sont des variables utilisées par la fonction. Elles sont placées entre
parenthèses après le nom.
return : Cette instruction renvoie une valeur en sortie de la fonction. Elle est optionnelle,
mais essentielle lorsque la fonction doit fournir un résultat.
resultat = a + b
return resultat
Explication :
Les paramètres sont les variables définies dans la fonction (comme a et b dans l'exemple ci-dessus),
tandis que les arguments sont les valeurs spécifiques que l'on passe à la fonction lors de l'appel.
Paramètres obligatoires : Ce sont les paramètres sans valeur par défaut, et ils doivent être
fournis à l'appel de la fonction.
Paramètres optionnels (avec valeurs par défaut) : Si une valeur par défaut est fournie pour
un paramètre, il devient optionnel lors de l'appel de la fonction.
Ici, le paramètre message a une valeur par défaut de "Bonjour". Cela signifie qu'on peut appeler la
fonction avec un seul argument :
La portée détermine où une variable est accessible dans le code. Il existe deux types principaux de
portée en Python :
1. Portée locale : Les variables créées à l'intérieur d'une fonction sont locales à cette fonction
et n'existent pas en dehors d'elle.
2. Portée globale : Les variables définies en dehors de toute fonction sont globales et
accessibles dans tout le programme.
Exemple :
def test_portee():
x = 5 # Variable locale
x = 10 # Variable globale
test_portee()
Résultat :
Dans la fonction : 5
Dans cet exemple, la variable x définie dans la fonction est différente de celle définie en dehors de la
fonction, même si elles portent le même nom.
Une fonction peut soit retourner une valeur avec return, soit ne rien retourner, auquel cas elle
renvoie implicitement None.
return a * b
def afficher_bonjour():
print("Bonjour !")
Lorsque afficher_bonjour est appelée, elle affiche simplement "Bonjour !" et ne renvoie pas de
valeur.
Les arguments variables permettent de créer des fonctions plus flexibles, qui peuvent recevoir un
nombre variable d'arguments.
*args : Permet de passer un nombre indéfini d'arguments positionnels dans une fonction. Les
arguments sont collectés sous forme de tuple.
Exemple :
def additionner_tout(*args):
total = 0
total += nombre
return total
Exemple :
def afficher_informations(**kwargs):
print(f"{cle} : {valeur}")
Résultat :
nom : Alice
age : 25
ville : Paris
Les fonctions lambda sont des fonctions anonymes, utiles pour des opérations simples. Elles
s'écrivent sur une seule ligne avec la syntaxe lambda paramètres: expression.
Syntaxe :
Exemple :
addition = lambda x, y: x + y
Les fonctions lambda sont souvent utilisées avec des fonctions comme map(), filter(), et sorted().
def factorielle(n):
if n == 0 or n == 1:
return 1
else:
return n * factorielle(n - 1)
Cette fonction utilise la récursivité, c'est-à-dire qu'elle s'appelle elle-même pour calculer le produit
de tous les nombres jusqu'à n.
if n <= 1:
return False
if n % i == 0:
return False
return True
Cette fonction vérifie si un nombre n est divisible par un autre nombre entre 2 et la racine carrée de
n. Si c'est le cas, n n'est pas premier.
5. Travaux Pratiques
Exercice 1 : Calculer la Somme de Deux Nombres
# Solution
somme = a + b
Écrivez un programme qui demande un nombre et affiche s'il est pair ou impair.
# Solution
if nombre % 2 == 0:
else:
Demandez à l'utilisateur de saisir un nombre entier et affichez sa factorielle (ex : factorielle de 5 est
5! = 5 × 4 × 3 × 2 × 1).
factorielle = 1
factorielle *= i
ma_liste = [1, 2, 3, 4, 5]
print(ma_liste) # Affiche : [1, 2, 3, 4, 5]
ma_liste = [1, 2, 3]
ma_liste[1] = 20 # Modification de l'élément à l'index 1
print(ma_liste) # Affiche : [1, 20, 3]
ma_liste = [1, 2, 3]
ma_liste.append(4)
print(ma_liste) # Affiche : [1, 2, 3, 4]
Explication : Ici, nous avons une liste contenant trois éléments. En utilisant append(4), nous
ajoutons le nombre 4 à la fin de la liste.
6.4.2 extend()
La méthode extend() permet d'ajouter plusieurs éléments à la fin de la liste à partir d'une
autre liste ou d'un itérable.
Exemple :
ma_liste = [1, 2, 3]
ma_liste.extend([4, 5, 6])
print(ma_liste) # Affiche : [1, 2, 3, 4, 5, 6]
Explication : Dans cet exemple, nous avons utilisé extend() pour ajouter les éléments de la
liste [4, 5, 6] à la liste ma_liste.
6.4.3 insert()
La méthode insert() permet d'insérer un élément à une position spécifique de la liste.
Exemple :
ma_liste = [1, 2, 3]
ma_liste.insert(1, 10) # Insérer 10 à l'index 1
print(ma_liste) # Affiche : [1, 10, 2, 3]
Explication : Ici, nous avons inséré le nombre 10 à l'index 1 de la liste, décalant ainsi les
autres éléments.
6.4.4 remove()
La méthode remove() supprime la première occurrence d'un élément de la liste.
Exemple :
ma_liste = [1, 2, 3, 2]
2ème année MGSI [Link] 18
2024/2025
ma_liste.remove(2)
print(ma_liste) # Affiche : [1, 3, 2]
ma_liste = [1, 2, 3]
element = ma_liste.pop(1) # Supprime et renvoie l'élément à l'index 1
print(element) # Affiche : 2
print(ma_liste) # Affiche : [1, 3]
Explication : Ici, nous avons utilisé pop(1) pour supprimer l'élément à l'index 1 (qui est 2) et
le stocker dans la variable element.
6.4.6 index()
La méthode index() renvoie l'index de la première occurrence d'un élément dans la liste.
Exemple :
ma_liste = [1, 2, 3, 2]
index = ma_liste.index(2)
print(index) # Affiche : 1
ma_liste = [1, 2, 3, 2]
compte = ma_liste.count(2)
print(compte) # Affiche : 2
Explication : Ici, count(2) retourne le nombre d'occurrences de l'élément 2 dans la liste, qui
est 2.
ma_liste = [3, 1, 2]
ma_liste.sort()
print(ma_liste) # Affiche : [1, 2, 3]
Explication : Dans cet exemple, sort() trie les éléments de ma_liste en ordre croissant.
6.4.9 reverse()
La méthode reverse() inverse l'ordre des éléments dans la liste.
Exemple :
ma_liste = [1, 2, 3]
ma_liste.reverse()
print(ma_liste) # Affiche : [3, 2, 1]
ma_liste = [1, 2, 3]
ma_liste.clear()
print(ma_liste) # Affiche : []
Explication : Dans cet exemple, clear() supprime tous les éléments de ma_liste, laissant une
liste vide.
6.5 Slicing des Listes
Le slicing vous permet d'accéder à une sous-partie de la liste. Vous pouvez spécifier un
début, une fin et un pas.
Exemple :
ma_liste = [0, 1, 2, 3, 4, 5]
sous_liste = ma_liste[1:4] # Prend les éléments à l'index 1, 2 et 3
print(sous_liste) # Affiche : [1, 2, 3]
Explication : Ici, nous avons créé une liste de carrés des nombres de 0 à 4 à l'aide de la
compréhension de liste.
8. Algorithmes de tri
8.1 Tri à Bulles (Bubble Sort)
Le tri à bulles est un algorithme de tri simple, mais souvent inefficace pour des listes de
grande taille. Voici un aperçu de son fonctionnement :
Fonctionnement :
1. Comparaison : L'algorithme parcourt la liste à plusieurs reprises. Pour chaque paire
d'éléments adjacents, il compare les deux éléments.
2. Échange : Si l'élément de gauche est plus grand que celui de droite, ils sont échangés.
3. Répétition : Ce processus est répété jusqu'à ce que la liste soit complètement triée.
L'algorithme continue jusqu'à ce qu'aucun échange ne soit nécessaire lors d'un
passage.
Complexité :
Meilleur cas : O(n) (lorsque la liste est déjà triée).
Moyen et pire cas : O(n²).
Illustration :
Supposons que nous avons la liste suivante : [5, 1, 4, 2, 8].
Première passe :
o Compare 5 et 1 → Échange (1, 5, 4, 2, 8)
o Compare 5 et 4 → Échange (1, 4, 5, 2, 8)
o Compare 5 et 2 → Échange (1, 4, 2, 5, 8)
o Compare 5 et 8 → Pas d'échange (1, 4, 2, 5, 8)
Deuxième passe :
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j] # Échange
swapped = True
if not swapped: # Si aucune paire n'a été échangée, la liste est triée
break
# Exemple d'utilisation
ma_liste = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(ma_liste)
print("Liste triée : ", ma_liste) # Affiche : Liste triée : [11, 12, 22, 25, 34, 64, 90]
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_index = i # On suppose que l'élément à la position i est le minimum
for j in range(i + 1, n):
if arr[j] < arr[min_index]:
min_index = j # Met à jour l'index du minimum
arr[i], arr[min_index] = arr[min_index], arr[i] # Échange
# Exemple d'utilisation
ma_liste = [64, 25, 12, 22, 11]
selection_sort(ma_liste)
print("Liste triée : ", ma_liste) # Affiche : Liste triée : [11, 12, 22, 25, 64]
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j=i-1
# Déplacer les éléments de arr[0..i-1] qui sont supérieurs à key vers une position en
avant de leur position actuelle
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key # Insérer l'élément à sa place
# Exemple d'utilisation
ma_liste = [12, 11, 13, 5, 6]
insertion_sort(ma_liste)
print("Liste triée : ", ma_liste) # Affiche : Liste triée : [5, 6, 11, 12, 13]
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot] # Éléments inférieurs
middle = [x for x in arr if x == pivot] # Éléments égaux
right = [x for x in arr if x > pivot] # Éléments supérieurs
return quick_sort(left) + middle + quick_sort(right) # Combinaison
# Exemple d'utilisation
ma_liste = [3, 6, 8, 10, 1, 2, 1]
sorted_list = quick_sort(ma_liste)
print("Liste triée : ", sorted_list) # Affiche : Liste triée : [1, 1, 2, 3, 6, 8, 10]
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left, right):
result = []
i=j=0
# Fusionner les deux listes
while i < len(left) and j < len(right):
if left[i] < right[j]:
[Link](left[i])
i += 1
else:
[Link](right[j])
j += 1
[Link](left[i:])
[Link](right[j:])
return result
9. Algorithmes de Recherche
La recherche séquentielle est un algorithme de recherche simple qui consiste à parcourir une liste
d'éléments un par un pour trouver un élément cible. Cette méthode est généralement utilisée
lorsque les éléments de la liste ne sont pas triés.
Fonctionnement :
3. Résultat :
4. Fin : Répétez le processus jusqu'à ce que l'élément soit trouvé ou que la fin de la liste soit
atteinte.
Complexité :
Moyen et pire cas : O(n) (lorsque l'élément est à la fin ou n'est pas présent).
Exemple de code :
if valeur == cible:
# Exemple d'utilisation
ma_liste = [4, 2, 7, 1, 3]
resultat = recherche_sequentielle(ma_liste, 1)
Explication du Code :
Retourne -1 : Si l'élément n'est pas trouvé après avoir parcouru toute la liste.
La recherche par dichotomie est un algorithme de recherche efficace qui nécessite que la liste soit
triée. Elle fonctionne en divisant la liste en deux moitiés à chaque étape.
Fonctionnement :
3. Comparaison :
4. Fin : Continuez ce processus jusqu'à ce que l'élément soit trouvé ou que les indices de début
et de fin se croisent.
Complexité :
Exemple de code :
bas = 0
haut = len(liste) - 1
if liste[milieu] == cible:
# Exemple d'utilisation
resultat = recherche_dichotomique(ma_liste, 4)
Explication du Code :
Tri de la liste : Avant d'effectuer la recherche, la liste est triée avec [Link]().
Indices bas et haut : Ces indices définissent la portion de la liste dans laquelle nous
effectuons la recherche.
Calcul du milieu : L'index du milieu est calculé pour déterminer quelle moitié de la liste doit
être explorée.
10.1 Tuples
Définition :
Un tuple est une structure de données en Python qui permet de stocker une collection d'éléments.
Les tuples sont similaires aux listes, mais ils sont immuables, ce qui signifie que leurs éléments ne
peuvent pas être modifiés après leur création.
Caractéristiques :
Immutabilité : Une fois créés, les tuples ne peuvent pas être modifiés.
Accès aux éléments : Vous pouvez accéder aux éléments d'un tuple en utilisant des indices.
Syntaxe :
Exemple de code :
Stocker des données qui ne doivent pas être modifiées, comme des coordonnées (latitude,
longitude).
Utiliser comme clés dans les dictionnaires, car ils sont immuables.
10.3 Dictionnaires
Définition :
Un dictionnaire est une structure de données qui stocke des paires clé-valeur. Les clés doivent être
uniques et immuables, tandis que les valeurs peuvent être de n'importe quel type et peuvent être
dupliquées.
Caractéristiques :
Mutable : Vous pouvez ajouter, modifier ou supprimer des éléments dans un dictionnaire.
Accès par clé : Les valeurs sont accessibles via leurs clés, ce qui permet un accès rapide.
Ordre : Depuis Python 3.7, les dictionnaires conservent l'ordre d'insertion des éléments.
Syntaxe :
mon_dictionnaire = {
"clé1": valeur1,
"clé2": valeur2,
"clé3": valeur3
Exemple de code :
mon_dictionnaire = {
"âge": 25,
"ville": "Dakar"
mon_dictionnaire["profession"] = "Ingénieur"
mon_dictionnaire["âge"] = 26
del mon_dictionnaire["ville"]
# Longueur du dictionnaire
Stocker des données associatives, où chaque valeur est liée à une clé.
Modéliser des objets dans des programmes, par exemple, un étudiant avec des attributs
comme le nom, l'âge et la ville.
Accéder rapidement aux valeurs en utilisant des clés, ce qui est plus efficace que d'utiliser
des listes pour des recherches.
Définition :
Une pile est une structure de données qui fonctionne selon le principe "dernier entré, premier sorti"
(Last In, First Out - LIFO). Cela signifie que l'élément ajouté en dernier sera le premier à être retiré.
Opérations Principales :
Exemple de code :
# Initialisation de la pile
pile = []
def empiler(element):
def depiler():
if not est_vide():
def sommet():
def est_vide():
# Exemple d'utilisation
empiler(10)
empiler(20)
print("Sommet de la pile après dépile :", sommet()) # Affiche : Sommet de la pile après dépile : 10
Définition :
Une file est une structure de données qui fonctionne selon le principe "premier entré, premier sorti"
(First In, First Out - FIFO). Cela signifie que l'élément ajouté en premier sera le premier à être retiré.
Opérations Principales :
Exemple de code :
# Initialisation de la file
def enfiler(element):
def defiler():
if not est_vide():
def premier():
if not est_vide():
def est_vide():
# Exemple d'utilisation
enfiler(10)
enfiler(20)
print("Premier élément de la file après défile :", premier()) # Affiche : Premier élément de la file
après défile : 20
Pour obtenir la date actuelle en Python, vous pouvez utiliser le module datetime, qui fournit des
classes pour manipuler les dates et les heures. Voici un exemple de code pour obtenir la date
d'aujourd'hui :
date_aujourdhui = [Link]()
# Afficher la date
Explication du code :
Exemple de sortie :
Gérer et organiser des fichiers pour des applications qui nécessitent un stockage persistant
de données.
En Python, l’ouverture d’un fichier se fait avec la fonction open(). Cette fonction prend deux
paramètres principaux :
Mode d’ouverture : Indique si le fichier doit être ouvert en lecture, écriture, ajout, etc.
Mode Description
'r' Lecture seule. Le fichier doit exister.
'w' Écriture seule. Crée un nouveau fichier ou écrase l'existant.
'a' Ajout. Écrit à la fin du fichier, sans écraser.
'r+' Lecture et écriture. Le fichier doit exister.
'w+' Lecture et écriture. Écrase le fichier existant ou en crée un nouveau.
'a+' Lecture et écriture en mode ajout. Le fichier est créé s’il n’existe pas.
Exemple de code : Ouverture d’un fichier en lecture
Une fois le fichier ouvert en lecture, plusieurs méthodes permettent de lire son contenu.
3. Lire toutes les lignes et obtenir une liste de lignes avec readlines().
Exemples de Lecture :
contenu = [Link]()
print(contenu)
Explication :
with open(...) as fichier ouvre le fichier et garantit qu’il sera fermé automatiquement à la fin
du bloc.
Pour écrire dans un fichier, ouvrez-le avec un mode d’écriture ('w', 'a', ou 'w+').
# Écrire du contenu dans un fichier (le fichier sera écrasé s’il existe déjà)
Explication :
En mode 'w', le fichier est écrasé, tandis qu'en mode 'a', le contenu est ajouté à la fin.
Il est essentiel de fermer un fichier après utilisation pour libérer les ressources. Avec with open(...),
Python gère la fermeture automatiquement. Sinon, on peut utiliser [Link]() :
contenu = [Link]()
lignes = [Link]()
nouveau_fichier.write(ligne_modifiee)
Les fichiers binaires sont manipulés différemment. Par exemple, pour lire ou écrire une image, un
fichier audio, etc., utilisez les modes 'rb' et 'wb' pour lire et écrire en binaire.
contenu = fichier_binaire.read()
fichier_binaire.write(contenu)
Python permet aussi de manipuler des fichiers JSON, souvent utilisés pour stocker des données
structurées.
import json
donnees = [Link](fichier_json)
print(donnees)
[Link](donnees, fichier_json)
Explication :
[Link]() prend un dictionnaire et écrit son contenu en format JSON dans un fichier.
Lorsqu’on manipule des fichiers, il est possible de rencontrer des erreurs, comme un fichier
inexistant. Pour les gérer, utilisez try...except.
try:
contenu = [Link]()
except FileNotFoundError:
except IOError:
Explication :
La Programmation Orientée Objet (POO) est une méthode de structuration du code en organisant les
données et les comportements associés au sein de blocs logiques appelés "objets". En Python, la
POO simplifie la conception de programmes modulaires, réutilisables et extensibles.
1. Classe : C’est le modèle ou le plan de création d’objets. Elle définit les attributs (données) et
les méthodes (fonctions) que posséderont ses instances. Une classe ne fait rien toute seule ;
elle sert de "moule" pour créer des objets.
2. Objet : Une instance d’une classe. C’est une "copie" de la classe avec ses propres données.
Par exemple, si la classe est Voiture, chaque objet pourrait être une voiture spécifique
comme une "Toyota".
3. Attributs : Les données ou caractéristiques d'un objet. Par exemple, une voiture peut avoir
des attributs comme la couleur, la marque, le modèle, etc.
4. Méthodes : Fonctions qui définissent les actions possibles d’un objet. Par exemple, une
voiture peut avoir des méthodes comme demarrer, freiner, etc.
En Python, on définit une classe avec le mot-clé class, suivi du nom de la classe avec une majuscule
(par convention).
Exemple :
class Personne:
pass # Mot-clé `pass` signifie que la classe est vide pour l'instant.
Cette classe Personne ne contient rien pour l'instant. Elle sera complétée par des attributs et des
méthodes pour lui donner une utilité.
Définir une classe nous permet de créer un "plan" pour un type d’entité que l’on souhaite modéliser.
Dans notre exemple, Personne est un modèle de personne qui pourra avoir des caractéristiques
comme le nom, l'âge, etc., et des comportements spécifiques.
personne1 = Personne()
Explication
Chaque instance est indépendante. Si on crée personne2 = Personne(), cela créera un nouvel
objet distinct de personne1.
Les attributs d'instance sont des variables propres à chaque objet. Ils se définissent dans une
méthode spéciale, appelée __init__, qui initialise les attributs dès la création d’un objet.
class Personne:
print([Link]) # Affiche 30
Explication détaillée
__init__ est une méthode spéciale appelée automatiquement lors de la création d’un objet.
C’est le "constructeur" en Python.
self est une référence à l’objet en cours de création. Il est toujours le premier paramètre des
méthodes d’une classe et permet d’accéder aux attributs et aux méthodes de l’objet.
14.5 Méthodes
Les méthodes sont des fonctions associées à une classe. Elles décrivent les actions que peuvent
réaliser les objets de cette classe.
[Link] = nom
[Link] = age
def se_presenter(self):
Explication
Les attributs de classe sont partagés entre toutes les instances. Ils se définissent en dehors de
__init__.
Exemple :
class Personne:
[Link] = nom
personne1 = Personne("Alice")
personne2 = Personne("Bob")
Explication
14.7 Encapsulation
L’encapsulation est une manière de restreindre l’accès direct aux attributs et méthodes internes de
l’objet. En Python, un attribut précédé de deux underscores __ est considéré comme privé et n'est
pas accessible directement.
Exemple :
class CompteBancaire:
if montant > 0:
self.__solde += montant
def obtenir_solde(self):
return self.__solde
compte = CompteBancaire(100)
[Link](50)
Explication
__solde est un attribut privé, accessible seulement via des méthodes comme obtenir_solde.
14.8 Héritage
Exemple :
class Animal:
[Link] = nom
class Chien(Animal):
print("Woof!")
class Chat(Animal):
def miauler(self):
print("Meow!")
chien = Chien("Max")
Explication
14.9 Polymorphisme
Le polymorphisme permet d'utiliser une interface commune pour des classes différentes.
Explication
1. Définition
Le polymorphisme peut être défini comme la capacité d'un langage de programmation à traiter des
objets de différents types via une interface commune. En Python, cela se traduit souvent par
l'utilisation de méthodes ayant le même nom dans différentes classes.
2. Types de Polymorphisme
3. Exemple de Polymorphisme
class Forme:
def dessiner(self):
class Cercle(Forme):
def dessiner(self):
class Carre(Forme):
def dessiner(self):
def dessiner_forme(forme):
print([Link]())
# Utilisation
forme1 = Cercle()
forme2 = Carre()
Explication du Code
1. Classe de Base :
o Forme est une classe de base avec une méthode dessiner qui est vide. Cette
méthode sera redéfinie dans les classes dérivées.
2. Classes Dérivées :
3. Fonction Générique :
4. Utilisation :
Avantages du Polymorphisme
Flexibilité : Vous pouvez écrire des fonctions ou des méthodes qui fonctionnent avec des
objets de classes différentes.
Extensibilité : Il est facile d'ajouter de nouvelles classes sans modifier le code existant qui
utilise le polymorphisme.
Réutilisabilité : Vous pouvez réutiliser du code commun pour des comportements similaires,
réduisant ainsi la duplication.