QCM : Conditions composées et prédictions de sortie
[enonce]
Ce QCM porte sur les conditions composées, les fonctions par morceaux et les pièges classiques autour des structures conditionnelles en Python. Choisissez la bonne réponse parmi les quatre propositions.
[/enonce]
[etape]
On exécute le programme Python ci-dessous :
age = 16
if age < 6 :
tarif = 0
elif age < 12 :
tarif = 5
elif age < 18 :
tarif = 8
else :
tarif = 12
print(tarif)
Que s'affiche-t-il ?
[qcm]
[option]$5$[/option]
[option correct="true"]$8$[/option]
[option]$12$[/option]
[option]$0$[/option]
[reponse statut="correct"]Exact !
Python teste les conditions dans l'ordre. age < 6 est fausse, age < 12 est fausse, age < 18 est vraie : $tarif$ reçoit donc la valeur $8$, et Python sort de la structure.[/reponse]
[reponse motif="$5$"]Non.
La condition age < 12 est fausse car $16 \geqslant 12$. Python passe à la condition suivante.[/reponse]
[reponse motif="$12$"]Non.
La branche else n'est exécutée que si toutes les conditions précédentes sont fausses. Ici, age < 18 est vraie.[/reponse]
[reponse motif="$0$"]Non.
age < 6 est fausse pour $age = 16$. Le programme teste ensuite les conditions suivantes.[/reponse]
[reponse statut="incorrect"]Non.
Tester les conditions dans l'ordre : s'arrêter à la première vraie.[/reponse]
[/qcm]
[/etape]
[etape]
Avec x = 4, que vaut l'expression (x > 0 and x < 5) or x == 10 en Python ?
[qcm]
[option]False[/option]
[option correct="true"]True[/option]
[option]$4$[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]Bonne réponse !
On évalue d'abord l'intérieur des parenthèses : x > 0 est vraie et x < 5 est vraie, donc True and True = True. Le or avec x == 10 donne alors True or False = True.[/reponse]
[reponse motif="False"]Non.
La partie gauche de or est vraie : $x = 4$ vérifie bien $0 < x < 5$. Or or est vrai dès qu'une seule de ses deux branches est vraie.[/reponse]
[reponse motif="$4$"]Non.
Une expression booléenne renvoie toujours True ou False, jamais un entier.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
Combiner plusieurs comparaisons avec and et or est une écriture parfaitement valide en Python.[/reponse]
[reponse statut="incorrect"]Non.
Évaluer d'abord les parenthèses, puis combiner le résultat avec or x == 10.[/reponse]
[/qcm]
[/etape]
[etape]
Le programme Python ci-dessous affecte une valeur à b :
x = -3
b = (x >= 0)
Que vaut l'expression not b ?
[qcm]
[option]False[/option]
[option correct="true"]True[/option]
[option]$-3$[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]Bravo !
Pour $x = -3$, l'expression x >= 0 vaut False. Donc b vaut False. L'inverse (avec not) vaut alors True.[/reponse]
[reponse motif="False"]Non.
Il faut d'abord évaluer b. Pour $x = -3$, la condition x >= 0 est fausse, donc b vaut False. Puis not inverse la valeur.[/reponse]
[reponse motif="$-3$"]Non.
b stocke le résultat de la comparaison, pas la valeur de $x$. Une comparaison renvoie toujours un booléen.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
Stocker un booléen dans une variable et lui appliquer not est une opération tout à fait valide.[/reponse]
[reponse statut="incorrect"]Non.
Deux étapes : évaluer b, puis inverser avec not.[/reponse]
[/qcm]
[/etape]
[etape]
On considère la fonction Python ci-dessous :
def f(x) :
if x < -1 :
return x**2
elif x <= 1 :
return 2*x
else :
return x + 3
Que vaut f(1) ?
[qcm]
[option]$1$[/option]
[option]$4$[/option]
[option correct="true"]$2$[/option]
[option]$-1$[/option]
[reponse statut="correct"]Parfait !
La condition x < -1 est fausse pour $x = 1$. La condition x <= 1 est vraie car $1 \leqslant 1$ (l'inégalité n'est pas stricte). Python exécute donc la deuxième branche : 2*x $= 2 \times 1 = 2$.[/reponse]
[reponse motif="$1$"]Non.
$1 = x^2$ pour $x = 1$, mais cette formule s'applique à la branche x < -1, qui est fausse ici.[/reponse]
[reponse motif="$4$"]Non.
$4 = 1 + 3$ est la formule de la branche else. Mais x = 1 vérifie x <= 1 (égalité admise), donc c'est la branche précédente qui s'exécute.[/reponse]
[reponse motif="$-1$"]Non.
Aucune branche ne renvoie $-1$ pour $x = 1$. Identifier quelle condition est vraie, puis appliquer la formule correspondante.[/reponse]
[reponse statut="incorrect"]Non.
Attention au <= (non strict). Python s'arrête à la première condition vraie dans l'ordre.[/reponse]
[/qcm]
[/etape]
[etape]
On exécute le programme Python ci-dessous (l'utilisateur saisit henri en minuscules) :
nom = input("Votre nom : ")
if nom == "Henri" :
print("Bonjour Henri")
else :
print("Bonjour inconnu")
Que s'affiche-t-il ?
[qcm]
[option]Bonjour Henri[/option]
[option correct="true"]Bonjour inconnu[/option]
[option]Bonjour henri[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]Tu as raison !
Python distingue les majuscules des minuscules. Les chaînes « henri » et « Henri » sont donc différentes : la condition est fausse et c'est le bloc else qui s'exécute.[/reponse]
[reponse motif="Bonjour Henri"]Non.
Piège classique : Python est sensible à la casse. « henri » (minuscule) et « Henri » (majuscule) sont considérées comme deux chaînes différentes.[/reponse]
[reponse motif="Bonjour henri"]Non.
La chaîne affichée est celle écrite entre guillemets dans le print, pas celle saisie par l'utilisateur. Regarder ce que dit chaque branche.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
Comparer deux chaînes avec == est parfaitement valide : cela donne simplement True ou False.[/reponse]
[reponse statut="incorrect"]Non.
Python distingue strictement majuscules et minuscules dans les chaînes.[/reponse]
[/qcm]
[/etape]
[etape]
Avec x = 5 et y = 10, que vaut l'expression not (x > y) and y > 0 en Python ?
[qcm]
[option]False[/option]
[option]None[/option]
[option correct="true"]True[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]Correct !
On évalue pas à pas. x > y signifie $5 > 10$, c'est False. not False = True. y > 0 signifie $10 > 0$, c'est True. Enfin, True and True = True.[/reponse]
[reponse motif="False"]Non.
Le not inverse la valeur de x > y (qui est fausse), donc cette partie vaut True. Puis True and True donne True.[/reponse]
[reponse motif="None"]Non.
None n'apparaît jamais comme résultat d'une combinaison and/or/not entre booléens.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
L'expression combine proprement not, and et des comparaisons : c'est parfaitement valide.[/reponse]
[reponse statut="incorrect"]Non.
Évaluer étape par étape : x > y, puis not (...), puis y > 0, puis combiner avec and.[/reponse]
[/qcm]
[/etape]