QCM : Structures if, elif, else en Python
[enonce]
Ce QCM porte sur les structures conditionnelles Python : if, elif, else, indentation et prédiction de sortie. Choisissez la bonne réponse parmi les quatre propositions.
[/enonce]
[etape]
On exécute le programme Python ci-dessous :
x = -3
if x > 0 :
print("positif")
else :
print("négatif ou nul")
Que s'affiche-t-il ?
[qcm]
[option]positif[/option]
[option correct="true"]négatif ou nul[/option]
[option]positif puis négatif ou nul[/option]
[option]Rien ne s'affiche[/option]
[reponse statut="correct"]Exact !
Comme $x = -3$, la condition x > 0 est fausse. Python exécute donc le bloc du else, qui affiche négatif ou nul.[/reponse]
[reponse motif="positif"]Non.
La condition x > 0 n'est pas vérifiée pour $x = -3$. C'est donc le bloc du else qui est exécuté, pas celui du if.[/reponse]
[reponse motif="positif puis négatif ou nul"]Non.
Seul l'un des deux blocs s'exécute : if si la condition est vraie, else sinon. Jamais les deux à la fois.[/reponse]
[reponse motif="Rien ne s'affiche"]Non.
Dans une structure if/else, l'un des deux blocs s'exécute toujours : soit le if, soit le else.[/reponse]
[reponse statut="incorrect"]Non.
Tester la condition du if pour $x = -3$. Si elle est fausse, c'est le else qui est exécuté.[/reponse]
[/qcm]
[/etape]
[etape]
On exécute le programme Python ci-dessous :
note = 12
if note >= 16 :
print("Très bien")
elif note >= 12 :
print("Bien")
elif note >= 10 :
print("Passable")
else :
print("Insuffisant")
Que s'affiche-t-il ?
[qcm]
[option]Très bien[/option]
[option correct="true"]Bien[/option]
[option]Passable[/option]
[option]Bien puis Passable[/option]
[reponse statut="correct"]Bonne réponse !
Python teste les conditions dans l'ordre et s'arrête à la première qui est vraie. La première (note >= 16) est fausse, la seconde (note >= 12) est vraie : Python affiche Bien puis sort de la structure.[/reponse]
[reponse motif="Très bien"]Non.
La première condition (note >= 16) est fausse car $12 < 16$. Python passe alors à la suivante.[/reponse]
[reponse motif="Passable"]Non.
Bien que $12 \geqslant 10$ soit vrai, Python s'arrête à la première condition vraie qu'il rencontre. Vérifier si une condition précédente n'est pas déjà vraie.[/reponse]
[reponse motif="Bien puis Passable"]Non.
Dans une structure if/elif/elif/else, une seule branche s'exécute : celle dont la condition est la première à être vraie.[/reponse]
[reponse statut="incorrect"]Non.
Tester les conditions dans l'ordre. S'arrêter à la première vraie.[/reponse]
[/qcm]
[/etape]
[etape]
Avec x = 1 et y = 2, que vaut l'expression x == 1 and y == 3 en Python ?
[qcm]
[option]True[/option]
[option correct="true"]False[/option]
[option]1[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]Bravo !
L'opérateur and exige les deux conditions vraies. La première (x == 1) est vraie, mais la seconde (y == 3) est fausse puisque $y = 2$. Le résultat est donc False.[/reponse]
[reponse motif="True"]Non.
Avec and, il ne suffit pas qu'une seule des deux conditions soit vraie. Il faut que les deux le soient. Tester la seconde condition.[/reponse]
[reponse motif="1"]Non.
Une expression avec and, or ou not renvoie un booléen, jamais un entier.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
Une telle expression combinant deux comparaisons avec and est parfaitement valide.[/reponse]
[reponse statut="incorrect"]Non.
Évaluer chaque condition séparément, puis combiner avec la règle du and.[/reponse]
[/qcm]
[/etape]
[etape]
On souhaite tester si la variable x est égale à $5$. Laquelle des instructions ci-dessous est correcte en Python ?
[qcm]
[option]if x = 5 :[/option]
[option]if x == 5[/option]
[option correct="true"]if x == 5 :[/option]
[option]if x := 5 :[/option]
[reponse statut="correct"]Parfait !
Pour un test d'égalité, on utilise == (double signe égal) et on termine la ligne par : (deux-points) qui introduit le bloc conditionnel.[/reponse]
[reponse motif="if x = 5 :"]Non.
= simple est l'opérateur d'affectation, pas d'égalité. Pour un test, il faut ==.[/reponse]
[reponse motif="if x == 5"]Non.
L'opérateur == est correct, mais il manque les deux-points à la fin de la ligne. Le : introduit le bloc d'instructions conditionnelles.[/reponse]
[reponse motif="if x := 5 :"]Non.
:= n'est pas l'opérateur d'égalité étudié au lycée. Pour un test classique d'égalité, utiliser ==.[/reponse]
[reponse statut="incorrect"]Non.
Syntaxe à retenir : if, puis condition avec ==, puis : à la fin, puis bloc indenté.[/reponse]
[/qcm]
[/etape]
[etape]
On exécute le programme Python ci-dessous :
def f(x) :
if x <= 0 :
return -x + 1
else :
return 3*x + 1
print(f(-2))
Que s'affiche-t-il ?
[qcm]
[option]$-5$[/option]
[option correct="true"]$3$[/option]
[option]$-1$[/option]
[option]$7$[/option]
[reponse statut="correct"]Exactement !
Comme $-2 \leqslant 0$, c'est la première branche qui s'exécute : la fonction renvoie $-x + 1 = -(-2) + 1 = 2 + 1 = 3$.[/reponse]
[reponse motif="$-5$"]Non.
$-5 = 3 \times (-2) + 1$ : c'est la formule de la branche else. Mais pour $x = -2$, la condition x <= 0 est vraie, donc on utilise l'autre branche.[/reponse]
[reponse motif="$-1$"]Non.
Attention au signe : $-(-2) = +2$, pas $-2$. Recalculer $-x + 1$ pour $x = -2$.[/reponse]
[reponse motif="$7$"]Non.
Erreur de branche et de signe. Commencer par identifier quelle condition est vraie pour $x = -2$, puis appliquer la formule correspondante.[/reponse]
[reponse statut="incorrect"]Non.
Étape 1 : évaluer la condition pour savoir quelle branche s'exécute. Étape 2 : appliquer la formule de cette branche.[/reponse]
[/qcm]
[/etape]
[etape]
On exécute le programme Python ci-dessous :
x = 7
est_positif = (x > 0)
if est_positif :
print("A")
else :
print("B")
Que s'affiche-t-il ?
[qcm]
[option]B[/option]
[option]True[/option]
[option correct="true"]A[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]C'est bien ça !
La comparaison x > 0 renvoie un booléen qui est stocké dans est_positif. Comme $x = 7 > 0$, est_positif vaut True. La condition if est_positif : est donc vraie : le bloc if s'exécute et affiche A.[/reponse]
[reponse motif="B"]Non.
La variable est_positif stocke le résultat de x > 0. Pour $x = 7$, ce résultat est True, donc le bloc if s'exécute (et pas le else).[/reponse]
[reponse motif="True"]Non.
True est la valeur de est_positif, mais ce n'est pas ce qui est affiché à l'écran. Seules les instructions print affichent quelque chose.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
On peut parfaitement stocker un booléen dans une variable et l'utiliser comme condition : c'est une pratique très courante.[/reponse]
[reponse statut="incorrect"]Non.
Une variable booléenne peut servir directement de condition dans un if. Évaluer sa valeur puis déterminer quelle branche s'exécute.[/reponse]
[/qcm]
[/etape]