QCM : Python Tips et Astuces — 58 questions

Questions et réponses du QCM

1. Quelle instruction permet d’afficher les éléments d’un itérable horizontalement sans ajouter de retour à la ligne après chaque élément ?

Utiliser `print(element, sep="")`
Utiliser `print(element, finish="")`
Utiliser `print(element, newline="")`
Utiliser `print(element, end="")`

Utiliser `print(element, end="")`

Explication

Le paramètre `end` contrôle ce qui est ajouté à la fin de chaque appel à `print`; une chaîne vide supprime le retour à la ligne par défaut. Le paramètre `sep` concerne la séparation entre plusieurs arguments, et non la fin de l’affichage.

2. Quelle syntaxe permet de fusionner les dictionnaires `d1` et `d2` en Python moderne ?

`d1 + d2`
`d1 | d2`
`merge(d1, d2)`
`d1 & d2`

`d1 | d2`

Explication

L’opérateur `|` fusionne deux dictionnaires en créant un dictionnaire combiné. L’opérateur `+` n’est pas défini pour fusionner des dictionnaires, tandis que `&` sert à d’autres opérations entre ensembles.

3. Que renvoie l’expression `ma_liste.sort(reverse=True)` après avoir trié `ma_liste` ?

`None`, tandis que la liste est modifiée sur place
La plus grande valeur de la liste
Une nouvelle liste triée dans l’ordre décroissant
Un booléen indiquant si le tri a réussi

`None`, tandis que la liste est modifiée sur place

Explication

La méthode `sort(reverse=True)` modifie la liste existante sur place et renvoie `None`. Une nouvelle liste triée est plutôt obtenue avec la fonction `sorted()`, qui n’est pas appelée ici.

4. Quelle instruction échange directement les valeurs de `x` et `y` sans variable temporaire ?

`x = y = x`
`x, y = x + y`
`x, y = y, x`
`x = y; y = y`

`x, y = y, x`

Explication

L’affectation multiple évalue le membre droit avant d’affecter les deux variables, ce qui permet d’échanger `x` et `y` avec `x, y = y, x`. Les autres écritures ne conservent pas correctement les deux valeurs initiales.

5. Quelle fonction du module `calendar` renvoie un booléen indiquant si une année est bissextile ?

`calendar.leap(année)`
`calendar.isleap(année)`
`calendar.month(année, mois)`
`calendar.check(année)`

`calendar.isleap(année)`

Explication

`calendar.isleap(année)` vérifie le caractère bissextile d’une année et renvoie un booléen. `calendar.month(année, mois)` sert à afficher le calendrier d’un mois et ne réalise pas ce test.

6. Quelle expression permet d’obtenir l’heure actuelle au format heures, minutes et secondes ?

`date.today().strftime('%H:%M:%S')`
`datetime.now().format('%H-%M-%S')`
`datetime.now().strftime('%H:%M:%S')`
`time.today().strftime('%H:%M:%S')`

`datetime.now().strftime('%H:%M:%S')`

Explication

`datetime.now()` fournit l’instant courant, puis `strftime('%H:%M:%S')` le formate en heures, minutes et secondes. `date.today()` représente la date du jour et ne fournit pas directement l’heure actuelle.

7. Quelle structure permet de compter les occurrences des éléments d’un itérable et d’interroger le compte d’une valeur ?

`Counter(iterable)`, puis `.find(valeur)`
`Counter(iterable)`, puis `.get(valeur)`
`Frequency(iterable)`, puis `.get(valeur)`
`Count(iterable)`, puis `.value(valeur)`

`Counter(iterable)`, puis `.get(valeur)`

Explication

La classe `Counter` du module `collections` construit un comptage des occurrences, et sa méthode `.get()` permet d’obtenir le compte associé à un élément. Les autres noms de classes ou de méthodes ne correspondent pas à cette fonctionnalité.

8. Quelle approche permet d’aplatir une liste imbriquée à deux dimensions comme `[[1, 2], [3, 4]]` ?

Utiliser `min(matrice)` pour sélectionner la première valeur
Utiliser `sorted(matrice)` pour supprimer les sous-listes
Utiliser `enumerate(matrice)` pour concaténer les lignes
Utiliser une compréhension imbriquée comme `[x for ligne in matrice for x in ligne]`

Utiliser une compréhension imbriquée comme `[x for ligne in matrice for x in ligne]`

Explication

Une compréhension imbriquée parcourt chaque ligne puis chaque élément afin de produire une seule liste plate. `min()` et `sorted()` sélectionnent ou ordonnent des éléments, tandis que `enumerate()` ajoute des indices sans aplatir la structure.

9. Que testent respectivement `startswith()` et `endswith()` sur une chaîne ?

La longueur puis le contenu numérique de la chaîne
La présence puis l’absence de la sous-chaîne
Le début puis la fin de la chaîne
La fin puis le début de la chaîne

Le début puis la fin de la chaîne

Explication

`startswith()` renvoie `True` lorsque la chaîne commence par la valeur fournie, tandis que `endswith()` vérifie sa terminaison. Inverser ces rôles conduit à appliquer chaque méthode à la mauvaise extrémité.

10. Quelle fonction de `heapq` sélectionne les cinq plus grandes valeurs d’un itérable ?

`top(5, iterable)`
`nlargest(5, iterable)`
`nsmallest(5, iterable)`
`largest(iterable, 5)`

`nlargest(5, iterable)`

Explication

`heapq.nlargest(5, iterable)` renvoie les cinq valeurs les plus grandes. `nsmallest(5, iterable)` réalise l’opération inverse en sélectionnant les cinq valeurs les plus petites.

11. Quelle condition permet de conclure que deux chaînes sont des anagrammes ?

Elles commencent par la même lettre
Elles ont le même nombre de caractères distincts
Leurs caractères triés sont identiques
Leurs caractères apparaissent dans le même ordre

Leurs caractères triés sont identiques

Explication

Deux chaînes sont des anagrammes lorsque leurs caractères triés coïncident, ce qui revient aussi à avoir les mêmes compteurs de caractères. Le même nombre de caractères distincts ou une même première lettre ne garantit pas cette égalité.

12. Quelle commande permet d’afficher les mots-clés réservés de Python ?

`dir('keywords')`
`keywords.list()`
`print(keywords)`
`help('keywords')`

`help('keywords')`

Explication

La commande `help('keywords')` affiche la liste des mots-clés réservés de Python. `dir()` sert plutôt à inspecter les attributs disponibles d’un objet ou d’un module.

13. Quelle information fournit principalement l’appel `dir(objet)` ?

La liste des mots-clés réservés du langage
Les propriétés et méthodes disponibles sur l’objet
La taille mémoire occupée par l’objet
La documentation détaillée des fonctions de l’objet

Les propriétés et méthodes disponibles sur l’objet

Explication

`dir(objet)` énumère les attributs et méthodes accessibles sur un objet ou un module. La documentation détaillée relève plutôt de `help()`, qui répond à une autre fonction d’inspection.

14. Quelle méthode permet de vérifier qu’un objet est itérable ?

Comparer `objet` avec une liste vide
Utiliser `len(objet)` et intercepter `IndexError`
Appeler `iter(objet)` et intercepter `TypeError`
Appeler `next(objet)` et intercepter `ValueError`

Appeler `iter(objet)` et intercepter `TypeError`

Explication

L’appel à `iter(objet)` réussit pour un objet itérable et lève `TypeError` dans le cas contraire. L’appel à `next()` vérifie plutôt l’obtention d’un élément et ne constitue pas le test général décrit ici.

15. Dans une liste de tuples représentant des personnes, quelle expression trie selon le deuxième élément de chaque tuple ?

`sorted(personnes, key=itemgetter(0))`
`sorted(personnes, key=itemgetter(2))`
`sorted(personnes, key=itemgetter(-1))`
`sorted(personnes, key=itemgetter(1))`

`sorted(personnes, key=itemgetter(1))`

Explication

`itemgetter(1)` sélectionne le deuxième élément de chaque tuple et l’utilise comme clé de tri. `itemgetter(0)` sélectionne le premier élément, ce qui correspond à une autre organisation du tri.

16. Quelle affirmation décrit correctement `sorted()` lorsqu’il est utilisé avec une fonction lambda comme clé ?

Il exige une fonction de comparaison au lieu d’une clé
Il renvoie une nouvelle liste triée par défaut dans l’ordre croissant
Il renvoie un tuple trié par défaut dans l’ordre décroissant
Il modifie la liste donnée et conserve son ordre initial

Il renvoie une nouvelle liste triée par défaut dans l’ordre croissant

Explication

`sorted()` accepte une fonction dans `key` pour calculer la clé de chaque élément et produit une nouvelle liste en ordre croissant par défaut. La modification directe de la liste existante correspond plutôt à `sort()`.

17. Que produit `list(enumerate(['a', 'b'], start=1))` ?

`[(1, 'b'), (2, 'a')]`
`[(1, 'a'), (2, 'b')]`
`[('a', 1), ('b', 2)]`
`[(0, 'a'), (1, 'b')]`

`[(1, 'a'), (2, 'b')]`

Explication

`enumerate()` associe chaque élément à un compteur et l’argument `start=1` fait commencer ce compteur à un. Sans cet argument, le compteur aurait commencé à zéro.

18. Comment une chaîne vide est-elle évaluée dans une condition Python ?

Comme `None`, ce qui impose d’utiliser `is None`
Comme `True`, ce qui impose d’écrire `if chaîne == ''`
Comme une erreur, car une chaîne ne peut pas être testée
Comme `False`, ce qui permet d’écrire `if not chaîne`

Comme `False`, ce qui permet d’écrire `if not chaîne`

Explication

Une chaîne vide possède une valeur logique fausse, de sorte que `if not chaîne` permet de tester directement sa vacuité. Elle n’est pas assimilée à `None`, qui représente une absence de valeur distincte.

19. Quelle instruction vérifie qu’un fichier existe avant sa suppression ?

`if os.path.isfile(chemin): os.delete(chemin)`
`if os.exists(chemin): os.remove_file(chemin)`
`if os.path.exists(chemin): os.remove(chemin)`
`if path.exists(chemin): path.delete(chemin)`

`if os.path.exists(chemin): os.remove(chemin)`

Explication

`os.path.exists(chemin)` renvoie un booléen indiquant si le chemin existe, puis `os.remove(chemin)` peut supprimer le fichier. Les autres propositions combinent des noms de fonctions qui ne correspondent pas à cette interface Python.

20. Quel résultat fournit une compréhension d’ensemble lorsqu’elle transforme plusieurs éléments donnant la même valeur ?

Une liste contenant chaque occurrence dans son ordre initial
Un tuple conservant toutes les occurrences avec leurs positions
Un ensemble contenant chaque valeur une seule fois
Un dictionnaire associant chaque valeur à son nombre d’occurrences

Un ensemble contenant chaque valeur une seule fois

Explication

Une compréhension d’ensemble utilise des accolades et construit un ensemble, qui élimine les doublons par définition. Une compréhension de liste conserverait les occurrences répétées dans une séquence.

21. Quelle définition calcule la moyenne d’un nombre variable d’arguments positionnels ?

`def moyenne(*args): return len(args) / sum(args)`
`def moyenne(*args): return sum(args) / len(args)`
`def moyenne(**kwargs): return sum(kwargs) / len(kwargs)`
`def moyenne(args): return sum(args) * len(args)`

`def moyenne(*args): return sum(args) / len(args)`

Explication

`*args` regroupe les arguments positionnels dans une séquence, ce qui permet de calculer leur moyenne avec la somme divisée par leur nombre. `**kwargs` regroupe des arguments nommés et ne correspond pas au mécanisme demandé.

22. Quel type d’arguments le paramètre *args permet-il à une fonction de recevoir ?

Une valeur unique renvoyée par la fonction
Un nombre variable d’arguments positionnels
Une séquence filtrée selon une condition
Un nombre variable d’arguments nommés

Un nombre variable d’arguments positionnels

Explication

Le paramètre *args regroupe dans une fonction un nombre variable d’arguments positionnels. La collecte d’arguments nommés sous forme de paires clé-valeur relève de **kwargs.

23. Quelle structure **kwargs collecte-t-elle lorsqu’elle est utilisée dans une fonction ?

Une séquence d’éléments satisfaisant un critère
Un dictionnaire d’arguments nommés
Un générateur de valeurs successives
Une liste d’arguments positionnels

Un dictionnaire d’arguments nommés

Explication

**kwargs rassemble les arguments nommés et les représente sous forme de dictionnaire. Les arguments positionnels variables sont plutôt pris en charge par *args.

24. Que conserve la fonction filter() lorsqu’elle est appliquée à une séquence ?

Les éléments qui satisfont le critère de la fonction
Les éléments transformés par une compréhension de liste
Les éléments regroupés dans des paires clé-valeur
Les éléments situés aux positions paires de la séquence

Les éléments qui satisfont le critère de la fonction

Explication

filter() reçoit une fonction et une séquence, puis conserve les éléments pour lesquels le critère renvoie un résultat favorable. Elle ne transforme pas nécessairement les éléments et ne les associe pas en paires clé-valeur.

25. Quelle différence caractérise une compréhension de liste par rapport à un générateur ?

La compréhension filtre une séquence, tandis que le générateur ajoute des colonnes à un tableau.
La compréhension produit immédiatement tous ses éléments, tandis que le générateur les fournit progressivement.
La compréhension renvoie une valeur finale, tandis que le générateur termine la fonction avec return.
La compréhension accepte des arguments nommés, tandis que le générateur accepte des arguments positionnels.

La compréhension produit immédiatement tous ses éléments, tandis que le générateur les fournit progressivement.

Explication

Une compréhension de liste construit immédiatement l’ensemble de ses éléments, alors qu’un générateur les fournit un par un et consomme moins de mémoire. La distinction ne porte pas sur les types d’arguments ni sur les colonnes d’un tableau.

26. Quelle suite d’opérations permet de créer un DataFrame à partir de deux listes associées ?

Créer un dictionnaire, appliquer drop(), puis transmettre les lignes obtenues à DataFrame sans préciser les colonnes.
Importer PyPDF2, utiliser append(), puis transmettre les fichiers au constructeur DataFrame avec un index.
Ouvrir un fichier CSV, appliquer filter(), puis convertir chaque élément isolé en colonne du DataFrame.
Importer pandas, utiliser zip(), puis transmettre les paires à DataFrame avec les colonnes et l’index souhaités.

Importer pandas, utiliser zip(), puis transmettre les paires à DataFrame avec les colonnes et l’index souhaités.

Explication

La procédure consiste à importer pandas, associer les deux listes avec zip(), puis fournir ces paires au constructeur DataFrame en indiquant les colonnes et l’index. Les autres procédures confondent la création du tableau avec des opérations de fichiers ou de suppression.

27. Que produit l’affectation df['Age'] = [2, 4, 3] dans un DataFrame compatible ?

Elle ajoute une colonne nommée Age au DataFrame.
Elle sélectionne la ligne d’index Age du DataFrame.
Elle supprime une colonne nommée Age du DataFrame.
Elle remplace le DataFrame par une liste de trois valeurs.

Elle ajoute une colonne nommée Age au DataFrame.

Explication

L’affectation à df['Age'] associe la liste à une nouvelle colonne appelée Age. La suppression d’une colonne ou d’une ligne se réalise avec drop(), et non avec cette affectation.

28. Quel est l’effet de df.drop('Models', inplace=True, axis=1) ?

Modifier les valeurs de la ligne Models sans supprimer sa structure
Ajouter la colonne Models au DataFrame original
Supprimer la ligne Models dans une copie du DataFrame
Supprimer la colonne Models directement dans le DataFrame original

Supprimer la colonne Models directement dans le DataFrame original

Explication

axis=1 indique que la cible est une colonne, tandis qu'inplace=True applique la suppression au DataFrame original. Une suppression de lignes utiliserait axis=0.

29. Quelle procédure permet d’écrire une liste de noms dans un fichier CSV ?

Ouvrir le fichier en mode lecture, lire chaque nom, puis ajouter une nouvelle ligne dans le fichier.
Ouvrir le fichier en mode écriture, écrire chaque nom, puis ajouter une nouvelle ligne après chaque nom.
Ouvrir le fichier en mode binaire, extraire chaque nom avec getPage(), puis fermer le lecteur.
Créer un fusionneur PDF, ajouter chaque nom avec append(), puis écrire le document final.

Ouvrir le fichier en mode écriture, écrire chaque nom, puis ajouter une nouvelle ligne après chaque nom.

Explication

L’écriture d’une liste de noms nécessite l’ouverture en mode w, l’écriture de chaque nom et l’ajout du caractère de nouvelle ligne après chaque entrée. Le mode r sert à lire le fichier, tandis que les autres opérations concernent les PDF.

30. Quelles étapes permettent de fusionner plusieurs fichiers PDF avec PyPDF2 ?

Ouvrir chaque PDF en mode écriture, remplacer son contenu, puis concaténer les noms dans un fichier CSV.
Créer un PdfFileMerger, ajouter chaque PDF avec append(), puis écrire et fermer le fichier fusionné.
Créer un Converter, appeler convert() avec un chemin cible, puis fermer le convertisseur.
Créer un PdfFileReader, sélectionner chaque page avec getPage(), puis extraire le texte dans un fichier Word.

Créer un PdfFileMerger, ajouter chaque PDF avec append(), puis écrire et fermer le fichier fusionné.

Explication

La fusion repose sur un PdfFileMerger auquel chaque PDF est ajouté avec append(), avant l’écriture et la fermeture du résultat. PdfFileReader sert à lire et extraire du texte, tandis que Converter concerne la conversion vers Word.

31. Quel mécanisme permet d’ajouter une fonctionnalité à une fonction sans modifier directement son code ?

Un itérateur qui fournit ses résultats avec next()
Une lambda qui remplace son nom par une expression courte
Une conversion qui transforme son résultat en chaîne
Un décorateur qui l’exécute dans une fonction interne comme inner()

Un décorateur qui l’exécute dans une fonction interne comme inner()

Explication

Un décorateur enveloppe la fonction et peut l’exécuter depuis une fonction interne afin d’ajouter un comportement. Une lambda sert plutôt à définir une fonction anonyme, sans constituer par elle-même ce mécanisme d’enveloppement.

32. Quelle caractéristique définit une fonction d’ordre supérieur ?

Elle trie une collection selon l’ordre alphabétique des éléments
Elle convertit une chaîne de caractères en valeur numérique
Elle mesure la durée d’une fonction avec un chronomètre interne
Elle reçoit une autre fonction comme argument ou en renvoie une

Elle reçoit une autre fonction comme argument ou en renvoie une

Explication

Une fonction d’ordre supérieur manipule une autre fonction en l’acceptant comme argument ou en la renvoyant. Le tri, la mesure du temps et la conversion sont des opérations possibles, mais ne définissent pas cette notion.

33. Pour trier une liste selon une propriété calculée pour chaque élément, quel paramètre de sorted() faut-il utiliser ?

Le paramètre number avec le nombre d’éléments à parcourir
Le paramètre reverse=True avec une fonction de comparaison
Le paramètre stmt avec le code de calcul de la propriété
Le paramètre key avec une fonction ou une lambda

Le paramètre key avec une fonction ou une lambda

Explication

Le paramètre key reçoit une fonction ou une lambda qui détermine la clé utilisée pour le tri. L’argument reverse=True modifie le sens du tri, mais ne définit pas le critère appliqué aux éléments.

34. Que renvoie l’expression « abc » in « xabcy » ?

La sous-chaîne trouvée après sa conversion en bytes
L’indice où commence la sous-chaîne recherchée
False, car l’expression vérifie l’absence de la sous-chaîne
True, car la sous-chaîne recherchée est présente

True, car la sous-chaîne recherchée est présente

Explication

L’opérateur in renvoie True lorsque la sous-chaîne apparaît dans la chaîne examinée. L’opérateur not in servirait à tester son absence, tandis que find() renverrait une position numérique.

35. Quelle information fournit l’appel « texte.find('something') » lorsqu’il trouve la sous-chaîne recherchée ?

Le nombre total de caractères de cette sous-chaîne
Une valeur booléenne indiquant sa présence
Une nouvelle chaîne contenant le texte après séparation
L’indice auquel commence cette sous-chaîne

L’indice auquel commence cette sous-chaîne

Explication

La méthode find() renvoie la position de début de la sous-chaîne dans la chaîne. Une expression avec in fournirait seulement un booléen de présence, sans donner cet indice.

36. Comment convertir correctement une valeur bytes nommée s en chaîne de caractères UTF-8 ?

Avec dict(s) ou avec zip(s)
Avec s.find('UTF-8') ou avec s.split()
Avec str(s, 'UTF-8') ou avec s.decode()
Avec input(s) ou avec s.encode()

Avec str(s, 'UTF-8') ou avec s.decode()

Explication

Une valeur bytes peut être décodée en chaîne UTF-8 avec str(s, 'UTF-8') ou avec la méthode s.decode(). La méthode encode() effectue généralement la conversion inverse, d’une chaîne vers des bytes.

37. Comment lire plusieurs valeurs saisies sur une même ligne en les séparant par des espaces ?

En appliquant input().decode() au texte saisi
En appliquant input().split() à la saisie
En appliquant input().join() aux valeurs reçues
En appliquant input().find() à chaque caractère

En appliquant input().split() à la saisie

Explication

L’appel input().split() divise la ligne saisie selon les espaces par défaut. La méthode find() recherche une position et decode() concerne les bytes, tandis que join() sert à réunir des chaînes.

38. Que se produit-il lorsqu’un appel à next() est effectué après le dernier élément d’un itérateur ?

La collection est convertie en dictionnaire
Le premier élément est automatiquement renvoyé
L’itérateur ajoute un élément vide à la fin
Une exception StopIteration est déclenchée

Une exception StopIteration est déclenchée

Explication

Un itérateur fournit ses éléments un par un et déclenche StopIteration lorsqu’il n’en reste plus. Il ne recommence pas automatiquement et ne modifie pas la collection en ajoutant une valeur.

39. Que fait l’expression dict(zip(clés, valeurs)) lorsque les deux itérables n’ont pas la même longueur ?

Elle inverse les deux itérables avant de construire le dictionnaire
Elle conserve les éléments isolés sous une clé vide
Elle associe les éléments par position et ignore les éléments sans paire
Elle associe chaque élément à tous les éléments de l’autre itérable

Elle associe les éléments par position et ignore les éléments sans paire

Explication

zip() forme des paires selon les positions, puis dict() transforme ces paires en associations clé-valeur. Lorsque les longueurs diffèrent, les éléments sans correspondant sont ignorés plutôt que conservés séparément.

40. Quelle structure convient pour ajouter et retirer des éléments aux deux extrémités d’une séquence ?

Un ChainMap regroupant plusieurs dictionnaires liés
Un itérateur parcourant les éléments avec next()
Une deque permettant les opérations à gauche et à droite
Un dictionnaire construit à partir de paires associées

Une deque permettant les opérations à gauche et à droite

Explication

Une deque est une file à double extrémité conçue pour ajouter ou retirer des éléments à gauche comme à droite. Un ChainMap regroupe des dictionnaires, mais ne fournit pas cette fonction de file à deux extrémités.

41. Quelle séquence permet de préparer correctement une capture d’écran pour un traitement avec OpenCV ?

Créer l’image, la sauvegarder, puis convertir le tableau de RGB vers BGR
Sauvegarder l’image, créer un objet ImageDraw, puis convertir le texte en BGR
Créer l’image, la convertir de BGR vers RGB, puis sauvegarder le tableau
Convertir l’image en niveaux de gris, l’extraire avec zipfile, puis la sauvegarder

Créer l’image, la sauvegarder, puis convertir le tableau de RGB vers BGR

Explication

pyautogui.screenshot() crée l’image, image.save() l’enregistre, puis cv.cvtColor() convertit les données RGB en BGR, le format attendu par OpenCV. La conversion inverse ne correspond pas au flux de traitement décrit.

42. Quelle opération permet de modifier une image Pillow afin d’y dessiner un filigrane ?

Utiliser Image.open() après avoir créé le texte avec ImageDraw.Draw()
Utiliser ImageDraw.Draw() après avoir chargé l’image avec Image.open()
Utiliser ZipFile() pour ajouter le texte avant d’enregistrer l’image
Utiliser cv.cvtColor() pour écrire le texte directement dans l’image

Utiliser ImageDraw.Draw() après avoir chargé l’image avec Image.open()

Explication

Image.open() charge l’image et ImageDraw.Draw() crée l’objet permettant de la modifier, notamment pour dessiner un texte avec une police et une position choisies. Image.open() ne sert pas à dessiner et cv.cvtColor() réalise une conversion de couleurs.

43. Quelle méthode de ZipFile extrait tous les fichiers d’une archive ouverte en mode lecture ?

La méthode printdir(), après l’ouverture de l’archive en mode écriture
La méthode save(), après la conversion de l’archive en image
La méthode download(), après la sélection d’un fichier compressé
La méthode extractall(), après l’affichage éventuel avec printdir()

La méthode extractall(), après l’affichage éventuel avec printdir()

Explication

Avec ZipFile('file.zip', 'r'), extractall() extrait tous les fichiers, tandis que printdir() sert à afficher le contenu de l’archive. printdir() ne réalise donc pas l’extraction.

44. Que produit une fonction Python qui exécute l’instruction return 1, 2, 3 ?

Un tuple contenant les trois valeurs retournées
Une liste contenant les trois valeurs retournées
Trois variables créées séparément par la fonction
Une chaîne composée des trois valeurs retournées

Un tuple contenant les trois valeurs retournées

Explication

Une instruction return suivie de plusieurs valeurs les regroupe d’abord dans un tuple. L’affectation décomposée, comme x, y, z = values(), permet ensuite de les placer dans des variables distinctes.

45. Dans une boucle, quel est le rôle principal de zip() lorsqu’elle reçoit plusieurs séquences ?

Trier les séquences selon la longueur de leurs éléments
Associer les éléments placés au même index pour les parcourir ensemble
Ajouter tous les éléments des séquences dans une seule liste imbriquée
Transformer chaque élément des séquences en chaîne de caractères

Associer les éléments placés au même index pour les parcourir ensemble

Explication

zip() associe les éléments de même index provenant de plusieurs séquences, ce qui permet leur parcours simultané dans une boucle. Elle ne trie pas les séquences et ne les transforme pas automatiquement en chaînes.

46. Quelle différence distingue append() et extend() lorsqu’on applique une liste d’éléments à une liste cible ?

append() ajoute la liste comme un élément, tandis qu’extend() ajoute ses éléments séparément
append() trie la liste cible, tandis qu’extend() convertit ses éléments en tuple
append() supprime les éléments communs, tandis qu’extend() conserve la liste imbriquée
append() ajoute les éléments séparément, tandis qu’extend() ajoute la liste comme un élément

append() ajoute la liste comme un élément, tandis qu’extend() ajoute ses éléments séparément

Explication

append() conserve la liste fournie comme un élément imbriqué, alors qu’extend() ajoute individuellement chacun de ses éléments à la liste cible. La confusion vient de leurs effets différents sur la structure obtenue.

47. Quelle combinaison transforme une chaîne en liste de mots puis permet de reconstruire une chaîne à partir de cette liste ?

append() avec split(), puis list() avec extractall()
extend() avec map(), puis zip() avec join()
join() avec list(), puis split() avec append()
split() avec map() et list(), puis join() avec map()

split() avec map() et list(), puis join() avec map()

Explication

split(), map() et list() servent à obtenir une liste de mots, tandis que join() combiné à map() reconstruit une chaîne à partir de chaînes. append() et extend() modifient des listes mais ne réalisent pas cette transformation complète.

48. Quel est l’effet de __slots__ dans une classe Python ?

Télécharger des fichiers associés aux instances et les stocker dans la classe
Générer automatiquement des profils fictifs et remplir une base de données
Aplatir les listes imbriquées et convertir leurs éléments en attributs
Définir les attributs autorisés et réduire l’espace mémoire des instances

Définir les attributs autorisés et réduire l’espace mémoire des instances

Explication

__slots__ déclare les attributs autorisés pour les instances et réduit l’espace mémoire occupé par leurs objets. La génération de profils relève de Faker, tandis que l’aplatissement de listes relève d’autres outils.

49. Quelle utilisation de Faker permet de produire un pays fictif et un profil fictif ?

Créer ZipFile(), puis appeler fake.country() et fake.simple_profile()
Créer ImageDraw.Draw(), puis appeler fake.country() et fake.simple_profile()
Créer pandas.DataFrame(), puis appeler fake.country() et fake.simple_profile()
Créer Faker(), puis appeler fake.country() et fake.simple_profile()

Créer Faker(), puis appeler fake.country() et fake.simple_profile()

Explication

Un objet Faker() fournit notamment les méthodes fake.country() et fake.simple_profile() pour générer ces données fictives. pandas peut ensuite organiser des profils en DataFrame, mais ne génère pas lui-même les données de Faker.

50. Quelle expression décrit correctement la factorielle d’un entier positif nn ?

Le produit des entiers de 11 à nn
Le produit des nombres premiers inférieurs à nn
Le quotient de nn par tous ses diviseurs
La somme des entiers de 00 à nn

Le produit des entiers de $$1$$ à $$n$$

Explication

La factorielle multiplie tous les entiers positifs compris entre 11 et nn. La somme des entiers correspond à une autre opération et ne définit pas la factorielle.

51. Quelle propriété permet d’identifier un nombre premier ?

Il est divisible par tous les entiers inférieurs à lui.
Il est nécessairement supérieur à 1010.
Il possède au moins trois diviseurs positifs distincts.
Il possède exactement deux diviseurs, 11 et lui-même.

Il possède exactement deux diviseurs, $$1$$ et lui-même.

Explication

Un nombre premier possède exactement deux diviseurs positifs : 11 et lui-même, et les nombres premiers commencent à 22. Avoir plusieurs diviseurs ou dépasser 1010 ne constitue pas le critère de primalité.

52. Quelle association entre les fonctions de psutil et les mesures obtenues est correcte ?

virtual_memory() mesure les processeurs et cpu_percent(percpu=True) la mémoire disponible.
virtual_memory() mesure la mémoire et cpu_percent(percpu=True) l’utilisation de chaque processeur.
Les deux fonctions mesurent la mémoire, avec des unités exprimées en gigaoctets.
Les deux fonctions mesurent les processeurs, avec une moyenne calculée par le système.

virtual_memory() mesure la mémoire et cpu_percent(percpu=True) l’utilisation de chaque processeur.

Explication

virtual_memory() fournit des informations sur la mémoire, tandis que cpu_percent(percpu=True) donne l’utilisation de chaque processeur. La conversion des octets de mémoire en gigaoctets se fait par une division par 102431024^3, et non l’inverse.

53. Quelle différence décrit correctement la concaténation avec + et l’utilisation de join() ?

+ modifie le nombre grammatical, tandis que join() corrige les erreurs d’orthographe.
+ assemble des chaînes, tandis que join() relie les éléments d’un itérable avec un séparateur.
+ relie un itérable avec un séparateur, tandis que join() additionne des chaînes deux à deux.
+ mesure la longueur des chaînes, tandis que join() convertit les nombres en texte.

+ assemble des chaînes, tandis que join() relie les éléments d’un itérable avec un séparateur.

Explication

L’opérateur + assemble directement des chaînes, alors que join() combine les éléments d’un itérable en insérant un séparateur. Pour plusieurs chaînes, join() évite la création répétée de chaînes intermédiaires.

54. Quelle instruction modifie la limite de récursion de Python pour la fixer à 12001200 ?

sys.recursionlimit = 1200
sys.limit_recursion(1200)
sys.setrecursionlimit(1200)
sys.change_recursion(1200)

sys.setrecursionlimit(1200)

Explication

La fonction sys.setrecursionlimit() permet de modifier la limite de récursion, dont la valeur par défaut est 10001000. Les autres formes proposées ne correspondent pas à l’interface indiquée pour effectuer ce réglage.

55. Quelle association entre les méthodes de TextBlob et leur fonction est correcte ?

correct() détecte les mots interdits et pluralize() les remplace.
correct() corrige l’orthographe et pluralize() forme le pluriel.
correct() forme le pluriel et pluralize() corrige l’orthographe.
correct() compte les éléments et pluralize() trie les mots.

correct() corrige l’orthographe et pluralize() forme le pluriel.

Explication

La méthode correct() sert à corriger les erreurs orthographiques, tandis que pluralize() modifie le nombre grammatical d’un mot. Les deux méthodes n’ont donc pas le même objectif linguistique.

56. Pour vérifier qu’une liste contient des éléments identiques, dans quel cas all() renvoie-t-elle True lorsqu’elle teste une condition d’égalité à une valeur de référence ?

Lorsqu'au moins un élément satisfait la condition d’égalité.
Lorsque chaque élément satisfait la condition d’égalité.
Lorsque la liste contient des éléments dans l’ordre croissant.
Lorsque la liste comporte un nombre pair d’éléments.

Lorsque chaque élément satisfait la condition d’égalité.

Explication

all() renvoie True si tous les éléments testés satisfont la condition, ce qui permet de vérifier leur égalité avec une même valeur. La présence d’un seul élément conforme ne suffit pas pour obtenir ce résultat.

57. Quelle méthode de better_profanity remplace les mots interdits par une forme censurée ?

profanity.detect_words()
contains_profanity()
profanity.censor()
load_censor_words()

profanity.censor()

Explication

profanity.censor() remplace les mots interdits dans un texte. contains_profanity() indique leur présence, tandis que load_censor_words() charge une liste personnalisée de termes à censurer.

58. Quelle méthode permet de trouver les facteurs d’un nombre entier nn ?

Comparer chaque entier à nn et retenir ceux qui ont la même parité.
Tester les nombres premiers jusqu’à nn et retenir ceux dont i%n=0i \% n = 0.
Tester chaque entier ii de 11 à nn et retenir ceux pour lesquels n%i=0n \% i = 0.
Additionner les entiers de 11 à nn et conserver les sommes paires.

Tester chaque entier $$i$$ de $$1$$ à $$n$$ et retenir ceux pour lesquels $$n \% i = 0$$.

Explication

Un facteur ii de nn donne un reste nul dans la division n%in \% i, d’où le test de chaque entier entre 11 et nn. Le test inversé i%ni \% n ne permet pas de repérer les diviseurs de nn.

Révisez avec les flashcards

Mémorisez les réponses avec 89 flashcards sur Python Tips et Astuces.

Comment imprimer les éléments d'un itérable horizontalement en Python ?

En utilisant print(element, end=" ") pour remplacer le séparateur de fin par une chaîne vide.

Quel est le rôle du paramètre sep dans print() ?

Il définit le séparateur entre les arguments affichés.

Comment fusionner deux dictionnaires en Python ?

Avec l'opérateur | ou la syntaxe {**dictionnaire1, **dictionnaire2}.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Python Tips et Astuces.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM