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)

Contexte
Dans une ligne droite de 400 mètres (épreuve classique de drag race), tu chronomètres ta voiture et veux connaître sa vitesse moyenne. L’objectif est simple : si tu dépasses 180 km/h, tu obtiens le titre de Street Rocket.

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 ?

Contexte
Tu participes à une course de 50 km. Ta voiture consomme 8 L / 100 km. À toi d’écrire une fonction qui détermine si tu peux terminer la course avec ton niveau de carburant actuel.

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

Contexte
Tu testes une voiture de drift sur circuit. On te donne une liste de temps au tour. Tu dois identifier :
  • 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

Contexte
La voiture est équipée d’un système de nitro. Son effet dépend de la vitesse actuelle :
  • vitesse < 100 → +40 km/h
  • 100 ≤ vitesse < 180 → +25 km/h
  • vitesse ≥ 180 → +10 km/h
À toi d’écrire une fonction qui renvoie la nouvelle vitesse.

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

Contexte
Avant le départ d’une course de rue, on affiche un compte à rebours : 3… 2… 1… GO !!! Utilise une boucle 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.

Contexte

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 :

Règle
  • 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 :

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

Cas pratique
Trouver les pilotes : risque élevé AND temps < 60 AND vitesse ≥ 190.
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

Défis supplémentaires
  • 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