Ce chapitre reprend chaque question de l'examen blanc avec :
- La bonne réponse.
- Le code vérifié quand c'est pertinent.
- Une explication pour comprendre et retenir.
- Un renvoi vers le chapitre du cours à réviser si nécessaire.
Q1 — Quotient et reste de division
Réponse : b) 3 1
print(10 // 3, 10 % 3)// est la division entière (quotient), % le modulo (reste). Renvoient des int quand les opérandes sont entiers.
📚 Révisions : Partie 1 — Calculs et variables.
Q2 — Multiplication de chaînes
Réponse : a) "abcabcabc"
print("abc" * 3)L'opérateur * sur une chaîne et un entier répète la chaîne. Même chose pour les listes : [0] * 5 = [0, 0, 0, 0, 0].
📚 Révisions : Partie 1 — Chaînes de caractères.
Q3 — Valeur booléenne d'une liste vide
Réponse : b) False
print(bool([]))Une collection vide ([], (), {}, set(), "") est falsy. De même pour 0, None, False. Tout le reste est truthy.
📚 Révisions : Partie 2 — Logique booléenne approfondie.
Q4 — Indexation négative
Réponse : a) "o"
print("Python"[-2])Les indices négatifs comptent à partir de la fin : -1 = dernier, -2 = avant-dernier. Ici "Python" a 6 caractères, -2 = 'o'.
📚 Révisions : Partie 1 — Chaînes de caractères.
Q5 — range avec pas négatif
Réponse : b) [5, 4, 3, 2, 1]
print(list(range(5, 0, -1)))range(start, stop, step) : stop est exclu. Ici on va de 5 à 1 inclus.
📚 Révisions : Partie 2 — Itération avancée et range.
Q6 — Ensemble et doublons
Réponse : a) 3
print(len({1, 2, 2, 3, 3, 3}))Les ensembles n'autorisent pas les doublons. L'écriture littérale avec répétitions est valide, mais les doublons sont éliminés.
📚 Révisions : Partie 1 — Ensembles.
Q7 — Ajout dans un dict
Réponse : b) 3
d = {"a": 1, "b": 2}
d["c"] = 3
print(len(d))d["c"] = 3 ajoute une nouvelle clé. Après, le dict contient 3 paires.
📚 Révisions : Partie 1 — Dictionnaires.
Q8 — if/elif/else
Réponse : c) 10
x = 5
if x > 0:
x = x * 2
elif x < 0:
x = -x
else:
x = 0
print(x)Le premier if est vrai (5 > 0), donc x = 5 * 2 = 10. Les autres branches ne sont pas exécutées (c'est elif/else, mutuellement exclusif).
📚 Révisions : Partie 1 — Conditions.
Q9 — Fonction récursive (Fibonacci)
Réponse : a) 5
def f(n):
if n <= 1:
return n
return f(n - 1) + f(n - 2)
print(f(5))C'est la suite de Fibonacci : 0, 1, 1, 2, 3, 5, 8, 13... f(5) = 5.
Piège : on peut confondre avec f(5) = 8 (le 5e terme en partant de 1). Avec f(0) = 0 et f(1) = 1, on a f(5) = 5.
📚 Révisions : Partie 2 — Fonctions récursives (notion abordée).
Q10 — Méthode inexistante sur une liste
Réponse : c) .add()
L = [1, 2, 3]
# L.add(4) # ❌ AttributeError
L.append(4) # ✅
print(L).add() existe sur les ensembles, pas les listes. Les listes utilisent .append().
📚 Révisions : Partie 1 — Listes.
Q11 — Slice inversé
Réponse : b) [3, 2, 1]
L = [1, 2, 3]
print(L[::-1])Le slicing [::-1] inverse la liste. Syntaxe générique : [début:fin:pas]. Avec pas = -1, on parcourt à l'envers.
📚 Révisions : Partie 1 — Listes.
Q12 — is vs ==
Réponse : b) is
is teste l'identité (même objet en mémoire). == teste l'égalité (même valeur).
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b, a is b) # True False📚 Révisions : Partie 2 — Références et mutabilité.
Q13 — Default mutable (PIÈGE TOSA CLASSIQUE)
Réponse : b) [1] puis [1, 2]
def f(x, L=[]):
L.append(x)
return L
print(f(1))
print(f(2))Le L=[] est évalué une seule fois à la définition de la fonction. Toutes les instances partagent cette liste.
Correction : utiliser L=None puis if L is None: L = [].
📚 Révisions : Partie 2 — Fonctions (argument par défaut mutable).