Fast & Furious – Exercices Python (mécanique & voitures)
Dans cet atelier Python inspiré de l’univers Fast & Furious, tu vas manipuler les bases du langage pour résoudre des problèmes liés à la mécanique automobile : calculs de vitesse, autonomie d’un véhicule, analyse de performances ou encore système de nitro.
Ces exercices utilisent uniquement les fondements de Python : variables, conditions, boucles, fonctions et listes.
Objectifs pédagogiques
- Manipuler des variables pour stocker des valeurs numériques ou textuelles.
- Utiliser des conditions pour prendre des décisions dans un programme.
- Écrire des boucles pour répéter une action.
- Construire des fonctions simples pour structurer le code.
- Créer et parcourir des listes pour manipuler plusieurs données.
Exercice 1 — Calculer la vitesse d’un bolide (drag race)
Exemple à compléter
distance_m = 400 # distance fixe # TODO : demander le temps en secondes # temps_s = ... # TODO : calculer la vitesse (km/h) # v_ms = ... # v_kmh = ... # TODO : afficher la vitesse # TODO : afficher "Street Rocket" si v_kmh >= 180
Exercice 2 — Peut-on finir la course ?
Fonction à compléter
def peut_finir_course(carburant_litres, distance_km, conso_l_100):
# TODO : calculer carburant nécessaire
# TODO : retourner True ou False
pass
distance = 50
conso = 8
# TODO : demander le carburant disponible
# TODO : appeler la fonction et afficher un message adapté
Exercice 3 — Analyse de temps au tour
- le meilleur tour,
- le pire tour,
- le nombre de tours en dessous de 60 s.
Exemple à compléter
temps_tours = [62.4, 59.8, 61.2, 58.9, 60.5] # TODO : initialiser best, worst, count_fast # TODO : boucle for pour analyser la liste # TODO : affichages finaux
Exercice 4 — Nitro Boost
- vitesse < 100 → +40 km/h
- 100 ≤ vitesse < 180 → +25 km/h
- vitesse ≥ 180 → +10 km/h
Fonction à compléter
def appliquer_nitro(vitesse):
# TODO : conditions selon la vitesse
# TODO : retourner la nouvelle vitesse
pass
print(appliquer_nitro(80)) # attendu : 120
print(appliquer_nitro(130)) # attendu : 155
print(appliquer_nitro(200)) # attendu : 210
Exercice 5 — Compte à rebours Fast & Furious
while pour le reproduire.Exemple à compléter
print("DEPART DANS :")
# TODO : initialiser compteur à 3
# TODO : boucle while pour afficher 3, 2, 1
# TODO : afficher "GO !!!" à la fin
Pour aller plus loin
FastLab Engineering : Analyse complète d’une Team de Street Racers
Bienvenue dans FastLab Engineering, un laboratoire clandestin d’analyse de performances automobiles. Ton rôle : mettre au point un programme Python capable d’analyser en profondeur l’équipe de pilotes de Dom. Cette fois, tu vas aller plus loin : filtrage multi‐critères, statistiques, calculs avancés sur les listes… Bref : un exercice taillé pour les meilleurs ingénieurs de la team.
Tu dois gérer une équipe de pilotes, chacun avec :
- nom
- vitesse max (km/h)
- temps moyen au tour (s)
- indice d’agressivité (de 1 à 10)
À partir de ces données, tu devras :
- classifier les pilotes selon un risque avancé
- identifier les pilotes optimaux selon plusieurs critères
- produire des statistiques (moyenne, médiane, meilleur, pire)
- faire un classement global basé sur une formule métier
- filtrer selon plusieurs seuils à la fois
- normaliser certaines valeurs
Règles métier avancées
1. Niveau de risque avancé
Le risque dépend de deux facteurs :
- vitesse max
- indice d’agressivité
- Si vitesse ≥ 200 et agressivité ≥ 7 → Risque Élevé
- Si vitesse ≥ 180 ou agressivité ≥ 5 → Risque Moyen
- Sinon → Risque Faible
2. Score global de pilote (pour le classement)
À calculer :
$$ \mathrm{score} = \frac{\mathrm{vitesse}}{2} - \frac{\mathrm{temps_tour}}{4} + \mathrm{agressivite} $$
Plus le score est élevé, plus le pilote est performant.
3. Médiane
La médiane est définie comme :
- si nombre impair : valeur du milieu
- si nombre pair : moyenne des deux valeurs du milieu
Les étudiants devront l’implémenter manuellement (tri + calcul).
Programme à compléter
Fonction : calcul du risque avancé
def risque(vitesse, agressivite):
"""
Retourne 'faible', 'moyen' ou 'eleve'
selon les règles avancées.
"""
# TODO
pass
Fonction : score global du pilote
def score_global(vitesse, temps, agressivite):
"""
Calcule le score global selon la formule :
(vitesse / 2) - (temps / 4) + agressivité
"""
# TODO
pass
Fonction : calcul de la médiane (tri + boucle)
def mediane(valeurs):
"""
Retourne la médiane d'une liste de valeurs.
À implémenter sans sorted() si tu veux pousser : tri manuel.
"""
# TODO : faire une copie, trier avec une boucle
# TODO : calcul de la médiane (pair/impair)
pass
Ajouter un pilote
def ajouter(noms, vitesses, temps, agressivites, risques, scores):
"""
Ajoute un pilote complet :
- nom
- vitesse max
- temps au tour
- agressivité
+ calcule risque et score global
"""
# TODO
pass
Afficher l'équipe avec mise en forme
def afficher(noms, vitesses, temps, agressivites, risques, scores):
# TODO : boucle d'affichage + mise en forme
pass
Filtre multi‐critères
def filtrer_experts(noms, vitesses, temps, agressivites, risques, scores):
# TODO : boucle + conditions multiples
pass
Analyse globale (statistiques)
def analyse(noms, vitesses, temps, agressivites, risques, scores):
"""
Affiche :
- moyenne des vitesses
- médiane des vitesses
- pilote le plus rapide
- pilote avec le meilleur score
- nombre de pilotes à risque élevé
"""
# TODO : plusieurs boucles + appels à mediane
pass
Programme principal (menu avancé)
def menu():
print("\\n=== FASTLAB ENGINEERING ===")
print("1. Ajouter un pilote")
print("2. Voir l'équipe")
print("3. Analyse globale")
print("4. Filtrer les experts")
print("5. Quitter")
def main():
noms = []
vitesses = []
temps = []
agressivites = []
risques = []
scores = []
choix = ""
while choix != "5":
menu()
choix = input("Votre choix : ")
if choix == "1":
ajouter(noms, vitesses, temps, agressivites, risques, scores)
elif choix == "2":
afficher(noms, vitesses, temps, agressivites, risques, scores)
elif choix == "3":
analyse(noms, vitesses, temps, agressivites, risques, scores)
elif choix == "4":
filtrer_experts(noms, vitesses, temps, agressivites, risques, scores)
elif choix == "5":
print("Fin du programme. FastLab over.")
else:
print("Choix invalide.")
main()
Bonus
- Normaliser toutes les vitesses sur 0–1
- Refaire le classement global avec une boucle de tri maison
- Ajouter une fonction qui détecte un “pilote instable” (forte agressivité + score irrégulier)
- Ajouter un menu “Top 3” basé sur les scores globaux
