50  Test de positionnement

Ce test de positionnement est un QCM de 30 questions couvrant les 4 niveaux TOSA. Il vous sert à :

📋 Mode d’emploi
  • 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) ?

  1. <class 'int'>
  2. <class 'float'>
  3. <class 'double'>
  4. <class 'number'>

b) <class 'float'> — Python utilise float pour tous les nombres à virgule.

Q2 — Chaînes de caractères

Que renvoie "python"[1:4] ?

  1. "pyt"
  2. "yth"
  3. "ytho"
  4. "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))
  1. 3
  2. 4
  3. 5
  4. Une erreur

b) 4append 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")
  1. vrai
  2. faux
  3. 0
  4. Une erreur

b) faux0 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)
  1. 2
  2. 4
  3. 5
  4. 8

b) 4range(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} ?

  1. None
  2. 0
  3. KeyError
  4. "z"

b) 0get(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 ?

  1. t[0]
  2. len(t)
  3. t.append(4)
  4. t + (5,)

c) t.append(4) — les tuples sont immuables. Pas de .append, .remove, etc.

Q8 — Fonctions natives

Que renvoie sorted("cba") ?

  1. "abc"
  2. ["a", "b", "c"]
  3. ("a", "b", "c")
  4. 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())
  1. 10
  2. 20
  3. None
  4. Une erreur

b) 20x 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. [1] puis [1]
  2. [1] puis [1, 1]
  3. Une erreur
  4. [] 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}" ?

  1. "3.14159"
  2. "3.14"
  3. "3.14:.2f"
  4. "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. [1, 2, 3]
  2. [1, 2, 3, 4]
  3. 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)
  1. True True
  2. True False
  3. False True
  4. False 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 ?

  1. L.sort()
  2. sorted(L, key=lambda t: t[1])
  3. sorted(L, reverse=True)
  4. 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 ?

  1. datetime.parse(...)
  2. datetime.strptime(..., "%d/%m/%Y")
  3. datetime.strftime(..., "%d/%m/%Y")
  4. datetime(...)

b) strptimeparse, 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 ?

  1. Liste de nombres uniquement
  2. Liste triée
  3. Moins de 100 éléments
  4. 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] ?

  1. [0, 2, 4, 6, 8]
  2. [0, 4, 8]
  3. [2, 4, 6]
  4. [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. (1, 2)
  2. [1, 2]
  3. {"a": 1, "b": 2}
  4. Une erreur

c) {"a": 1, "b": 2}**kwargs collecte toujours en dictionnaire.

Q19 — Lambdas

Quel extrait est invalide ?

  1. f = lambda x: x + 1
  2. sorted(L, key=lambda x: x[0])
  3. lambda x: return x + 1
  4. lambda: 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 ?

  1. La classe
  2. L’instance courante
  3. Une variable locale
  4. Un mot-clé réservé

b) L’instance couranteself 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 :

  1. class B(A):
  2. class B extends A:
  3. class B is A:
  4. 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 ?

  1. try
  2. except
  3. else
  4. finally

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 ?

  1. json.dump
  2. json.dumps
  3. json.load
  4. json.loads

b) json.dumpsdumps renvoie une string. dump écrit dans un fichier.

Q24 — Pattern matching

À partir de quelle version de Python existe match/case ?

  1. 3.7
  2. 3.9
  3. 3.10
  4. 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} ?

  1. Exactement 24 chiffres
  2. De 2 à 4 chiffres
  3. 2 ou 4 chiffres
  4. 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)
  1. <class 'list'>
  2. <class 'tuple'>
  3. <class 'generator'>
  4. <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 ?

  1. Exécute la fonction plus vite
  2. Préserve __name__, __doc__ et autres métadonnées de la fonction décorée
  3. Empêche la modification
  4. 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)
  1. 10
  2. 20
  3. None
  4. Une erreur

a) 10x = 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 ?

  1. /home
  2. rapport.pdf
  3. rapport
  4. .pdf

c) rapport — le nom sans extension. suffix.pdf, namerapport.pdf.

Q30 — Type hints

Quelle est la syntaxe moderne (Python 3.10+) pour « int ou None » ?

  1. Optional[int]
  2. int | None
  3. int?
  4. 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
Stratégie de révision

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 :

  1. Comprenez-vous le pourquoi de vos réponses, ou avez-vous deviné ?
  2. Pouvez-vous expliquer à quelqu’un les concepts que vous venez d’utiliser ?
  3. Saurez-vous retrouver la bonne syntaxe sans aide dans 2 semaines ?
  4. 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 5Chapitre suivant : Examen blanc →