[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 2
Correction - Structures imbriquées et compréhensions
Exercice 1 : Manipulation de structures imbriquées
eleves = [
{"nom": "Dupont", "prenom": "Alice", "notes": [12, 15, 14, 18]},
{"nom": "Martin", "prenom": "Bob", "notes": [8, 11, 9, 13]},
{"nom": "Durand", "prenom": "Claire", "notes": [16, 17, 19, 15]},
{"nom": "Petit", "prenom": "David", "notes": [10, 12, 11, 14]}
]
Question 1
eleves[0]["prenom"] # 'Alice'
eleves[2]["notes"][0] # 16
len(eleves[1]["notes"]) # 4
eleves[3]["nom"] # 'Petit'
Question 2
def moyenne_eleve(eleve):
"""
Calcule la moyenne d'un élève
:param eleve: (dict) un dictionnaire représentant un élève
:return: (float) la moyenne des notes de l'élève
"""
notes = eleve["notes"]
total = 0
for note in notes:
total = total + note
return total / len(notes)
Question 3
def meilleur_eleve(eleves):
"""
Trouve l'élève ayant la meilleure moyenne
:param eleves: (list) liste de dictionnaires représentant des élèves
:return: (str) le nom complet de l'élève avec la meilleure moyenne
"""
meilleur = eleves[0]
meilleure_moyenne = moyenne_eleve(eleves[0])
for eleve in eleves:
moyenne = moyenne_eleve(eleve)
if moyenne > meilleure_moyenne:
meilleure_moyenne = moyenne
meilleur = eleve
return meilleur["prenom"] + " " + meilleur["nom"]
Question 4
def eleves_au_dessus(eleves, seuil):
"""
Renvoie les prénoms des élèves au-dessus du seuil
:param eleves: (list) liste de dictionnaires représentant des élèves
:param seuil: (float) la moyenne minimale
:return: (list) liste des prénoms des élèves au-dessus du seuil
"""
resultat = []
for eleve in eleves:
if moyenne_eleve(eleve) >= seuil:
resultat.append(eleve["prenom"])
return resultat
Exercice 2 : Compréhensions de listes
Question 1
[i ** 2 for i in range(1, 21)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]
Question 2
[i for i in range(1, 51) if i % 2 == 0]
# [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
Question 3
mots = ["python", "java", "javascript", "c", "ruby", "go"]
[mot for mot in mots if len(mot) > 4]
# ['python', 'javascript', 'ruby']
Question 4
Question 5
nombres = [3, -1, 4, -1, 5, -9, 2, 6, -5, 3]
[n * 2 for n in nombres if n > 0]
# [6, 8, 10, 4, 12, 6]
Exercice 3 : Compréhensions de dictionnaires
Question 1
{i: i ** 2 for i in range(1, 11)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
Question 2
prenoms = ["Alice", "Bob", "Claire", "David"]
{prenom: len(prenom) for prenom in prenoms}
# {'Alice': 5, 'Bob': 3, 'Claire': 6, 'David': 5}
Question 3
temperatures_c = {"Paris": 20, "Lyon": 22, "Marseille": 25, "Lille": 18}
{ville: temp * 9/5 + 32 for ville, temp in temperatures_c.items()}
# {'Paris': 68.0, 'Lyon': 71.6, 'Marseille': 77.0, 'Lille': 64.4}
Question 4
notes = {"Alice": 15, "Bob": 8, "Claire": 12, "David": 17, "Eve": 9}
{nom: note for nom, note in notes.items() if note >= 10}
# {'Alice': 15, 'Claire': 12, 'David': 17}
Exercice 4 : Structures complexes
tournoi = {
"nom": "Championship 2024",
"jeu": "League of Legends",
"equipes": [
{
"nom": "Team Alpha",
"joueurs": ["Faker", "Zeus", "Oner"],
"victoires": 5
},
{
"nom": "Team Beta",
"joueurs": ["Caps", "Jankos", "Mikyx"],
"victoires": 3
},
{
"nom": "Team Gamma",
"joueurs": ["Chovy", "Deft", "Keria"],
"victoires": 4
}
]
}
Question 1
tournoi["nom"] # 'Championship 2024'
len(tournoi["equipes"]) # 3
tournoi["equipes"][0]["joueurs"][1] # 'Zeus'
tournoi["equipes"][2]["victoires"] # 4
Question 2
def equipe_gagnante(tournoi):
"""
Trouve l'équipe avec le plus de victoires
:param tournoi: (dict) dictionnaire représentant le tournoi
:return: (str) le nom de l'équipe gagnante
"""
equipes = tournoi["equipes"]
gagnante = equipes[0]
for equipe in equipes:
if equipe["victoires"] > gagnante["victoires"]:
gagnante = equipe
return gagnante["nom"]
Question 3
def tous_les_joueurs(tournoi):
"""
Renvoie la liste de tous les joueurs du tournoi
:param tournoi: (dict) dictionnaire représentant le tournoi
:return: (list) liste de tous les joueurs
"""
return [joueur for equipe in tournoi["equipes"] for joueur in equipe["joueurs"]]
Ou en version sans double compréhension :
def tous_les_joueurs(tournoi):
"""
Renvoie la liste de tous les joueurs du tournoi
:param tournoi: (dict) dictionnaire représentant le tournoi
:return: (list) liste de tous les joueurs
"""
resultat = []
for equipe in tournoi["equipes"]:
for joueur in equipe["joueurs"]:
resultat.append(joueur)
return resultat
Question 4
def ajouter_victoire(tournoi, nom_equipe):
"""
Ajoute une victoire à l'équipe spécifiée
:param tournoi: (dict) dictionnaire représentant le tournoi
:param nom_equipe: (str) le nom de l'équipe
"""
for equipe in tournoi["equipes"]:
if equipe["nom"] == nom_equipe:
equipe["victoires"] = equipe["victoires"] + 1
Exercice 5 : Double compréhension (Pour aller plus loin)
Question 1
[(x, y) for x in range(3) for y in range(3)]
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Question 2
[[1 if i == j else 0 for j in range(4)] for i in range(4)]
# [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
Question 3
matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[element for ligne in matrice for element in ligne]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
Source : Florian Mathieu - Licence CC BY NC SA