QCM : Transtypage et entrées/sorties en Python
[enonce]
Ce QCM porte sur les entrées/sorties en Python (input, print) et le transtypage entre int, float et str. Choisissez la bonne réponse parmi les quatre propositions.
[/enonce]
[etape]
On exécute le programme Python ci-dessous et l'utilisateur saisit 7 au clavier :
x = input("Saisir un nombre : ")
print(type(x))
Que s'affiche-t-il ?
[qcm]
[option]class 'int'[/option]
[option]class 'float'[/option]
[option correct="true"]class 'str'[/option]
[option]class 'bool'[/option]
[reponse statut="correct"]Exact !
La fonction input renvoie toujours une chaîne de caractères, quel que soit ce que l'utilisateur saisit. Pour obtenir un entier, il faut transtyper avec int(input(...)).[/reponse]
[reponse motif="class 'int'"]Non.
Piège classique : même si l'utilisateur saisit des chiffres, input renvoie toujours une chaîne. Pour obtenir un entier, il faut explicitement transtyper.[/reponse]
[reponse motif="class 'float'"]Non.
input ne renvoie jamais directement un décimal. Le résultat brut est toujours une chaîne de caractères.[/reponse]
[reponse motif="class 'bool'"]Non.
input ne renvoie jamais un booléen. Le résultat brut d'une saisie est toujours une chaîne de caractères.[/reponse]
[reponse statut="incorrect"]Non.
Règle essentielle : input(...) renvoie toujours une chaîne (str), même si on a tapé un nombre.[/reponse]
[/qcm]
[/etape]
[etape]
Pour que la variable n contienne un entier saisi par l'utilisateur, quelle instruction est correcte ?
[qcm]
[option]n = input("n = ")[/option]
[option]n = int("n = ")[/option]
[option correct="true"]n = int(input("n = "))[/option]
[option]n = input(int("n = "))[/option]
[reponse statut="correct"]Bonne réponse !
On lit d'abord la saisie avec input(...) (qui renvoie une chaîne), puis on la convertit en entier avec int(...). L'ordre des fonctions est essentiel : int(input(...)).[/reponse]
[reponse motif="n = input(\"n = \")"]Non.
input renvoie une chaîne, donc n serait de type str et non int. Il faut ajouter int(...) autour de input pour transtyper.[/reponse]
[reponse motif="n = int(\"n = \")"]Non.
Cette instruction essaierait de convertir la chaîne de prompt 'n = ' en entier, ce qui provoque une erreur. De plus, il n'y a plus de saisie utilisateur.[/reponse]
[reponse motif="n = input(int(\"n = \"))"]Non.
L'ordre est inversé : c'est la chaîne renvoyée par input qu'il faut transtyper, pas le prompt. L'ordre correct est int(input(...)).[/reponse]
[reponse statut="incorrect"]Non.
Schéma à retenir : saisie → chaîne → conversion. La fonction int doit entourer le résultat d'input.[/reponse]
[/qcm]
[/etape]
[etape]
On exécute le programme Python ci-dessous :
n = "5"
print(n + n)
Que s'affiche-t-il ?
[qcm]
[option]$10$[/option]
[option correct="true"]$55$[/option]
[option]5 5[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]Parfait !
La variable n est une chaîne de caractères (entre guillemets). L'opérateur + entre deux chaînes effectue une concaténation : « 5 » + « 5 » donne « 55 ».[/reponse]
[reponse motif="$10$"]Non.
$10$ serait le résultat de $5 + 5$ si n était un entier. Ici n est une chaîne (« 5 », entre guillemets), donc + ne fait pas d'addition arithmétique.[/reponse]
[reponse motif="5 5"]Non.
La concaténation ne met pas d'espace entre les deux chaînes : les caractères sont mis bout à bout sans séparateur.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
L'addition de deux chaînes est autorisée en Python : c'est la concaténation. Il n'y a donc pas d'erreur.[/reponse]
[reponse statut="incorrect"]Non.
Les guillemets autour de $5$ changent tout : « 5 » est une chaîne, et + entre deux chaînes les colle bout à bout.[/reponse]
[/qcm]
[/etape]
[etape]
On exécute le programme Python ci-dessous :
print(5 ** 2, 5 % 3)
Que s'affiche-t-il ?
[qcm]
[option]25 1[/option]
[option]10 2[/option]
[option correct="true"]25 2[/option]
[option]10 1[/option]
[reponse statut="correct"]Tu as raison !
5 ** 2 vaut $5^2 = 25$ (puissance).
5 % 3 vaut $2$ car $5 = 3 \times 1 + 2$ (reste de la division euclidienne).
La fonction print affiche les deux valeurs séparées par une espace.[/reponse]
[reponse motif="25 1"]Non.
$5^2 = 25$ est correct, mais le reste de $5$ par $3$ n'est pas $1$. Écrire $5 = 3 \times q + r$ avec $0 \leqslant r < 3$ : quel est $r$ ?[/reponse]
[reponse motif="10 2"]Non.
$10 = 5 \times 2$ : vous avez confondu ** (puissance) avec * (multiplication). $5^2$ vaut $25$, pas $10$.[/reponse]
[reponse motif="10 1"]Non.
Deux erreurs : ** est la puissance ($5^2 = 25$, pas $10$) et le reste de $5$ par $3$ est $2$, pas $1$.[/reponse]
[reponse statut="incorrect"]Non.
Calculer séparément 5 ** 2 (puissance) et 5 % 3 (reste de division euclidienne).[/reponse]
[/qcm]
[/etape]
[etape]
On exécute le programme Python ci-dessous :
a = 12 // 5
b = 12 % 5
print(a, b)
Que s'affiche-t-il ?
[qcm]
[option]2 4[/option]
[option]2.4 0[/option]
[option correct="true"]2 2[/option]
[option]60 2[/option]
[reponse statut="correct"]Exactement !
$12 = 5 \times 2 + 2$ : le quotient entier est $2$ (variable a) et le reste est $2$ (variable b).
Les deux valeurs sont bien distinctes conceptuellement (quotient et reste), elles sont numériquement égales ici par coïncidence.[/reponse]
[reponse motif="2 4"]Non.
Le reste de $12$ par $5$ n'est pas $4$. Écrire $12 = 5q + r$ avec $0 \leqslant r < 5$ : quel couple $(q, r)$ convient ?[/reponse]
[reponse motif="2.4 0"]Non.
L'opérateur // renvoie un entier (quotient euclidien), pas un décimal. C'est / qui donnerait $2{,}4$.[/reponse]
[reponse motif="60 2"]Non.
$60 = 12 \times 5$ : vous avez multiplié. L'opérateur // est une division, pas une multiplication.[/reponse]
[reponse statut="incorrect"]Non.
Effectuer la division euclidienne de $12$ par $5$ : $12 = 5 \times 2 + 2$. Quotient et reste.[/reponse]
[/qcm]
[/etape]
[etape]
Parmi les instructions Python suivantes, laquelle affecte à x la valeur décimale saisie par l'utilisateur ?
[qcm]
[option]x = input("Saisir x : ")[/option]
[option]x = int(input("Saisir x : "))[/option]
[option correct="true"]x = float(input("Saisir x : "))[/option]
[option]x = str(input("Saisir x : "))[/option]
[reponse statut="correct"]Correct !
Pour convertir une saisie en nombre décimal, on utilise la fonction float(...) autour de input(...).[/reponse]
[reponse motif="x = input(\"Saisir x : \")"]Non.
Sans transtypage, x serait une chaîne de caractères (str) et non un décimal. Il manque une conversion.[/reponse]
[reponse motif="x = int(input(\"Saisir x : \"))"]Non.
La fonction int(...) convertit en entier, pas en décimal. Si l'utilisateur saisit 2.5, ce programme produira même une erreur.[/reponse]
[reponse motif="x = str(input(\"Saisir x : \"))"]Non.
str(...) convertit en chaîne, et input renvoie déjà une chaîne : cette conversion ne change rien. Il faut float pour obtenir un décimal.[/reponse]
[reponse statut="incorrect"]Non.
Pour convertir en décimal : float(...) autour de la saisie.[/reponse]
[/qcm]
[/etape]