Examen Final : Programmation Python & Analyse de
Données
Durée estimée : 2h00
L’examen évalue votre capacité à manipuler la logique Python, les structures de données, les
fonctions avancées et les bibliothèques scientifiques (NumPy, Pandas, Datetime).
Exercice 1 : Logique métier et Bases de Python (4 points)
Vous concevez le système de tarification d’une application de VTC (Voiture de Tourisme avec
Chauffeur). L’application demande au client :
• La distance de la course en km.
• Son statut : ”Standard”, ”Premium” ou ”VIP”.
• S’il y a une forte demande (booléen forted emande).
Les règles tarifaires sont les suivantes :
• Le tarif de base est de 5 DH par kilomètre.
• En cas de forted emande, letarif totalestmultipliépar1.5, sauf pourlesclients”V IP ”quinesubissentjamai
• Les clients ”Premium” bénéficient d’une réduction de 10% sur le tarif final.
• Les clients ”VIP” bénéficient d’une réduction de 20% sur le tarif final.
Questions :
1. Créez une fonction calculer tarif(distance, statut, forte demande).
2. Utilisez le principe des clauses de garde pour vérifier si la distance est ≤ 0 ; si oui, retournez
immédiatement 0 avec un message d’erreur.
3. Calculez le tarif final en respectant strictement les règles ci-dessus en utilisant des conditions
if/elif/else.
4. Utilisez un opérateur ternaire pour ajouter un pourboire automatique de 10 DH si la distance
est supérieure à 20 km, sinon 0 DH, et ajoutez-le au total.
1
Exercice 2 : Structures de Données (4 points)
Vous développez un système de recommandation de formations pour une plateforme d’e-learning.
Données initiales :
utilisateurs = [("Amina", 24, "Data"), ("Tarik", 30, "Dev"), ("Sara", 22, "Data")]
cours_dispos = {
"Python Avancé": {"Data", "Dev"},
"Machine Learning": {"Data"},
"ReactJS": {"Dev", "Design"}
}
historique_suivis = {
"Amina": ["Python Avancé"],
"Tarik": ["ReactJS"]
}
Questions :
1. Extraire les noms des utilisateurs dont la spécialité est ”Data” via une compréhension de
liste.
2. Ajouter ”Sara” dans historique suivis.
3. Mettre à jour l’historique de Sara.
4. Identifier les cours non suivis par Amina (utiliser les sets).
5. Théorie : Pourquoi utiliser un Set plutôt qu’une liste pour les spécialités ?
Exercice 3 : Fonctions Avancées et Flux temps réel (4
points)
Flux de logs :
flux = [(’INFO’, 200, ’[Link]’),
(’CRITIQUE’, 500, ’[Link]’),
(’WARN’, 404, ’[Link]’),
(’CRITIQUE’, 502, ’[Link]’)]
Questions :
1. Créer un générateur filtrer menaces(logs).
2. Créer un décorateur @audit log.
3. Implémenter traiter flux securite(logs).
2
Exercice 4 : Gestion du temps et des dates (3 points)
1. Convertir ”15/05/2026” avec [Link]().
2. Ajouter 45 jours avec timedelta.
3. Pourquoi ne pas utiliser months dans timedelta ?
Exercice 5 : Calcul Matriciel avec NumPy (2 points)
Données :
scores = [Link]([
[0.1, 0.8, 0.1],
[0.9, 0.05, 0.05],
[0.3, 0.3, 0.4],
[[Link], 0.5, 0.5]
])
classes = [Link](["Chat", "Chien", "Oiseau"])
Questions :
1. Remplacer NaN par 0 avec [Link] et [Link].
2. Trouver les classes avec [Link](axis=1).
3. Mapper les indices vers les noms de classes.
Exercice 6 : Pandas Data Cleaning (3 points)
DataFrame brut :
id_employe nom salaire departement date_embauche
1 "Amina S." "85000 €" " Finance " "2023-01-15"
2 "Said B." "not available" "IT" "15/04/2022"
3 "Karim T." "92000 €" "finance" NaN
4 "Amina S." "85000 €" "Finance" "2023-01-15"
Questions :
1. Supprimer les doublons.
2. Nettoyer la colonne departement.
3. Nettoyer salaire avec apply().
4. Remplacer les valeurs manquantes par la médiane.
5. Convertir datee mbaucheendatetime(f ormat =′ mixed′ ).