QCM : Bases de Python et POO — 27 questions

Questions et réponses du QCM

1. Qui a créé le langage généraliste de haut niveau Python, utilisé ici dans sa version 3 ?

Bjarne Stroustrup
Dennis Ritchie
Guido van Rossum
James Gosling

Guido van Rossum

Explication

Guido van Rossum est le créateur de Python, un langage généraliste de haut niveau dont la version étudiée est Python 3. Les autres noms désignent des créateurs associés à d’autres langages de programmation.

2. Quelle distinction décrit correctement Python et CPython ?

Python désigne une bibliothèque, tandis que CPython désigne un type de variable
Python définit les règles du langage, tandis que CPython lit et exécute le code
Python exécute le code, tandis que CPython définit les règles du langage
Python désigne l’éditeur, tandis que CPython désigne la documentation officielle

Python définit les règles du langage, tandis que CPython lit et exécute le code

Explication

Python correspond au langage et CPython est son implémentation de référence, c’est-à-dire le programme qui interprète et exécute le code. Les autres propositions inversent ou déforment cette relation.

3. Que se passe-t-il avec l’expression 1 + 1 selon le contexte d’exécution ?

L’interpréteur interactif n’affiche rien, alors qu’un script affiche automatiquement 2
Les deux contextes affichent 2 dès qu’une expression arithmétique est évaluée
Les deux contextes restent silencieux, car une expression doit être affectée à une variable
L’interpréteur interactif affiche 2, alors qu’une expression seule dans un script n’affiche rien

L’interpréteur interactif affiche 2, alors qu’une expression seule dans un script n’affiche rien

Explication

Dans l’interpréteur interactif, l’évaluation de 1 + 1 affiche immédiatement 2, tandis qu’une expression seule dans un script ne produit pas d’affichage. Un script nécessite une instruction d’affichage explicite pour montrer le résultat.

4. Que signifie le typage dynamique en Python lorsqu’un nom est réaffecté ?

Le type est fixé avant l’exécution et chaque nom conserve ce type pendant tout le programme
Le type est défini par l’indentation et change lorsque le bloc courant est terminé
Le type est déterminé à l’exécution et le même nom peut désigner des objets de types différents
Le type dépend du nom choisi et l’objet s’adapte à la déclaration initiale

Le type est déterminé à l’exécution et le même nom peut désigner des objets de types différents

Explication

Avec le typage dynamique, le type appartient à l’objet et est déterminé à l’exécution ; un même nom peut ensuite référencer un objet d’un autre type. Le nom lui-même ne porte donc pas un type immuable.

5. Quel opérateur Python faut-il utiliser pour obtenir le quotient entier d’une division ?

%\%
∗∗**
////
//

$$//$$

Explication

L’opérateur //// calcule le quotient entier, tandis que // réalise une division réelle. L’opérateur %\% donne le reste et ∗∗** réalise une puissance.

6. Que produit l’expression « 2 » + 2 en Python ?

Une TypeError, car une chaîne et un entier ne sont pas concaténés directement
La chaîne « 22 », car Python convertit automatiquement l’entier en texte
Le nombre 4, car Python convertit automatiquement la chaîne en entier
Une ValueError, car la valeur textuelle ne peut pas être utilisée avec une addition

Une TypeError, car une chaîne et un entier ne sont pas concaténés directement

Explication

L’expression combine directement une chaîne et un entier, ce qui provoque une TypeError. Il faut convertir explicitement l’un des deux opérandes avant de réaliser une concaténation ou une addition.

7. Comment print() traite-t-elle plusieurs arguments par défaut, et quel paramètre modifie la fin de l’affichage ?

Elle les sépare par un espace et ajoute un retour à la ligne ; end modifie la fin
Elle les sépare par une virgule et ajoute un espace ; sep modifie la fin
Elle les colle sans séparateur et ajoute un retour à la ligne ; end modifie l’espace
Elle les sépare par un espace et n’ajoute rien ; sep modifie la fin

Elle les sépare par un espace et ajoute un retour à la ligne ; end modifie la fin

Explication

Par défaut, print() sépare ses arguments par un espace et termine l’affichage par un retour à la ligne. Le paramètre end modifie cette terminaison, tandis que sep concerne le séparateur entre les arguments.

8. Pourquoi faut-il souvent appliquer int() au résultat de input() avant un calcul numérique ?

Parce qu'input() renvoie une valeur logique, qu’int() transforme en nombre décimal
Parce qu'input() renvoie un nombre décimal, qu’int() arrondit vers l’entier inférieur
Parce qu'input() renvoie une chaîne de caractères, qu’int() convertit en entier
Parce qu'input() renvoie un entier, qu’int() convertit en chaîne de caractères

Parce qu'input() renvoie une chaîne de caractères, qu’int() convertit en entier

Explication

La fonction input() renvoie une chaîne de caractères, même si l’utilisateur saisit des chiffres ; int() permet de convertir cette chaîne en entier. Sans cette conversion, une opération numérique peut mélanger des types incompatibles.

9. Quelle erreur correspond à une opération réalisée entre des types incompatibles ?

ValueError
TypeError
SyntaxError
Erreur logique

TypeError

Explication

TypeError signale qu’une opération ne convient pas aux types d’objets utilisés. SyntaxError concerne une grammaire invalide, ValueError une valeur impossible et une erreur logique un résultat incorrect sans exception.

10. Quelle caractéristique décrit correctement une liste en Python ?

C’est une séquence immuable dont les éléments doivent partager un type
C’est une collection non ordonnée et fixe composée d’un seul type
C’est une association de clés uniques avec des valeurs accessibles par clé
C’est une collection ordonnée et modifiable pouvant contenir plusieurs types

C’est une collection ordonnée et modifiable pouvant contenir plusieurs types

Explication

Une liste conserve un ordre, peut être modifiée et accepte des éléments de types différents. Une association de clés et de valeurs décrit plutôt un dictionnaire.

11. Pour une liste de longueur nn, quelle affirmation concernant les indices est correcte ?

L’indice −1-1 provoque une erreur et l’indice nn désigne le dernier élément
L’indice −1-1 désigne le dernier élément et l’indice nn provoque une erreur
L’indice 11 désigne le premier élément et l’indice nn désigne le dernier
L’indice 00 désigne le dernier élément et l’indice n−1n-1 provoque une erreur

L’indice $$-1$$ désigne le dernier élément et l’indice $$n$$ provoque une erreur

Explication

Les indices valides vont de 00 à n−1n-1, et −1-1 permet d’accéder au dernier élément. L’indice nn est hors limites et déclenche une erreur IndexError.

12. Dans l’expression x[debut:fin:pas]x[debut:fin:pas], comment sont traitées les bornes de la tranche ?

Le début est inclus et la fin est exclue
Les deux bornes sont exclues de la tranche
Le début est exclu et la fin est incluse
Les deux bornes sont incluses dans la tranche

Le début est inclus et la fin est exclue

Explication

Une tranche commence à l’indice indiqué par début et s’arrête avant fin. Confondre la borne finale avec une borne incluse donne une séquence trop longue.

13. Que se passe-t-il après l’instruction liste2=liste1liste2 = liste1, puis une modification de liste2liste2 ?

La modification est visible via liste1, car les deux noms désignent le même objet
La modification provoque une erreur, car une liste ne peut avoir deux noms
La modification touche seulement les éléments imbriqués de liste1
La modification reste indépendante, car l’affectation crée une copie complète

La modification est visible via liste1, car les deux noms désignent le même objet

Explication

L’affectation associe deux noms à la même liste et ne crée pas de copie. Pour obtenir une copie superficielle, il faut par exemple utiliser list(liste1).

14. Dans quelle situation une boucle while est-elle plus adaptée qu’une boucle for ?

Exécuter un bloc pour un nombre de répétitions fixé à l’avance
Parcourir chaque élément d’une collection dont les éléments sont connus
Associer automatiquement chaque valeur d’une séquence à une variable
Répéter des instructions jusqu’à ce qu’une condition évolutive devienne vraie

Répéter des instructions jusqu’à ce qu’une condition évolutive devienne vraie

Explication

Une boucle while s’appuie sur une condition qui peut évoluer pendant l’exécution. Le parcours d’une collection ou un nombre de tours connu correspond généralement mieux à for.

15. Quels éléments une boucle while correctement conçue doit-elle généralement comporter ?

Une condition après le dernier tour, une constante et une instruction break
Une collection, un indice final et une instruction return dans chaque tour
Une initialisation, un test avant chaque tour et une mise à jour de la condition
Une initialisation après la boucle, un test unique et une variable immuable

Une initialisation, un test avant chaque tour et une mise à jour de la condition

Explication

La boucle while a besoin d’une valeur initiale, vérifie la condition avant chaque itération et modifie une donnée liée à cette condition. Sans mise à jour appropriée, la boucle peut ne jamais se terminer.

16. Quelle différence existe entre continue et break dans une boucle ?

continue relance le programme, tandis que break ignore la condition
continue quitte la boucle, tandis que break passe au tour suivant
continue passe au tour suivant, tandis que break quitte immédiatement la boucle
continue arrête le tour suivant, tandis que break répète le tour courant

continue passe au tour suivant, tandis que break quitte immédiatement la boucle

Explication

L’instruction continue abandonne le reste du tour en cours et démarre le suivant. L’instruction break interrompt directement l’exécution de la boucle.

17. Comment Python traite-t-il les branches d’une structure if, elif, else ?

Il choisit la branche ayant le test le plus complexe avant les autres
Il commence par else puis remonte vers les conditions précédentes
Il évalue tous les tests et exécute chaque branche dont la condition est vraie
Il évalue les tests de haut en bas et s’arrête au premier test vrai

Il évalue les tests de haut en bas et s’arrête au premier test vrai

Explication

Python examine les conditions dans leur ordre d’écriture et exécute le bloc associé au premier test vrai. Les branches suivantes ne sont alors pas évaluées comme alternatives à exécuter.

18. Que renvoie une fonction Python qui exécute print mais ne contient aucune instruction return explicite ?

Elle renvoie une chaîne contenant le texte affiché
Elle renvoie automatiquement la valeur passée à print
Elle renvoie None après avoir éventuellement affiché une valeur
Elle renvoie le dernier résultat calculé dans son corps

Elle renvoie None après avoir éventuellement affiché une valeur

Explication

print affiche une information, mais ne constitue pas un retour vers l’appelant. En l’absence de return explicite, la valeur renvoyée par la fonction est None.

19. Que se passe-t-il lorsqu’un programme tente d’utiliser hors de la fonction une variable créée dans cette fonction ?

L’accès provoque une erreur NameError, car la variable est locale
L’accès récupère automatiquement une copie globale de la variable
L’accès transforme la variable locale en variable globale
L’accès fonctionne si la fonction a été appelée au moins une fois

L’accès provoque une erreur NameError, car la variable est locale

Explication

Une variable créée dans une fonction appartient à la portée locale de cette fonction. En dehors de cette portée, son nom n’est pas défini et l’accès déclenche NameError.

20. Une séance dure 45 minutes et le tarif horaire est de 20 €. Quel coût faut-il calculer avant l’arrondi à deux décimales ?

20,45 €
9,00 €
13,33 €
15,00 €

15,00 €

Explication

La durée doit être convertie en heures par une division réelle : 45/60×20=1545/60 \times 20 = 15. Une division entière tronquerait la durée convertie et produirait un résultat erroné.

21. Comment classer une séance dont la durée est de 30 minutes ?

Comme une séance longue
Comme une séance standard
Comme une séance non classée
Comme une séance courte

Comme une séance courte

Explication

Une séance est courte lorsque sa durée est inférieure ou égale à 30 minutes, donc 30 minutes appartiennent à cette catégorie. La catégorie standard commence à 31 minutes.

22. Que renvoie `total_minutes` lorsqu’elle reçoit une liste vide de durées ?

Elle renvoie la première durée
Elle renvoie 0
Elle renvoie None
Elle déclenche une erreur

Elle renvoie 0

Explication

L’accumulateur commence à zéro et aucune durée n’est ajoutée lorsque la liste est vide. La boucle `for` aboutit donc à la valeur 0, plutôt qu’à une valeur absente ou à une erreur.

23. Deux séances utilisent les intervalles semi-ouverts [da,fa[[d_a,f_a[ et [db,fb[[d_b,f_b[. Dans quel cas ne se chevauchent-elles pas lorsqu’elles sont consécutives ?

Lorsque da=dbd_a = d_b
Lorsque db=fad_b = f_a
Lorsque db<fad_b < f_a
Lorsque da<fbd_a < f_b

Lorsque $$d_b = f_a$$

Explication

Avec des intervalles semi-ouverts, la borne finale n’appartient pas à la séance précédente ; ainsi, db=fad_b = f_a signifie que la seconde commence lorsque la première se termine. La condition db<fad_b < f_a indique au contraire un chevauchement potentiel.

24. Quel rôle joue une classe en programmation orientée objet ?

Elle désigne une référence vers une instance existante
Elle stocke une copie indépendante de chaque objet créé
Elle représente une valeur créée par une méthode particulière
Elle décrit les attributs et méthodes communs à ses objets

Elle décrit les attributs et méthodes communs à ses objets

Explication

Une classe sert de modèle pour définir les attributs et les méthodes communs à ses objets. Une instance est plutôt un exemplaire concret créé à partir de ce modèle.

25. Que se passe-t-il lorsqu’une classe est appelée deux fois pour créer deux variables ?

La classe devient une instance partagée
Deux objets distincts sont créés
Un seul objet reçoit deux noms différents
La seconde variable remplace la première

Deux objets distincts sont créés

Explication

Chaque appel à une classe construit une nouvelle instance, de sorte que les deux variables peuvent désigner des objets distincts. Une simple affectation comme `b = a` partagerait au contraire la même référence sans créer d’objet.

26. Deux objets d’une même classe possèdent chacun une valeur différente pour un attribut créé avec `self`. Que montre cette situation ?

L’attribut appartient à chaque instance
L’attribut conserve la valeur du premier objet
L’attribut est partagé par la classe
L’attribut est créé par l’opérateur `is`

L’attribut appartient à chaque instance

Explication

Un attribut créé sur `self` est associé à l’objet concerné, ce qui permet à chaque instance de posséder sa propre valeur. Un attribut écrit dans le corps de la classe serait partagé par les instances.

27. Deux instances contiennent les mêmes valeurs, mais ont été créées par deux appels distincts à la classe. Que permettent généralement de distinguer `is` et `==` ?

Les deux opérateurs testent toujours l’identité
`is` compare les valeurs et `==` teste l’identité
Les deux opérateurs comparent toujours les attributs
`is` teste l’identité et `==` compare les valeurs

`is` teste l’identité et `==` compare les valeurs

Explication

`is` vérifie si deux références désignent le même objet, tandis que `==` porte sur l’égalité des valeurs. Sans méthode `__eq__`, cette égalité entre objets se comporte toutefois comme un test d’identité.

Révisez avec les flashcards

Mémorisez les réponses avec 64 flashcards sur Bases de Python et POO.

Qu'est-ce que Python et qui l'a créé ?

Python est un langage généraliste de haut niveau créé par Guido van Rossum.

Quelle version de Python est utilisée dans ce cours ?

Le cours utilise Python 3.

Quelle est la différence entre Python et CPython ?

Python est le langage, CPython est son implémentation de référence.

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Bases de Python et POO.

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