Aller au contenu

Dictionnaires : NBA

L'usage de la calculatrice n'est pas autorisé

L'utilisation des fonctions sum, max ou count est interdite.

Durée: 1h


Exercice 1 : Création d'une liste de joueurs (6 points)

On souhaite représenter les joueurs d'une équipe de basketball sous forme de dictionnaire. Chaque joueur est défini par :

  - son nom (chaîne de caractères),
  - son numéro (entier),
  - son poste (chaîne parmi : "meneur", "arrière", "ailier", "pivot", "ailier fort"),
  - et son nombre de points marqués cette saison.

Question 1 : creer_joueur

Écrivez une fonction creer_joueur(nom, numero, poste, points) qui prend en paramètres les informations d’un joueur et retourne un dictionnaire représentant ce joueur.

Par exemple, Victor Wembanyama a pour numéro le 1, est ailier fort et a marqué 1300 points cette saison, le dictionnaire créé est donc:

wemby={'nom':'Victor Wembanyama','numero':1,'poste'="ailier fort",points:1300}

Corrigé
def creer_joueur(nom, numero, poste, points):
   return {"nom": nom, "numero": numero, "poste": poste, "points": points}

Question 2 : création des équipes

À partir des informations suivantes, donnez un programme pour créer un dictionnaire pour chaque joueur, puis regroupez-les dans une liste appelée equipe :

  • LeBron James : numĂ©ro 6, ailier fort, 1450 points

  • Stephen Curry : numĂ©ro 30, meneur, 1800 points

  • Kevin Durant : numĂ©ro 7, ailier, 1700 points

  • Joel Embiid : numĂ©ro 21, pivot, 1550 points

Corrigé
lebron = creer_joueur("LeBron James", 6, "ailier fort", 1450)
curry = creer_joueur("Stephen Curry", 30, "meneur", 1800)
durant = creer_joueur("Kevin Durant", 7, "ailier", 1700)
embiid = creer_joueur("Joel Embiid", 21, "pivot", 1550)

equipe = [lebron, curry, durant, embiid]

Exercice 2 : Requêtes sur l’équipe (4 points)

On utilise la liste equipe créée dans l’exercice 1.

Question 3

Écrivez une fonction meilleur_marqueur(equipe) qui retourne le dictionnaire du joueur ayant marqué le plus de points.

Corrigé
def meilleur_marqueur(equipe):
   meilleur = {"points":0}  # On suppose que le premier joueur est le meilleur au départ
   for joueur in equipe:
      if joueur["points"] > meilleur["points"]:
         meilleur = joueur
   return meilleur

Question 4

Écrivez une fonction joueurs_par_poste(equipe, poste) qui prend un poste en paramètre et retourne une liste des noms des joueurs occupant ce poste.

Corrigé
def joueurs_par_poste(equipe, poste):
   joueurs = []
   for joueur in equipe:
      if joueur["poste"] == poste:
         joueurs.append(joueur["nom"])
   return joueurs

Exercice 3 : Statistiques avancées (8 points)

Question 5

Écrivez une fonction points_totaux(equipe) qui retourne la somme des points marqués par tous les joueurs de l’équipe.

Corrigé
def points_totaux(equipe):
   total = 0
   for joueur in equipe:
      total += joueur["points"]
   return total

Question 6

Écrivez une fonction moyenne_points(equipe) qui retourne la moyenne des points marqués par par tous les joueurs de l'équipe.

Corrigé
def moyenne_points(equipe):
   total = points_totaux(equipe)
   return total / len(equipe)

Question 7

Écrivez une fonction joueurs_au_dessus_de(equipe, seuil) qui retourne une liste des noms des joueurs ayant marqué plus de seuil points.

Corrigé
def joueurs_au_dessus_de(equipe, seuil):
   joueurs = []
   for joueur in equipe:
      if joueur["points"] > seuil:
         joueurs.append(joueur["nom"])
   return joueurs

Question 8

Écrivez une fonction conf_west(liste) qui a partir d'une liste d'équipes, retourne les noms des meilleurs joueurs pour chaque poste (ceux qui ont marqué le plus de points).

Corrigé
def conf_west(liste):
   meilleurs_joueurs = {}
   # Parcours de chaque Ă©quipe
   for equipe in liste:
      # Parcours de chaque joueur dans l'Ă©quipe
      for joueur in equipe:
            poste = joueur["poste"]
            # Si ce poste n'a pas encore été vu ou si ce joueur est meilleur
            if poste not in meilleurs_joueurs or joueur["points"] > meilleurs_joueurs[poste]["points"]:
               meilleurs_joueurs[poste] = joueur
   # Retourner uniquement les noms des meilleurs joueurs sous forme de liste
   return [joueur["nom"] for joueur in meilleurs_joueurs.values()]