Sujet B — Durée : 1h30 — Barème indicatif
tuple est immuable (on ne peut pas modifier, ajouter ou supprimer d'éléments après création), une list est muable.hash()) qui transforme la clé en un index (entier) pour un accès direct en mémoire.
En Python, les dictionnaires (dict) sont implémentés avec des tables de hachage : la clé est hachée,
le résultat détermine l'emplacement où stocker la valeur. Cela donne un accès en O(1) en moyenne.resultat = {"abc": 2, "def": 1}if :
[x**2 for x in range(10) if x % 2 == 0] # → [0, 4, 16, 36, 64]
(0.5 pt vrai/faux, 0.5 pt exemple correct — accepter tout exemple valide avec if)
def freq_caracteres(texte):
d = {}
for c in texte:
if c == ' ':
continue
d[c] = d.get(c, 0) + 1
return d
Variante sans continue : if c != ' ': d[c] = d.get(c, 0) + 1
def intersection(s1, s2):
res = set()
for e in s1:
if e in s2:
res.add(e)
return res
(0.5 pt création d'un set, 0.5 pt boucle sur s1, 0.5 pt test d'appartenance, 0.5 pt add + return — si retourne une liste au lieu d'un set : -0.25)
def somme_chiffres(n):
if n < 10:
return n
return n % 10 + somme_chiffres(n // 10)
(0.5 pt cas de base n < 10, 1 pt appel récursif n//10, 0.5 pt addition avec n%10 — accepter n==0 comme cas de base si géré correctement)
def pairs_au_carre(liste):
return [x**2 for x in liste if x % 2 == 0]
(0.5 pt compréhension de liste, 0.5 pt condition if x % 2 == 0, 0.5 pt x**2, 0.5 pt return — si pas de compréhension : -0.5)
Intersection : [3, 4]
Union : [1, 2, 3, 4, 5, 6]
Dans a mais pas dans b : [1, 2]
(0.5 pt chaque ligne correcte, 0.5 pt pour l'ordre croissant dû à sorted() — attention : enlever 0.5 si les crochets sont absents ou si l'ordre est faux)
notes = {
"maths": [12, 15, 8, 17],
"francais": [10, 14, 13, 11],
"anglais": [16, 9, 14, 12]
}
moyennes = {}
for matiere, liste in notes.items():
moyennes[matiere] = sum(liste) / len(liste)
print(matiere, ":", moyennes[matiere])
meilleure = max(moyennes, key=moyennes.get)
print("Meilleure moyenne :", meilleure)
(0.5 pt boucle sur items, 0.5 pt calcul correct de la moyenne, 0.5 pt stockage/affichage, 0.5 pt détermination de la meilleure matière.
Accepter une approche sans max() : if moy > max_moy: ....
Si tout est hardcodé (sans boucle) : max 1 pt.)
[1, 2] comme clé de dictionnaire.
Les listes sont muables → non hachables.d = {(1, 2): "a"}.| Question | Points | Thème |
|---|---|---|
| Q1 | 1 | tuple vs list |
| Q2 | 1.5 | table de hachage |
| Q3 | 1.5 | one-hot encoding |
| Q4 | 1 | dictionnaire (get) |
| Q5 | 1 | compréhension + if |
| Q6 | 2 | fréquence caractères |
| Q7 | 2 | intersection d'ensembles |
| Q8 | 2 | somme chiffres récursive |
| Q9 | 2 | compréhension avec filtre |
| Q10 | 2 | analyse (ensembles) |
| Q11 | 2 | analyse (transposée) |
| Q12 | 2 | problème dictionnaire de listes |
| B1–B2 | 1 | bonus |
| Total | 20+1 |