50 Test de positionnement
Ce test de positionnement est un QCM de 30 questions couvrant les 4 niveaux TOSA. Il vous sert à :
- Identifier votre niveau actuel.
- Repérer les chapitres à réviser avant l’examen blanc.
- Prendre confiance (ou humilité !) sur ce que vous maîtrisez vraiment.
- 30 questions, réparties en 4 sections (Basique, Opérationnel, Avancé, Expert).
- Temps conseillé : 30 minutes (1 min/question). Ne passez pas trop de temps sur les difficiles.
- Répondez sans courir chercher dans vos notes — simulez les conditions réelles.
- À la fin, consultez le barème pour vous situer.
Format : cliquez sur la réponse, puis révélez la correction.
Section 1 — Niveau Basique (Q1-8)
Q1 — Variables et types
Que vaut type(3.14) ?
<class 'int'><class 'float'><class 'double'><class 'number'>
b) <class 'float'> — Python utilise float pour tous les nombres à virgule.
Q2 — Chaînes de caractères
Que renvoie "python"[1:4] ?
"pyt""yth""ytho""ython"
b) "yth" — slicing [1:4] : indices 1, 2, 3 inclus. La borne droite est exclue.
Q3 — Listes
Quelle est la sortie ?
L = [1, 2, 3]
L.append([4, 5])
print(len(L))345- Une erreur
b) 4 — append ajoute l’élément [4, 5] comme un seul élément, donnant [1, 2, 3, [4, 5]]. Pour étaler, il faut extend.
Q4 — Conditions
Que s’affiche-t-il ?
x = 0
if x:
print("vrai")
else:
print("faux")vraifaux0- Une erreur
b) faux — 0 est considéré comme False en contexte booléen. Tout comme "", [], None.
Q5 — Boucles
Combien de fois s’exécute la boucle ?
for i in range(2, 10, 2):
print(i)2458
b) 4 — range(2, 10, 2) produit 2, 4, 6, 8 — 4 valeurs. 10 est exclu.
Q6 — Dictionnaires
Que renvoie d.get("z", 0) si d = {"a": 1, "b": 2} ?
None0KeyError"z"
b) 0 — get(clé, défaut) renvoie la valeur par défaut si la clé n’existe pas, sans erreur.
Q7 — Tuples
Quelle opération est invalide sur un tuple ?
t[0]len(t)t.append(4)t + (5,)
c) t.append(4) — les tuples sont immuables. Pas de .append, .remove, etc.
Q8 — Fonctions natives
Que renvoie sorted("cba") ?
"abc"["a", "b", "c"]("a", "b", "c")- Une erreur
b) ["a", "b", "c"] — sorted renvoie toujours une liste, même pour une chaîne en entrée.
Section 2 — Niveau Opérationnel (Q9-16)
Q9 — Fonctions
Que renvoie f() ?
def f(x=10):
return x * 2
print(f())1020None- Une erreur
b) 20 — x prend la valeur par défaut 10, puis 10 * 2 = 20.
Q10 — Argument mutable par défaut
Que s’affiche-t-il ?
def f(x=[]):
x.append(1)
return x
print(f())
print(f())[1]puis[1][1]puis[1, 1]- Une erreur
[]puis[1]
b) [1] puis [1, 1] — piège classique : [] par défaut est évalué une seule fois à la définition, puis partagé.
Q11 — f-strings
Que produit f"{3.14159:.2f}" ?
"3.14159""3.14""3.14:.2f""3.15"
b) "3.14" — :.2f arrondit à 2 décimales.
Q12 — Références
Que s’affiche-t-il ?
a = [1, 2, 3]
b = a
b.append(4)
print(a)[1, 2, 3][1, 2, 3, 4]- Une erreur
b) [1, 2, 3, 4] — b = a crée un alias, pas une copie. Les deux pointent vers la même liste.
Q13 — is vs ==
Que renvoie ce code ?
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b, a is b)True TrueTrue FalseFalse TrueFalse False
b) True False — == compare les valeurs (égales) ; is compare l’identité (objets différents).
Q14 — Tri
Comment trier L = [("a", 3), ("b", 1), ("c", 2)] par le 2e élément ?
L.sort()sorted(L, key=lambda t: t[1])sorted(L, reverse=True)L.sort(1)
b) sorted(L, key=lambda t: t[1]) — key est une fonction qui extrait la valeur de tri.
Q15 — Module datetime
Quelle méthode convertit "15/08/2025" en datetime ?
datetime.parse(...)datetime.strptime(..., "%d/%m/%Y")datetime.strftime(..., "%d/%m/%Y")datetime(...)
b) strptime — parse, alors que strftime formate. Mnémo : p = parse (lire), f = format (écrire).
Q16 — Recherche dichotomique
Quelle condition préalable la dichotomie exige-t-elle sur la liste ?
- Liste de nombres uniquement
- Liste triée
- Moins de 100 éléments
- Aucune
b) Liste triée — la dichotomie s’appuie sur l’ordre pour éliminer la moitié à chaque étape.
Section 3 — Niveau Avancé (Q17-24)
Q17 — Compréhensions
Que renvoie [x * 2 for x in range(5) if x % 2 == 0] ?
[0, 2, 4, 6, 8][0, 4, 8][2, 4, 6][0, 4]
b) [0, 4, 8] — on filtre les pairs (0, 2, 4), on multiplie par 2.
Q18 — *args / **kwargs
Que reçoit kwargs dans f(a=1, b=2) avec def f(**kwargs): ?
(1, 2)[1, 2]{"a": 1, "b": 2}- Une erreur
c) {"a": 1, "b": 2} — **kwargs collecte toujours en dictionnaire.
Q19 — Lambdas
Quel extrait est invalide ?
f = lambda x: x + 1sorted(L, key=lambda x: x[0])lambda x: return x + 1lambda: 42
c) — une lambda n’a pas de return explicite. L’expression après : est implicitement renvoyée.
Q20 — POO
Que désigne self dans une méthode ?
- La classe
- L’instance courante
- Une variable locale
- Un mot-clé réservé
b) L’instance courante — self est une convention pour désigner l’objet sur lequel la méthode est appelée.
Q21 — Héritage
Pour que B hérite de A, la syntaxe est :
class B(A):class B extends A:class B is A:class B: A
a) class B(A): — la classe mère entre parenthèses.
Q22 — Exceptions
Quelle clause s’exécute quoi qu’il arrive ?
tryexceptelsefinally
d) finally — exécuté même en cas de return ou d’exception non-rattrapée. Idéal pour le nettoyage.
Q23 — JSON
Quelle fonction convertit un dict Python en chaîne JSON ?
json.dumpjson.dumpsjson.loadjson.loads
b) json.dumps — dumps renvoie une string. dump écrit dans un fichier.
Q24 — Pattern matching
À partir de quelle version de Python existe match/case ?
- 3.7
- 3.9
- 3.10
- 3.11
c) 3.10 — octobre 2021. C’est la version de référence du TOSA.
Section 4 — Niveau Expert (Q25-30)
Q25 — Regex
Que matche \d{2,4} ?
- Exactement 24 chiffres
- De 2 à 4 chiffres
- 2 ou 4 chiffres
- Une erreur
b) De 2 à 4 chiffres — {n,m} : entre n et m répétitions.
Q26 — Générateurs
Que renvoie cette fonction à l’appel ?
def f():
yield 1
yield 2
x = f()
type(x)<class 'list'><class 'tuple'><class 'generator'><class 'function'>
c) <class 'generator'> — la présence de yield transforme la fonction en fabrique de générateurs.
Q27 — Décorateurs
Que fait @wraps du module functools ?
- Exécute la fonction plus vite
- Préserve
__name__,__doc__et autres métadonnées de la fonction décorée - Empêche la modification
- Rend la fonction récursive
b) — sans @wraps, toutes les fonctions décorées s’appellent wrapper — catastrophique pour le débogage.
Q28 — Scopes (LEGB)
Que s’affiche-t-il ?
x = 10
def f():
x = 20
f()
print(x)1020None- Une erreur
a) 10 — x = 20 dans f crée une variable locale, sans affecter le global. Il faudrait global x pour modifier la variable externe.
Q29 — pathlib
Pour le chemin Path("/home/rapport.pdf"), que vaut .stem ?
/homerapport.pdfrapport.pdf
c) rapport — le nom sans extension. suffix → .pdf, name → rapport.pdf.
Q30 — Type hints
Quelle est la syntaxe moderne (Python 3.10+) pour « int ou None » ?
Optional[int]int | Noneint?Union[int, null]
b) int | None — syntaxe union moderne, préférée à Optional[int] (qui reste valable).
50.1 📊 Barème et interprétation
Comptez vos bonnes réponses par section, puis globalement.
Par section
| Section | Seuil « acquis » | Si en-dessous |
|---|---|---|
| Basique (Q1-8) | 7/8 | Revoir la Partie 1 (fondamentaux) |
| Opérationnel (Q9-16) | 6/8 | Revoir la Partie 2 (fonctions, structures) |
| Avancé (Q17-24) | 6/8 | Revoir la Partie 3 (POO, compréhensions) |
| Expert (Q25-30) | 4/6 | Revoir la Partie 4 (regex, décorateurs, types) |
Score global
| Score total | Niveau estimé | Recommandation |
|---|---|---|
| < 15 / 30 | Initial / Basique | Reprendre depuis la Partie 1, lentement |
| 15-20 / 30 | Basique solide | Renforcer Partie 2, puis 3 |
| 21-25 / 30 | Opérationnel / Avancé | Cibler les chapitres ratés, puis examen blanc |
| 26-28 / 30 | Avancé | Bien placé ! Faire l’examen blanc |
| 29-30 / 30 | Expert | Vous êtes prêt(e) pour l’examen réel |
Relisez spécifiquement les chapitres liés à vos erreurs. Par exemple :
- Q10 ratée → Partie 2 Ch.5 (Références/mutabilité).
- Q14 ratée → Partie 2 Ch.8 (Algorithmes) ou Partie 3 Ch.3 (Lambdas).
- Q18 ratée → Partie 3 Ch.2 (*args/**kwargs).
- Q28 ratée → Partie 4 Ch.4 (Scopes LEGB).
Puis, refaites un test d’examen blanc (chapitre suivant) pour valider la progression.
50.2 Questionnaire d’auto-évaluation
Au-delà du score, posez-vous ces questions :
- Comprenez-vous le pourquoi de vos réponses, ou avez-vous deviné ?
- Pouvez-vous expliquer à quelqu’un les concepts que vous venez d’utiliser ?
- Saurez-vous retrouver la bonne syntaxe sans aide dans 2 semaines ?
- Avez-vous codé du Python récemment, ou seulement lu ?
La certification TOSA évalue votre autonomie réelle. Elle ne se prépare pas seulement en lisant. Écrivez du code, essayez, cassez, corrigez.
← Retour à la présentation de la Partie 5 • Chapitre suivant : Examen blanc →