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 VehiculeVoiture(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."