0% ont trouvé ce document utile (0 vote)
3 vues14 pages

QCM Python Corrige

Le document présente un questionnaire à choix multiples (QCM) sur le langage Python, avec des questions portant sur des concepts variés tels que le lancement d'un serveur HTTP, les décorateurs, les types de fonctions, et la gestion des exceptions. Chaque question est accompagnée de réponses correctes et incorrectes, ainsi que d'explications détaillées pour justifier les réponses. Le QCM couvre également des modules Python comme 'collections' et 'numpy', ainsi que des opérations sur des données.

Transféré par

debyaahmedsalem
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues14 pages

QCM Python Corrige

Le document présente un questionnaire à choix multiples (QCM) sur le langage Python, avec des questions portant sur des concepts variés tels que le lancement d'un serveur HTTP, les décorateurs, les types de fonctions, et la gestion des exceptions. Chaque question est accompagnée de réponses correctes et incorrectes, ainsi que d'explications détaillées pour justifier les réponses. Le QCM couvre également des modules Python comme 'collections' et 'numpy', ainsi que des opérations sur des données.

Transféré par

debyaahmedsalem
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

QCM Python — Corrige Detaille

Chaque reponse est justifiee avec une explication detaillee

Question 1 : Comment peut-on lancer un serveur HTTP depuis la ligne de commande


avec Python ?
Reponse correcte
CORRECT python -m [Link]

Reponses incorrectes
INCORRECT python -m SimpleHTTPServer

INCORRECT python -c '[Link]'

INCORRECT Aucune des commandes ci-dessus

Explication
En Python 3, le module s'appelle '[Link]'. La commande 'python -m [Link]' lance un
serveur HTTP sur le port 8000 par defaut. 'SimpleHTTPServer' etait le nom du module en Python
2 et n'existe plus en Python 3. La commande 'python -c' execute du code inline, pas un module.

Question 2 : Que renvoie le code suivant ?def f(l): for element in l: print(element,
end=' ') else: print('\nOops, something went wrong...')f(list())f([x for x in range(3)])
Reponse correcte
CORRECT Oops, something went wrong...0 1 2Oops, something went
wrong...

Reponses incorrectes
INCORRECT 0 1 2

INCORRECT 0 1 2 / Oops, something went wrong...

Explication
En Python, le bloc 'else' d'une boucle 'for' s'execute TOUJOURS apres la boucle, qu'elle ait itere
ou non (sauf si interrompue par 'break'). Pour f(list()) : liste vide -> boucle ne tourne pas -> else
s'execute -> affiche 'Oops...'. Pour f([0,1,2]) : affiche '0 1 2 ' puis else s'execute -> affiche
'Oops...' aussi.
Question 3 : Quel est le type de fonction de 'function_a' dans le code suivant ?def
function_a(func): def inner(name): return func() + name return
inner@function_adef greet(): return 'Welcome to welovedevs 'print(greet('John'))
Reponse correcte
CORRECT Un decorateur

Reponses incorrectes
INCORRECT Une methode statique de classe

INCORRECT Une methode numerique

INCORRECT Une extension

Explication
Un decorateur est une fonction qui prend une autre fonction en argument, la modifie ou l'etend,
et retourne une nouvelle fonction. Ici '@function_a' est equivalent a ecrire 'greet =
function_a(greet)'. 'function_a' prend 'func' (une fonction) et retourne 'inner', ce qui correspond
exactement au patron du decorateur.

Question 4 : Qu'affiche le code suivant ?a = [1, 2]b = ['a', 'b', 'c']for item in zip(a, b):
print(item)
Reponse correcte
CORRECT (1, 'a')(2, 'b')

Reponses incorrectes
INCORRECT une erreur de type ValueError

INCORRECT (1, 'a') / (2, 'b') / (3, None)

INCORRECT aucune des reponses ci-dessus

Explication
zip() combine les elements de plusieurs iterables en tuples, mais s'arrete a la longueur du plus
court. Ici 'a' a 2 elements et 'b' en a 3, donc zip produit seulement 2 tuples : (1,'a') et (2,'b').
L'element 'c' est ignore. zip ne leve pas d'erreur et ne complete pas avec None (c'est zip_longest
qui fait cela).
Question 5 : Quelle technique est utilisee dans le code suivant ?def f(animal, color):
return f'This {animal} is {color}.'args = ['parrot', 'red']sentence = f(*args)
Reponse correcte
CORRECT Le depaquetage d'arguments (argument unpacking)

Reponses incorrectes
INCORRECT Le desassemblage d'arguments

INCORRECT La concatenation d'arguments

INCORRECT Le decoupage d'arguments

Explication
L'operateur '*' devant une liste lors d'un appel de fonction effectue le 'depaquetage' (unpacking) :
il extrait les elements de la liste et les passe comme arguments positionnels separes.
f(*['parrot','red']) est equivalent a f('parrot', 'red'). Ce mecanisme est distinct du desassemblage
ou de la concatenation.

Question 6 : Quelle est la difference entre les methodes __repr__() et __str__() ?


Reponse correcte
CORRECT __repr__() est destine aux machines (debogage) tandis que
__str__() est destine aux humains

Reponses incorrectes
INCORRECT repr() appelle __repr__() mais pas __str__()

INCORRECT __str__() est destine aux machines tandis que __repr__() est
destine aux humains

INCORRECT print() appelle __repr__() mais pas __str__()

Explication
__repr__() doit retourner une representation technique non ambigue de l'objet, idealement
evaluable (ex: "Point(x=1, y=2)"). Il est utilise dans le shell Python et pour le debogage. __str__()
doit retourner une representation lisible par l'humain. print() appelle __str__() (pas __repr__()). Si
__str__ n'est pas defini, Python utilise __repr__ comme fallback.
Question 7 : Les variables a et b sont des sets. Que representent respectivement a^b,
a|b et a-b ?
Reponse correcte
CORRECT La difference symetrique, l'union et la difference

Reponses incorrectes
INCORRECT L'union symetrique, l'union et un subset

INCORRECT L'union exclusive, l'union et la difference

INCORRECT La difference exclusive, la difference et l'intersection

Explication
Pour les sets Python : '^' = difference symetrique (elements dans a OU b mais pas les deux), '|' =
union (tous les elements de a et b), '&' = intersection (elements communs), '-' = difference
(elements dans a mais pas dans b). La 'difference symetrique' est le terme mathematique correct
pour '^'.

Question 8 : Comment convertir une liste de tuples en dictionnaire ? Ex:


[(1,'one'),(2,'two')] en {1:'one', 2:'two'}
Reponse correcte
CORRECT dict([(1, 'one'), (2, 'two')])

Reponses incorrectes
INCORRECT list([(1, 'one'), (2, 'two')])

INCORRECT tuple([(1, 'one'), (2, 'two')])

INCORRECT set([(1, 'one'), (2, 'two')])

Explication
La fonction dict() accepte une liste de paires (tuples de 2 elements) et cree un dictionnaire ou le
premier element de chaque tuple devient la cle et le second la valeur. list() retourne une liste,
tuple() un tuple, et set() echouerait car les tuples ne sont pas hashables de cette facon.

Question 9 : Quel sera le resultat du code suivant ?class A: def __init__(self, x):
self.x = x def __eq__(self, other): return self.x == [Link] = A(10)b = A(10)print(a ==
b)print(a is b)
Reponse correcte
CORRECT True False

Reponses incorrectes
INCORRECT True True

INCORRECT False False

INCORRECT False True

Explication
'a == b' utilise __eq__ defini dans la classe, qui compare self.x == other.x -> 10 == 10 -> True. 'a
is b' teste l'identite memoire (meme objet en memoire), or a et b sont deux instances differentes
creees separement -> False. '==' teste l'egalite de valeur, 'is' teste l'identite de reference.

Question 10 : Quel(s) conteneur(s) du module 'collections' permet(tent) de trouver les


elements les plus courants d'une liste ?
Reponse correcte
CORRECT Counter

Reponses incorrectes
INCORRECT DefaultDict

INCORRECT ChainMap

INCORRECT namedtuple

Explication
Counter est un sous-type de dict qui compte les occurrences de chaque element. Sa methode
.most_common(n) retourne les n elements les plus frequents. DefaultDict fournit une valeur par
defaut pour les cles manquantes. ChainMap regroupe plusieurs dicts. namedtuple cree des
tuples avec des champs nommes. Aucun de ces trois ne compte les occurrences.

Question 11 : Que permet de faire le module numpy ?


Reponse correcte
CORRECT Effectuer des operations complexes sur des arrays
multidimensionnels (et les produits matriciels)
Reponses incorrectes
INCORRECT Generer des graphes statistiques

INCORRECT Convertir facilement des donnees numeriques en binaire

Explication
NumPy est la librairie fondamentale pour le calcul numerique en Python. Elle permet de creer et
manipuler des tableaux (arrays) multidimensionnels efficacement, et propose des operations
mathematiques avancees dont les produits matriciels ([Link], @). La generation de graphes est
le role de Matplotlib. La conversion binaire n'est pas son objectif.

Question 12 : Parmi les codes suivants, lequel gere l'exception correctement ?(pour
g(0) qui provoque une ZeroDivisionError)
Reponse correcte
CORRECT def g(a): try: print(1/a) except
ZeroDivisionError: print('Error') finally:
print('Done')

Reponses incorrectes
INCORRECT try sans except (seulement raise)

INCORRECT except sans try (syntaxe invalide)

INCORRECT try/except ValueError (mauvais type d'exception)

Explication
Le code correct utilise try/except ZeroDivisionError/finally. 'try' encadre le code risque, 'except
ZeroDivisionError' capture EXACTEMENT le bon type d'exception leve par 1/0. Le bloc 'finally'
s'execute toujours. Capturer ValueError serait incorrect car 1/0 leve ZeroDivisionError, pas
ValueError. Un 'except' sans 'try' est une erreur de syntaxe.

Question 13 : Que contient la variable 'words' apres execution ?import resentence =


'The quick brown fox jumps over the lazy dog'words = [Link](r'lazy', sentence)
Reponse correcte
CORRECT None

Reponses incorrectes
INCORRECT Une erreur se produit
INCORRECT True

INCORRECT <[Link] object; span=(35, 39), match='lazy'>

Explication
[Link]() cherche le pattern UNIQUEMENT au debut de la chaine. La chaine commence par
'The', pas par 'lazy'. Donc match() retourne None (pas d'exception). Si on voulait trouver 'lazy'
n'importe ou dans la chaine, il faudrait utiliser [Link]() qui retournerait l'objet Match avec
span=(35,39).

Question 14 : Lesquels de ces modules sont capables de convertir des donnees


(serialisation) ?
Reponse correcte
CORRECT pickle, json et marshal

Reponses incorrectes
INCORRECT resource (uniquement)

Explication
pickle : serialise des objets Python en format binaire Python-specifique. json : convertit en format
JSON texte, interoperable. marshal : serialise en format binaire interne Python (utilise par le
bytecode). Ces trois modules serialisent/deserializent des donnees. 'resource' est un module
Unix pour gerer les limites des ressources systeme, il ne serialise pas de donnees.

Question 15 : Que contient la variable 'string' dans le code :f = open('[Link]',


'r')string = [Link]()[Link]()
Reponse correcte
CORRECT Une liste contenant chaque ligne du fichier [Link]

Reponses incorrectes
INCORRECT Une unique chaine de caracteres contenant les lignes du fichier

INCORRECT La premiere ligne du fichier

INCORRECT La derniere ligne du fichier

Explication
readlines() retourne une LISTE de strings, chaque element etant une ligne du fichier (avec le
caractere '\n' inclus). Pour obtenir une unique chaine : [Link](). Pour la premiere ligne
uniquement : [Link](). Il n'existe pas de methode native pour lire uniquement la derniere ligne
directement.

Question 16 : Que renvoie la fonction suivante ?def f(): a = [x for x in range(10)]


return list(filter(lambda x: x%3, a))
Reponse correcte
CORRECT [1, 2, 4, 5, 7, 8]

Reponses incorrectes
INCORRECT None

INCORRECT [3, 6, 9]

INCORRECT Une erreur est levee

Explication
filter(lambda x: x%3, a) garde les elements pour lesquels la lambda retourne une valeur truthy.
x%3 vaut 0 (falsy) quand x est multiple de 3 (0,3,6,9). Pour les autres valeurs (1,2,4,5,7,8), x%3
!= 0 (truthy). Donc filter garde [1,2,4,5,7,8] et exclut les multiples de 3. list() convertit le filtre en
liste.

Question 17 : Quelles fonctions peut-on utiliser pour convertir une liste ou un


dictionnaire en iterable ?
Reponse correcte
CORRECT iter()

Reponses incorrectes
INCORRECT map()

INCORRECT generator()

INCORRECT convert()

Explication
iter() est la fonction built-in Python qui convertit un objet iterable (liste, dict, tuple...) en iterateur.
Un iterateur est un objet avec __next__(). map() applique une fonction a chaque element.
'generator()' n'existe pas comme fonction built-in. 'convert()' n'existe pas non plus en Python
standard.

Question 18 : Qu'affiche le code suivant ?a = [x for x in range(5)]b = iter(a)i = 0while i <


len(a): print(next(b), end=' ')
Reponse correcte
CORRECT 0 1 2 3 4

Reponses incorrectes
INCORRECT une exception de type StopIteration

INCORRECT 1 2 3 4 5

INCORRECT aucune de ces reponses

Explication
iter(a) cree un iterateur sur la liste [0,1,2,3,4]. La boucle while tourne 5 fois (i va de 0 a 4). next(b)
retourne les elements un par un : 0, 1, 2, 3, 4. Note : i n'est jamais incremente dans la boucle
visible, mais la condition i < len(a) est verifiee. ATTENTION : si i n'est pas incremente, c'est une
boucle infinie qui lancerait StopIteration apres 5 appels.

Question 19 : Comment recuperer les arguments passes en ligne de commande ?


Reponse correcte
CORRECT [Link]

Reponses incorrectes
INCORRECT [Link]

INCORRECT [Link]

INCORRECT aucune des reponses ci-dessus

Explication
[Link] est une liste du module 'sys' contenant les arguments de la ligne de commande.
[Link][0] est le nom du script, [Link][1] est le premier argument, etc. '[Link]' n'existe pas
(self est pour les instances de classe). '[Link]' n'est pas une syntaxe Python valide pour les
arguments CLI.
Question 20 : Dans le module collections, quel avantage presente le type deque par
rapport au type list ?
Reponse correcte
CORRECT L'operation pop(0) s'effectue en O(1) au lieu de O(n)

Reponses incorrectes
INCORRECT L'operation insert(0, v) est optimisee (O(1))

INCORRECT Il peut etre converti en iterable

INCORRECT aucune des reponses

Explication
deque (double-ended queue) est optimise pour les insertions/suppressions aux deux extremites
en O(1). Pour une list, pop(0) est O(n) car tous les elements doivent etre decales.
[Link]() et [Link]() sont O(1). En revanche, l'acces par index [i] est O(n) pour
deque mais O(1) pour list. Les deux peuvent etre convertis en iterables.

Question 21 : Par quoi peut-on remplacer h dans : for i,e in h(['A','B','C']):


print(f'liste[{i}] = {e}')
Reponse correcte
CORRECT enumerate()

Reponses incorrectes
INCORRECT index()

INCORRECT zip()

INCORRECT map()

Explication
enumerate() retourne des paires (index, valeur) pour chaque element d'un iterable.
enumerate(['A','B','C']) donne (0,'A'), (1,'B'), (2,'C'). C'est exactement ce que le code attend :
i=index, e=element. index() est une methode de liste qui retourne la position d'un element. zip()
combine deux iterables. map() applique une fonction.
Question 22 : Quelle est l'instruction utilisee en Python pour executer le code d'une
boucle tant qu'une condition est vraie ?
Reponse correcte
CORRECT while <condition>:

Reponses incorrectes
INCORRECT while <condition> do:

INCORRECT until <condition>:

INCORRECT for <condition>:

Explication
La syntaxe Python pour une boucle conditionnelle est 'while <condition>:' avec les deux-points et
sans le mot 'do'. 'while ... do:' est la syntaxe de certains autres langages (ex: Pascal). 'until'
n'existe pas en Python. 'for' est pour les boucles d'iteration sur un iterable, pas pour une
condition booleenne.

Question 23 : Lesquelles de ces instructions permettent de generer un nombre reel


aleatoire entre 0 et 1 ?
Reponse correcte
CORRECT [Link](0,1) et [Link](0,1)

Reponses incorrectes
INCORRECT [Link](0, 1)

Explication
[Link](a,b) du module 'random' retourne un float aleatoire dans [a,b].
[Link](0,1) fait de meme avec NumPy. Les deux sont valides. [Link]()
n'existe pas dans le module math de Python. Pour un float entre 0 et 1 specifiquement, on peut
aussi utiliser [Link]() (sans arguments).

Question 24 : Qu'affiche le code suivant apres execution ?var = "I'm a global


variable"def f(var): print(var)f("I'm fairly local")
Reponse correcte
CORRECT I'm fairly local

Reponses incorrectes
INCORRECT Une erreur de type UndefinedVariable

INCORRECT I'm a global variable

INCORRECT Une erreur de type ValueError

Explication
Le parametre 'var' de la fonction f est une variable LOCALE qui masque la variable globale du
meme nom. Quand f("I'm fairly local") est appele, le parametre local 'var' prend la valeur 'I'm
fairly local'. print(var) affiche donc la valeur locale. La variable globale n'est pas modifiee et n'est
pas utilisee ici.

Question 25 : l est une instance de type list. Que renvoie : sorted(l, reverse=True)
Reponse correcte
CORRECT Le tableau dynamique contenant les valeurs de l triees
dans l'ordre DECROISSANT

Reponses incorrectes
INCORRECT Le tableau contenant les inverses des valeurs de l

INCORRECT Le tableau ou la i-eme valeur correspond a la n-i-eme valeur de l

INCORRECT Le tableau contenant les valeurs de l triees dans l'ordre


CROISSANT (INCORRECT - c'etait la reponse cochee)

Explication
sorted(l, reverse=True) retourne une NOUVELLE liste avec les elements tries en ordre
decroissant (du plus grand au plus petit). Sans reverse=True, l'ordre serait croissant.
'reverse=True' inverse l'ordre de tri. La liste originale l n'est pas modifiee (contrairement a
[Link]()). ATTENTION : la reponse cochee dans le QCM (ordre croissant) etait INCORRECTE.

Question 26 : Quelle fonction renvoie True si et seulement si tous les elements de


l'iterable donne en argument valent True ?
Reponse correcte
CORRECT all()

Reponses incorrectes
INCORRECT each()
INCORRECT any()

INCORRECT every()

Explication
all(iterable) retourne True uniquement si TOUS les elements sont truthy (ou si l'iterable est vide).
any(iterable) retourne True si AU MOINS UN element est truthy. 'each()' et 'every()' n'existent pas
comme built-ins Python. Exemple : all([True, True, True]) -> True ; all([True, False, True]) ->
False.

Question 27 : Quelle fonction f(function, iterable) renvoie un iterateur qui applique


'function' a chaque element de 'iterable' ?
Reponse correcte
CORRECT map()

Reponses incorrectes
INCORRECT filter()

INCORRECT exec()

INCORRECT set()

Explication
map(function, iterable) applique la fonction a chaque element et retourne un iterateur de
resultats. filter(function, iterable) garde seulement les elements pour lesquels function retourne
True. exec() execute du code Python dynamiquement. set() cree un ensemble. Exemple :
list(map(str, [1,2,3])) -> ['1','2','3'].

Question 28 : Dans le module itertools, que renvoie la fonction combinations(iterable,


r) ?
Reponse correcte
CORRECT Des tuples de longueur r, tries dans l'ordre, sans
elements repetes

Reponses incorrectes
INCORRECT Des tuples de longueur r, tries dans l'ordre avec elements repetes
INCORRECT Un produit cartesien, equivalent a une boucle for interieure

INCORRECT Des tuples de longueur r, dans tous les ordres possibles, sans
elements repetes

Explication
combinations(iterable, r) genere toutes les combinaisons de r elements sans repetition et dans
l'ordre d'apparition dans l'iterable. Ex : combinations('ABC',2) -> ('A','B'),('A','C'),('B','C'). Avec
repetition : combinations_with_replacement. Dans tous les ordres : permutations. Produit
cartesien : product.

Question 29 : a et b sont des sets. Lesquelles de ces propositions sont correctes ?


Reponse correcte
CORRECT [Link](b) renvoie True si a&b == set() ET
[Link](b) est equivalent a a<=b

Reponses incorrectes
INCORRECT [Link](e) leve une erreur KeyError si e n'appartient pas a a

INCORRECT [Link]({}) ne leve aucune erreur

Explication
CORRECTES : isdisjoint(b) retourne True quand l'intersection est vide (set()). issubset(b) et <=
sont bien equivalents. INCORRECTES : discard(e) ne leve PAS d'erreur si e est absent (c'est
remove(e) qui leve KeyError). [Link]({}) leve une TypeError car les dicts ne sont pas hashables
(les sets ne peuvent contenir que des elements immuables).

Vous aimerez peut-être aussi