Club D.I.A.M · Build the Africa You Want

Bootcamp Python10 Jours pour Maîtriser Python & Data Science

De zéro à Data Scientist — cours complets, exercices pratiques, mini-projets réels. Chaque ligne de code vous rapproche de votre objectif.

10Jours
50+Exercices
10Mini-Projets
100%Pratique
COMMENCER
01

Fondations Python

Variables · Types · Arithmétique · Input/Output · Strings

Débutant 5 Parties 12 Exercices
✓Comprendre ce qu'est Python et pourquoi l'utiliser
✓Exécuter du code Python (terminal, script, IDE)
✓Déclarer et manipuler des variables
✓Utiliser les types de données (int, float, str, bool)
✓Effectuer des opérations arithmétiques
✓Interagir avec l'utilisateur (input/print)
✓Manipuler des chaînes de caractères
Partie 1

Introduction à Python

🐍
Cours — Qu'est-ce que Python ?›

Python est un langage de programmation polyvalent, lisible et puissant. Utilisé par Google, Netflix, NASA, Instagram — Python est aujourd'hui le langage #1 en Data Science et IA.

💡
Python se lit comme de l'anglais naturel. Si vous pouvez écrire une recette de cuisine, vous pouvez apprendre Python.
hello.py
# Mon premier programme Python !
print("Hello DIAM!")
print("Bienvenue dans le monde de Python")
print("=" * 40)

# Exécution : python hello.py
Exercice 1.1Hello World Personnalisé›

Créez un script qui affiche votre profil développeur : nom, ville, objectif avec Python, le tout formaté avec des lignes de séparation.

Partie 2

Variables et Types de Données

📦
Cours — Les 4 Types Fondamentaux›

Une variable est comme une boîte étiquetée qui stocke une information.

TypeDescriptionExemple
intNombre entier42, -10, 0
floatNombre décimal3.14, -0.5
strTexte"Python", 'DIAM'
boolVrai / FauxTrue, False
variables.py
nom         = "Alice"    # str
age         = 25        # int
taille      = 1.75      # float
est_etudiant= True      # bool

print(nom)              # Alice
print(type(nom))        # <class 'str'>
print(f"Prénom : {nom}, Âge : {age} ans")
Exercice 1.2Déclaration de Variables›

Déclarez 6 variables avec vos infos (prénom, nom, âge, ville, taille, est_etudiant) et affichez-les avec des f-strings.

Exercice 1.3Vérification des Types›

Pour chaque variable (10, 3.14, "Python", True, "123"), affichez son type. Question : quelle différence entre 10 et "123" ?

Partie 3

Opérations Arithmétiques

🔢
Cours — Calculer avec Python›
arithmetique.py
a, b = 10, 3
print(f"{a} + {b} = {a + b}")    # 13
print(f"{a} - {b} = {a - b}")    # 7
print(f"{a} × {b} = {a * b}")    # 30
print(f"{a} / {b} = {a / b}")    # 3.333...
print(f"{a} // {b} = {a // b}")   # 3 (division entière)
print(f"{a} % {b} = {a % b}")    # 1 (reste)
print(f"{a} ^ {b} = {a ** b}")   # 1000 (puissance)
Exercice 1.4Calculatrice de Base›

Déclarez deux nombres et affichez toutes les opérations : +, -, ×, /, //, %, **.

Exercice 1.5Calculs Pratiques — Géométrie & Conversion›

Calculez : aire d'un rectangle (12×5), aire d'un cercle (r=7, π=3.14159), conversion 25°C en Fahrenheit (F = C×9/5 + 32).

Partie 4

Interaction avec l'Utilisateur

⌨️
Cours — input() et output›
⚠️
Attention ! input() retourne TOUJOURS une str. Convertissez avec int() ou float() si nécessaire.
input.py
nom = input("Votre nom : ")
print(f"Bonjour {nom} !")

# Convertir en entier directement
age    = int(input("Votre âge : "))
taille = float(input("Taille (m) : "))
Exercice 1.6Calculatrice Interactive›

Demandez deux nombres → affichez leur somme, différence, produit et quotient.

Exercice 1.7Calculateur d'Année de Naissance›

Demandez l'âge → calculez et affichez l'année de naissance (2025 - age).

Exercice 1.8Convertisseur de Distances›

1 km = 0.621371 miles. Demandez une distance en km → affichez l'équivalent en miles (2 décimales).

Partie 5

Manipulation de Chaînes de Caractères

📝
Cours — Méthodes Strings & F-Strings›
strings.py
texte = "  Python est Génial  "
print(texte.upper())     # "  PYTHON EST GÉNIAL  "
print(texte.lower())     # "  python est génial  "
print(texte.strip())     # "Python est Génial"
print(texte.replace("Génial", "Super"))

# Slicing
mot = "Python"
print(mot[0])      # P
print(mot[-1])     # n
print(mot[0:3])    # Pyt
print(mot[::-1])   # nohtyP

# F-Strings (méthode recommandée)
nom, age = "Alice", 25
print(f"{nom} a {age} ans")
print(f"Pi : {3.14159:.2f}")      # 3.14
print(f"{1000000:,}")            # 1,000,000
Exercice 1.9Manipulation de Texte›

Partez de " PYTHON EST PUISSANT " : supprimez espaces, mettez en minuscules, capitalisez, comptez les 'P', remplacez "PUISSANT" par "GÉNIAL".

Exercice 1.10Formateur de Nom + Email Généré›

Demandez prénom + nom → formatez (Prénom en Title Case, NOM en majuscules) → générez initiales et email prenom.nom@diam.ga.

Exercice 1.12Vérificateur de Palindrome›
palindrome.py
mot         = input("Entrez un mot : ").lower()
mot_inverse = mot[::-1]
print(f"Mot     : {mot}")
print(f"Inversé : {mot_inverse}")
print(f"Palindrome : {mot == mot_inverse}")
🚀 Mini-Projet · Jour 1
Calculatrice de Profil Personnel
Programme complet qui collecte des informations personnelles, effectue des calculs (IMC, année de naissance) et génère un rapport professionnel formaté.
Collecte : prénom, nom, âge, taille, poids, ville
Calculs : IMC, année naissance, taille en m
Génération : initiales, email, username
Catégorie IMC avec émoji selon résultat
Rapport formaté avec f-strings
Bonus : jours vécus, conversion pouces/livres
👁️
Voir la solution complète›
mini_projet_jour1.py
# ============================================
# MINI-PROJET JOUR 1 : PROFIL PERSONNEL
# Club DIAM - Bootcamp Python
# ============================================
print("=" * 60)
print(" " * 15 + "CALCULATRICE DE PROFIL DIAM")
print("=" * 60)

prenom    = input("Prénom : ").strip().capitalize()
nom       = input("Nom : ").strip().upper()
age       = int(input("Âge : "))
taille_cm = float(input("Taille (cm) : "))
poids     = float(input("Poids (kg) : "))
ville     = input("Ville : ").strip().title()

annee_naissance = 2025 - age
taille_m        = taille_cm / 100
imc             = poids / (taille_m ** 2)
initiales       = f"{prenom[0]}.{nom[0]}."
email           = f"{prenom.lower()}.{nom.lower()}@diam.ga"

if imc < 18.5:   cat = "Insuffisance pondérale ⚠️"
elif imc < 25:   cat = "Poids normal ✅"
elif imc < 30:   cat = "Surpoids ⚠️"
else:            cat = "Obésité 🔴"

print(f"\n{'='*60}")
print(f"{'NOM COMPLET':<25} : {prenom} {nom}")
print(f"{'INITIALES':<25} : {initiales}")
print(f"{'ÂGE':<25} : {age} ans ({annee_naissance})")
print(f"{'IMC':<25} : {imc:.1f} — {cat}")
print(f"{'EMAIL':<25} : {email}")
print(f"{'='*60}")
Soir 1.13Convertisseur Multi-Unités›

Demandez distance en km, température en °C, poids en kg → Convertissez en miles, °F et livres. (Miles=km×0.621, F=C×9/5+32, Livres=kg×2.205)

Soir 1.14Calculateur de Facture›

Prix HT + quantité + TVA 18% → Affichez une facture formatée avec sous-total, TVA et total TTC.

Soir 1.15Générateur de Carte de Visite ASCII›

Nom, profession, téléphone, email → Générez une carte de visite encadrée avec ╔ ║ ╚.

02

Structures de Contrôle

if/elif/else · Opérateurs logiques · Boucles while · for · break/continue

Fondamental3 Parties20 Exercices
✓Utiliser les conditions (if, elif, else)
✓Maîtriser les opérateurs de comparaison et logiques
✓Créer des boucles while
✓Créer des boucles for avec range()
✓Utiliser break et continue
✓Écrire des patterns (triangles, FizzBuzz)
Partie 1

Conditions — IF / ELIF / ELSE

🔀
Cours — Prendre des Décisions›
conditions.py
note = 15
if note >= 16:    print("Très Bien")
elif note >= 14: print("Bien")
elif note >= 12: print("Assez Bien")
elif note >= 10: print("Passable")
else:           print("Insuffisant")

# Opérateurs logiques : and, or, not
age, permis = 20, True
if age >= 18 and permis:
    print("✓ Vous pouvez conduire")
Exercice 2.1Vérificateur de Majorité›

Âge invalide / mineur (+ années restantes) / majeur — 3 cas différents.

Exercice 2.2Calculateur de Mention›

Note /20 → mention correspondante avec validation (0-20).

Exercice 2.4Calcul de Réduction›

≥100000 → 20% / ≥50000 → 15% / ≥20000 → 10% / sinon 0%. Affichez montant initial, réduction, total final.

Exercice 2.5Année Bissextile›

Règle : divisible par 4 MAIS pas par 100, SAUF si divisible par 400. Utilisez %.

Exercice 2.7Pierre-Feuille-Ciseaux›

Utilisez random.choice() pour l'ordinateur. Déterminez le gagnant avec if/elif/else.

Partie 2

Boucles WHILE

🔄
Cours — Répéter Tant Que... + break/continue›
while.py
# Boucle infinie + break
while True:
    rep = input("Continuer ? (o/n) : ")
    if rep.lower() == 'n':
        break
    print("On continue !")

# Continue : sauter à l'itération suivante
n = 0
while n < 10:
    n += 1
    if n % 2 == 0:
        continue      # Saute les pairs
    print(n)          # 1,3,5,7,9
Exercice 2.9Validation d'Âge›

Redemandez un âge valide (0-120) tant que l'entrée est invalide. Utilisez isdigit().

Exercice 2.10Jeu de Devinette›

L'ordi choisit entre 1 et 100. Donnez des indices "Plus grand / Plus petit" et comptez les tentatives.

Exercice 2.12Menu Interactif›

4 options : afficher message / calculer carré / compter jusqu'à 10 / quitter. Boucle infinie + break.

Partie 3

Boucles FOR & range()

🔁
Cours — Itérer sur une Séquence›
for_range.py
for i in range(5):          # 0,1,2,3,4
    print(i)

for i in range(1, 6):       # 1,2,3,4,5
    print(i)

for i in range(0, 10, 2):   # 0,2,4,6,8
    print(i)

for i in range(10, 0, -1):  # 10,9,...,1
    print(i)

for lettre in "DIAM":        # D I A M
    print(lettre)
Exercice 2.13Table de Multiplication›

Demandez un nombre → affichez sa table de 1 à 10, formatée proprement.

Exercice 2.15Factorielle›

Calculez N! avec une boucle for. Ex: 5! = 5×4×3×2×1 = 120.

Exercice 2.19Sapin de Noël›
sapin.py
h = int(input("Hauteur : "))
for i in range(1, h + 1):
    print(" " * (h - i) + "*" * (2 * i - 1))
# Sortie pour h=5 :
#     *
#    ***
#   *****
#  *******
# *********
Exercice 2.20FizzBuzz Classique›

1 à 100 : divisible par 3 ET 5 → FizzBuzz / par 3 → Fizz / par 5 → Buzz / sinon le nombre.

🚀 Mini-Projet · Jour 2
Jeu du Pendu Complet
Jeu du pendu complet avec liste de 16 mots, dessin ASCII du pendu (7 états), 6 tentatives, validation des entrées et score victoires/défaites.
Liste de 16 mots thématiques DIAM
Dessin ASCII évolutif (7 états)
Affichage du mot avec _
Validation : 1 lettre, pas de répétition
Score victoires / défaites
Option de rejouer
03

Fonctions

def · Paramètres · return · Scope · Lambda · *args/**kwargs · Docstrings

Architecture5 Parties14 Exercices
✓Définir des fonctions avec def
✓Utiliser des paramètres et arguments
✓Retourner des valeurs avec return
✓Comprendre la portée des variables
✓Utiliser des valeurs par défaut
✓Créer des fonctions lambda
✓Documenter avec docstrings
Partie 1

Bases des Fonctions

⚙️
Cours — Définir et Appeler une Fonction›
💡
Une fonction = un bloc de code réutilisable. Avantages : éviter la répétition, code plus lisible, maintenance facile.
fonctions.py
# Fonction simple
def dire_bonjour():
    print("Bonjour du club DIAM !")

dire_bonjour()

# Avec paramètre + return
def calculer_carre(nombre):
    """Retourne le carré d'un nombre."""
    return nombre ** 2

print(calculer_carre(5))    # 25

# *args : nombre variable d'arguments
def calculer_somme(*nombres):
    return sum(nombres)

print(calculer_somme(1, 2, 3))         # 6
print(calculer_somme(10, 20, 30, 40))  # 100

# Valeur par défaut
def saluer(nom, message="Bonjour"):
    print(f"{message} {nom} !")

saluer("Alice")             # Bonjour Alice !
saluer("Bob", "Bonsoir")    # Bonsoir Bob !
Exercice 3.3Calculatrice Modulaire›

4 fonctions : additionner, soustraire, multiplier, diviser. La division gère le cas /0.

Exercice 3.6Calculateur de Moyenne›

calculer_moyenne(*notes) — accepte n'importe combien de notes, gère le cas vide.

Exercice 3.12Validateur de Mot de Passe›

Vérifiez : ≥8 chars, ≥1 majuscule, ≥1 minuscule, ≥1 chiffre. Retourne True/False.

Exercice 3.13Générateur de Fibonacci›

fibonacci(n) → retourne les n premiers termes. Ex: fibonacci(10) → [0,1,1,2,3,5,8,13,21,34].

Partie 2

Lambda, map() et filter()

λ
Cours — Fonctions Anonymes›
lambda.py
carre    = lambda x: x ** 2
addition = lambda a, b: a + b
print(carre(5))         # 25

nombres = [1, 2, 3, 4, 5]
carres  = list(map(lambda x: x**2, nombres))
print(carres)            # [1, 4, 9, 16, 25]

pairs   = list(filter(lambda x: x%2==0, nombres))
print(pairs)             # [2, 4]
🚀 Mini-Projet · Jour 3
Gestionnaire de Notes
Système complet de gestion de notes avec fonctions modulaires : ajouter, calculer moyenne/médiane/min/max, déterminer mention, menu interactif.
ajouter_note() avec validation 0-20
calculer_moyenne() et calculer_mediane()
trouver_min_max()
determiner_mention()
supprimer_note() par index
Menu interactif 7 options
04

Listes & Tuples

Listes · Méthodes · Slicing · List Comprehensions · Matrices 2D · Tuples

Structures de données6 Parties13 Exercices
✓Créer et manipuler des listes
✓Utiliser les méthodes de listes
✓Maîtriser l'indexation et le slicing
✓Utiliser les list comprehensions
✓Comprendre et utiliser les tuples
✓Travailler avec des matrices 2D
Partie 1

Listes — Bases & Méthodes

📋
Cours — Création, Accès, Modification›
listes.py
fruits = ["pomme", "banane", "orange"]

fruits.append("kiwi")        # Ajouter à la fin
fruits.insert(1, "mangue")   # Insérer à l'index 1
fruits.remove("banane")     # Supprimer par valeur
dernier = fruits.pop()      # Supprimer + retourner le dernier

fruits.sort()               # Tri croissant
print(len(fruits))           # Longueur
print("pomme" in fruits)    # True/False
print(sum([1,2,3]))          # 6
print(max([10,5,8]))         # 10
Exercice 4.1Gestion de Courses›

Liste de 5 articles → insérez "Lait" en position 1 → supprimez le 3ème → vérifiez si "Eau" est dedans.

Exercice 4.2Manipulation de Nombres›

Liste [12, 5, 23, 7, 15, 8, 30, 4] → triez, trouvez max/min, calculez somme et moyenne.

Partie 2

Slicing & List Comprehensions

✂️
Cours — Slicing [début:fin:pas] & Comprehensions›
slicing.py
n = [0,1,2,3,4,5,6,7,8,9]
print(n[2:7])    # [2, 3, 4, 5, 6]
print(n[:5])     # [0, 1, 2, 3, 4]
print(n[::2])    # [0, 2, 4, 6, 8]
print(n[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(n[-3:])    # [7, 8, 9]

# List Comprehension
carres = [x**2 for x in range(5)]           # [0,1,4,9,16]
pairs  = [x for x in range(10) if x%2==0]  # [0,2,4,6,8]
majusc = [m.upper() for m in ["diam", "ia"]] # ['DIAM','IA']
Exercice 4.7List Comprehensions Practice›

Créez : carrés de 0-9 / multiples de 3 jusqu'à 30 / conversion ["1","2","3"] en [1,2,3] / liste de booléens (>5).

Partie 3

Tuples & Unpacking

🔒
Cours — Collections Immuables & Unpacking›
ℹ️
Tuple vs Liste : Tuple pour données constantes (coordonnées, retours multiples). Liste pour données qui changent.
tuples.py
# Unpacking
coord = (10, 20)
x, y  = coord

person = ("Alice", 25, "Libreville")
nom, age, ville = person

# Extended unpacking
premier, *milieu, dernier = (1, 2, 3, 4, 5)

# Échange pythonique (sans variable temp)
a, b = 5, 10
a, b = b, a   # Magie Python !
print(a, b)    # 10 5
Exercice 4.9Retours Multiples›

calculer_stats_liste(nombres) → retourne (min, max, somme, moyenne) sous forme de tuple.

🚀 Mini-Projet · Jour 4
Gestionnaire de Tâches (To-Do List)
Application complète de gestion de tâches avec ajout, affichage, complétion, suppression, filtrage par priorité, tri et statistiques.
Structure : [description, priorité, terminée]
Filtrage Haute / Moyenne / Basse priorité
Tri par priorité ou statut
Statistiques : total, terminées, taux %
Affichage formaté en tableau
Menu interactif 8 options
05

Dictionnaires & Sets

Paires clé-valeur · Méthodes · Dicts imbriqués · Dict Comprehensions · Ensembles

Structures avancées6 Parties9 Exercices
✓Créer et manipuler des dictionnaires
✓Accéder, ajouter, modifier, supprimer
✓Parcourir avec .keys() .values() .items()
✓Dictionnaires imbriqués
✓Dictionary comprehensions
✓Sets et opérations ensemblistes
Partie 1

Dictionnaires — Bases & Méthodes

📚
Cours — Paires Clé-Valeur & Dict Comprehensions›
dictionnaires.py
etudiant = {
    "nom"    : "Dupont",
    "age"    : 22,
    "notes"  : [15, 18, 16]
}

print(etudiant["nom"])
print(etudiant.get("email", "N/A"))  # N/A (pas d'erreur)

# Parcourir les paires
for cle, val in etudiant.items():
    print(f"{cle} : {val}")

# Dict comprehension
carres = {x: x**2 for x in range(6)}
# {0:0, 1:1, 2:4, 3:9, 4:16, 5:25}

# Filtrer avec comprehension
notes = {"Alice":15, "Bob":8, "Charlie":18}
admis = {n: note for n, note in notes.items() if note >= 10}
Exercice 5.3Compteur de Mots›

Comptez les occurrences de chaque mot dans une phrase. Utilisez dict.get(mot, 0) + 1.

Partie 2

Sets — Ensembles

⚡
Cours — Opérations Ensemblistes›
sets.py
A = {1,2,3,4,5}
B = {4,5,6,7,8}

print(A | B)  # Union     → {1,2,3,4,5,6,7,8}
print(A & B)  # Intersection → {4, 5}
print(A - B)  # Différence → {1, 2, 3}
print(A ^ B)  # Diff. symétrique → {1,2,3,6,7,8}

# Dédoublonnage automatique
liste  = [1,2,2,3,1]
unique = list(set(liste))  # [1, 2, 3]
Exercice 5.8Opérations Ensemblistes›

Deux groupes d'étudiants → Union, intersection, uniquement dans groupe A, dans un seul groupe.

Exercice 5.9Dédoublonnage avec Ordre Préservé›

Créez dedoublonner(liste) qui enlève les doublons EN PRÉSERVANT l'ordre d'apparition.

🚀 Mini-Projet · Jour 5
Carnet d'Adresses Avancé
Carnet complet avec contacts stockés dans un dictionnaire imbriqué (nom → {téléphone, email, ville, tags}), recherche par ville/tag, statistiques et export texte.
Structure : dict de dicts imbriqués
Tags stockés en set
Recherche par ville / par tag
Statistiques par ville et tags
Export vers fichier .txt
Menu interactif 10 options
06

Fichiers & Exceptions

Lecture/Écriture · CSV · JSON · try/except · Chemins · Persistance

Persistance5 Parties10 Exercices
✓Lire et écrire des fichiers texte
✓Manipuler des fichiers CSV
✓Utiliser le context manager (with)
✓Gérer les exceptions avec try/except
✓Manipuler JSON
✓Utiliser pathlib pour les chemins
Partie 1

Fichiers Texte

📄
Cours — Lecture & Écriture avec Context Manager›
💡
Toujours utiliser with open(...) — le fichier est fermé automatiquement même en cas d'erreur.
fichiers.py
# Écrire dans un fichier
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("Première ligne\n")
    f.write("Deuxième ligne\n")

# Lire tout le contenu
with open("output.txt", "r", encoding="utf-8") as f:
    contenu = f.read()
    print(contenu)

# Lire ligne par ligne
with open("output.txt", "r", encoding="utf-8") as f:
    for ligne in f:
        print(ligne.strip())  # strip() enlève le \n

# Ajouter à la fin (append)
with open("output.txt", "a", encoding="utf-8") as f:
    f.write("Ligne ajoutée\n")

# Modes : "r" lecture, "w" écriture (écrase), "a" ajout
Exercice 6.1Créer un Journal (Diary)›

Ajoutez des entrées datées à un fichier journal.txt (mode "a") et lisez-le entier (mode "r").

Exercice 6.2Compteur de Mots dans un Fichier›

Fonction qui retourne un dict {lignes, mots, caracteres} d'un fichier donné.

Partie 2

Fichiers CSV

📊
Cours — Module csv›
csv_exemple.py
import csv

# Écrire un CSV
with open("etudiants.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["Nom", "Âge", "Ville"])
    writer.writerow(["Alice", 25, "Libreville"])

# Lire avec DictReader (plus pratique)
with open("etudiants.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for ligne in reader:
        print(f"{ligne['Nom']} a {ligne['Âge']} ans")
Exercice 6.4Gestionnaire de Notes CSV›

Fonctions : ajouter_note_csv(nom, matiere, note), lire_notes_csv(), calculer_moyenne_etudiant(nom).

Partie 3

Fichiers JSON

🗄️
Cours — Module json›
json_exemple.py
import json

donnees = {"nom": "Alice", "age": 25, "notes": [15, 18]}

# Écrire JSON
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(donnees, f, indent=4, ensure_ascii=False)

# Lire JSON
with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)
    print(data["nom"])  # Alice
Exercice 6.5Base de Données JSON Persistante›

Fonctions : charger_base(), sauvegarder_base(), ajouter_personne(), rechercher_personne().

Partie 4

Gestion des Exceptions

🛡️
Cours — try / except / else / finally›
exceptions.py
try:
    nombre = int(input("Entrez un nombre : "))
    resultat = 10 / nombre
except ValueError:
    print("❌ Entrez un nombre valide")
except ZeroDivisionError:
    print("❌ Division par zéro impossible")
else:
    print(f"Résultat : {resultat}")  # Si aucune erreur
finally:
    print("Nettoyage effectué")  # Toujours exécuté

# Lever une exception
def verifier_age(age):
    if age < 0:
        raise ValueError("L'âge ne peut pas être négatif")
Exercice 6.6Calculatrice Sécurisée›

Calculatrice avec gestion complète : ValueError (mauvaise saisie), ZeroDivisionError, opération invalide, clause else et finally.

Exercice 6.7Lecture Sécurisée de Fichier›

Gérez : FileNotFoundError, PermissionError, UnicodeDecodeError, fichier vide — avec messages différents pour chaque cas.

Partie 5

Chemins avec pathlib

📁
Cours — Module pathlib (approche moderne)›
pathlib.py
from pathlib import Path

print(Path.cwd())              # Répertoire actuel

fichier = Path("data") / "notes.txt"
print(fichier.exists())        # True/False
print(fichier.is_file())       # True/False

# Créer un dossier
Path("mon_dossier").mkdir(exist_ok=True)

# Lire/Écrire directement
Path("test.txt").write_text("Contenu", encoding="utf-8")
contenu = Path("test.txt").read_text(encoding="utf-8")

# Lister les .txt du répertoire
for f in Path(".").rglob("*.txt"):
    print(f.name)
🚀 Mini-Projet · Jour 6
Gestionnaire de Contacts Persistant
Système complet de gestion de contacts avec sauvegarde JSON automatique, validation email/téléphone par regex, import/export CSV et backup horodaté.
Stockage persistant en JSON
Validation email et téléphone (regex)
Export CSV et import CSV
Backup horodaté automatique
Gestion complète des erreurs
Menu 10 options
Soir 6.8Analyseur de Log›

Analysez un fichier de log : nb total lignes, nb erreurs (contenant "ERROR"), nb avertissements ("WARNING"), liste des erreurs uniques.

Soir 6.9Fusion de Fichiers›

fusionner_fichiers(fichiers, sortie) — Fusionnez plusieurs fichiers texte en un seul avec gestion des erreurs.

07

Programmation Orientée Objet

Classes · Objets · __init__ · Héritage · Encapsulation · Polymorphisme · Méthodes spéciales

Architecture avancée5 Parties8 Exercices
✓Créer des classes et des objets
✓Utiliser __init__ et self
✓Implémenter l'encapsulation
✓Utiliser l'héritage avec super()
✓Comprendre le polymorphisme
✓Utiliser les méthodes spéciales (__str__, __eq__)
Partie 1

Bases des Classes

🏗️
Cours — Classe, Objet, Attributs, Méthodes›
💡
POO : Classe = plan. Objet = instance du plan. Attribut = variable de l'objet. Méthode = fonction de l'objet.
classes.py
class Personne:
    """Représente une personne."""

    def __init__(self, nom, age):
        self.nom = nom   # Attribut d'instance
        self.age = age

    def se_presenter(self):
        print(f"Je m'appelle {self.nom}, j'ai {self.age} ans")

    def __str__(self):
        return f"Personne('{self.nom}', {self.age})"

# Création d'instances
p1 = Personne("Alice", 25)
p2 = Personne("Bob", 30)

p1.se_presenter()  # Je m'appelle Alice, j'ai 25 ans
print(p1)          # Appelle __str__
Exercice 7.1Classe Voiture›

Créez Voiture(marque, modele, annee) avec afficher_info() et calculer_age().

Exercice 7.2Classe Rectangle›

Méthodes : calculer_aire(), calculer_perimetre(), est_carre().

Exercice 7.3Classe Etudiant avec Compteur›

Attribut de classe nombre_etudiants. Méthodes ajouter_note(), calculer_moyenne(), @classmethod pour afficher le total.

Partie 2

Encapsulation & Properties

🔐
Cours — Public, Protected, Private & @property›
encapsulation.py
class CompteBancaire:
    def __init__(self, titulaire, solde=0):
        self.titulaire = titulaire   # Public
        self._solde    = solde       # Protected

    @property
    def solde(self):           # Getter
        return self._solde

    @solde.setter
    def solde(self, valeur):    # Setter avec validation
        if valeur >= 0:
            self._solde = valeur
        else:
            raise ValueError("Solde ne peut pas être négatif")

    def deposer(self, montant):
        if montant > 0:
            self._solde += montant
            print(f"✓ {montant} FCFA déposés")
Exercice 7.5Classe Produit avec Stock›

@property pour prix (doit être positif) et stock. Méthodes ajouter_stock() et vendre(quantite).

Partie 3

Héritage & Polymorphisme

🧬
Cours — Classes Mères et Filles, super()›
heritage.py
class Animal:
    def __init__(self, nom, age):
        self.nom = nom
        self.age = age
    def faire_bruit(self):
        print("...")

class Chien(Animal):    # Héritage
    def __init__(self, nom, age, race):
        super().__init__(nom, age)  # Appel parent
        self.race = race
    def faire_bruit(self):         # Override
        print(f"{self.nom} : Wouf !")

# Polymorphisme
animaux = [Chien("Rex", 3, "Berger"), Animal("Chat", 2)]
for a in animaux:
    a.faire_bruit()   # Comportement différent selon la classe
Exercice 7.6Hiérarchie de Véhicules›

Classe Vehicule → Voiture(nb_portes) et Moto(cylindree). Chaque classe redéfinit demarrer().

Exercice 7.7Classe Fraction›

Fraction avec __str__, __add__, __mul__ et simplification automatique par PGCD.

🚀 Mini-Projet · Jour 7
Système de Gestion Bibliothèque (POO)
3 classes : Livre, Membre, Bibliotheque. Emprunts (max 3/membre), retours, recherche, statistiques.
Classe Livre avec statut disponible
Classe Membre avec ID auto-incrémenté
Classe Bibliotheque comme gestionnaire
Emprunts limités à 3 livres/membre
Recherche par titre ou auteur
Statistiques complètes
08

Modules & NumPy

Modules standards · Créer ses modules · pip · NumPy arrays · Opérations vectorielles · Indexation

Data Science6 Parties6 Exercices
✓Importer et utiliser des modules
✓Créer ses propres modules
✓Utiliser pip pour installer des bibliothèques
✓Découvrir NumPy et les ndarrays
✓Opérations vectorielles et broadcasting
✓Indexation booléenne avancée
Partie 1

Modules Python

📦
Cours — Import, Modules Standards & Créer ses Modules›
modules.py
# Importations
import math
import math as m
from math import sqrt, pi
from datetime import datetime, timedelta
import random

print(math.pi)                       # 3.14159...
print(sqrt(25))                      # 5.0

maintenant = datetime.now()
print(maintenant.strftime("%d/%m/%Y"))

print(random.randint(1, 100))        # Entier aléatoire
print(random.choice(["A", "B", "C"])) # Choix aléatoire

# Créer son module : sauvegarder dans utilitaires.py
# Puis l'utiliser : import utilitaires
# Le bloc if __name__ == "__main__": évite l'exécution à l'import
Exercice 8.1Module de Calculs Personnalisé›

Créez calculs.py avec : factorielle(n), pgcd(a, b), est_premier(n), fibonacci(n). Importez-le dans votre programme.

Partie 2

NumPy — Fondations

🔢
Cours — Arrays, Création, Opérations Vectorielles›
ℹ️
NumPy = Numerical Python. Bibliothèque fondamentale du calcul scientifique. Base de Pandas, Matplotlib, Scikit-learn.
numpy_bases.py
import numpy as np

# Créer des arrays
arr     = np.array([1, 2, 3, 4, 5])
zeros   = np.zeros((3, 4))       # Matrice 3x4 de zéros
plage   = np.arange(0, 10, 2)    # [0, 2, 4, 6, 8]
linesp  = np.linspace(0, 1, 5)   # [0., 0.25, 0.5, 0.75, 1.]
aleat   = np.random.randint(1, 101, 20)

# Opérations vectorielles (sans boucle !)
print(arr + 10)     # [11 12 13 14 15]
print(arr * 2)      # [2  4  6  8  10]
print(arr ** 2)     # [1  4  9  16  25]

# Statistiques
print(np.mean(arr))     # 3.0
print(np.std(arr))      # Écart-type
print(np.median(arr))  # 3.0

# Indexation booléenne
print(arr[arr > 3])    # [4 5]
arr[arr > 3] = 0        # Modifier en place
Exercice 8.3Statistiques avec NumPy›

Générez 100 notes aléatoires entre 0 et 20 → calculez : moyenne, médiane, écart-type, min, max, nb de notes ≥ 10.

Exercice 8.6Simulation Monte Carlo — Estimer π›
monte_carlo.py
import numpy as np

def estimer_pi(n=100000):
    x = np.random.rand(n)
    y = np.random.rand(n)
    dans_cercle = (x**2 + y**2) < 1
    return 4 * np.sum(dans_cercle) / n

for n in [1000, 10000, 100000, 1000000]:
    pi    = estimer_pi(n)
    erreur = abs(pi - np.pi)
    print(f"n={n:7d} : π ≈ {pi:.6f} (erreur: {erreur:.6f})")
🚀 Mini-Projet · Jour 8
Analyseur de Données Numériques (NumPy)
Classe AnalyseurDonnees avec statistiques descriptives, détection d'anomalies (z-score et IQR), analyse de distribution et tendance (régression linéaire).
Statistiques : mean, std, median, Q1, Q3, IQR
Détection anomalies (z-score seuil 3)
Détection outliers (méthode IQR)
Tendance par régression linéaire
3 jeux de données : températures / notes / ventes
Rapport complet automatique
09

Pandas & Analyse de Données

Series · DataFrames · Filtrage · Groupby · Valeurs manquantes · Lecture CSV/Excel · Visualisation

Data Science6 Parties4 Exercices
✓Créer et manipuler des Series et DataFrames
✓Sélectionner et filtrer avec loc / iloc
✓Utiliser groupby et agrégations
✓Traiter les valeurs manquantes (NaN)
✓Lire et écrire CSV / Excel / JSON
✓Appliquer des fonctions avec apply()
Partie 1

Introduction à Pandas

🐼
Cours — Series, DataFrame, Informations de base›
💡
Pandas = LA bibliothèque pour la manipulation de données. Series = colonne, DataFrame = table Excel.
pandas_bases.py
import pandas as pd
import numpy as np

# Créer un DataFrame
data = {
    'nom'    : ['Alice', 'Bob', 'Charlie'],
    'age'    : [25, 30, 22],
    'salaire': [500000, 750000, 450000]
}
df = pd.DataFrame(data)

print(df.info())        # Infos générales
print(df.describe())   # Statistiques
print(df.head(2))       # 2 premières lignes
print(df.shape)         # (3, 3)

# Sélection
print(df['nom'])           # Colonne
print(df.loc[0, 'nom'])    # Cellule par label
print(df.iloc[0, 1])        # Cellule par position

# Filtrage
print(df[df['age'] > 25])  # Lignes où age > 25
print(df[df['salaire'].isin([500000, 750000])])
Exercice 9.1Créer et Explorer un DataFrame›

5 étudiants avec : nom, age, ville, note_maths, note_physique → affichez infos, describe, villes uniques, répartition par ville.

Exercice 9.2Filtrage de Données›

Étudiants avec >15 en maths / >15 en maths ET physique / moyenne ≥ 15 / meilleur en informatique.

Partie 2

Manipulation, Groupby & Valeurs Manquantes

🔧
Cours — Ajouter/Modifier colonnes, Groupby, NaN›
manipulation.py
# Ajouter des colonnes calculées
df['age_dans_5_ans'] = df['age'] + 5
df['categorie']    = df['salaire'].apply(
    lambda s: 'Senior' if s > 600000 else 'Junior'
)

# Groupby
print(df.groupby('ville')['salaire'].mean())
print(df.groupby('ville').agg({
    'salaire': ['mean', 'sum', 'count'],
    'age': 'mean'
}))

# Valeurs manquantes
print(df.isnull().sum())          # Nb de NaN par colonne
df['age'] = df['age'].fillna(df['age'].mean())
df = df.dropna()                  # Supprimer lignes avec NaN

# Lire / Écrire fichiers
df = pd.read_csv('donnees.csv', encoding='utf-8')
df.to_csv('sortie.csv', index=False)
df.to_json('sortie.json', orient='records', indent=2)
Exercice 9.4Analyse de Ventes par Groupby›

DataFrame ventes → total par produit / total par ville / quantité moyenne par produit / produit le plus vendu.

🚀 Mini-Projet · Jour 9
Analyseur de Données Éducatives
Classe AnalyseurEducation : génère 100 étudiants, nettoie les données, calcule moyennes/mentions, statistiques par ville, filtrage personnalisé et export CSV/Excel/JSON.
Génération de 100 étudiants fictifs
Nettoyage : doublons + NaN (fillna avec moyenne)
Calcul moyenne et mention par étudiant
Statistiques par ville (groupby)
Top N étudiants (nlargest)
Export CSV / Excel / JSON
🏆

Projet Final Intégrateur

Intégrer toutes les compétences · Application complète · Documentation · Présentation

Tous les acquis 3 Options Graduation DIAM
✓Intégrer toutes les compétences acquises
✓Créer une application complète de bout en bout
✓Documenter et commenter son code
✓Pousser son projet sur GitHub
✓Créer un README.md professionnel
✓Présenter son travail (Demo Day)
🎓 Option A
Système de Gestion Scolaire
Application complète : étudiants (POO), notes (Pandas), statistiques (NumPy), persistance (JSON), export (CSV/Excel).
Classes Etudiant et Ecole
Notes par matière, moyennes, mentions
Statistiques par classe
Bulletins formatés
Persistance JSON auto-sauvegarde
Export CSV et Excel
💰 Option B
Analyseur Budget Personnel
Enregistrement de transactions, catégorisation, analyse temporelle, alertes budget dépassé, rapports mensuels/annuels.
Catégories : alimentation, transport...
Analyse par période (Pandas)
Visualisation ASCII (barres)
Alertes budget dépassé
Rapports mensuels
Export CSV
📚 Option C
Bibliothèque Avancée
Extension du projet Jour 7 avec persistance JSON, historique d'emprunts, statistiques Pandas, amendes pour retards, export rapports.
Persistance complète en JSON
Historique des emprunts
Statistiques : livres les + empruntés
Calcul amendes (retards)
Recommandations (livres similaires)
Export rapports
🎉 Félicitations — 10 Jours Complétés !

Compétences Acquises

✅ Fondamentaux Python
✅ Structures de données
✅ Fonctions & POO
✅ Fichiers & Exceptions
✅ NumPy & Pandas
✅ Projet Data Science complet
Prochaines Étapes
→ Approfondir NumPy/Pandas
→ Apprendre Matplotlib/Seaborn
→ Découvrir Scikit-learn (ML)
→ Construire votre portfolio GitHub
→ Contribuer à des projets open-source
→ Rejoindre l'Élite D.I.A.M 🔥
🏆 Graduation D.I.A.M
Conditions pour obtenir votre Certification
Portfolio GitHub avec au moins 6 projets déployés
README.md professionnel pour chaque projet
Présentation publique de 10 min devant le jury
Code propre, commenté et documenté
Démonstration en live du projet final
Répondre aux questions du jury
"Pas de diplôme classique. Un portfolio GitHub + 6 projets déployés + une présentation publique. C'est ça, la vraie compétence."