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]

Vrai/Faux : Structures if, else, elif (niveau 2)

[enonce]
Pour chaque affirmation suivante sur les structures if, else et elif en Python, indiquez si elle est Vraie ou Fausse.
[/enonce]

[etape]
On exécute le programme Python ci-dessous :

x = 4
if x > 0 :
    print("positif")
else :
    print("négatif ou nul")

Affirmation : Ce programme affiche positif.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Bonne réponse !
La condition x > 0 est vraie (car $4 > 0$), donc le bloc du if est exécuté.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Rappel : dans un if…else, un seul des deux blocs est exécuté selon la valeur de la condition.
Ici, $4 > 0$ est True, donc le bloc du if s'exécute : le programme affiche positif.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. $4 > 0$ est True, donc le programme exécute le bloc if et affiche positif.
[/solution]
[/etape]

[etape]
Affirmation : En Python, le mot-clé elif est une abréviation de else if.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Exactement !
elif permet de tester une nouvelle condition uniquement si les précédentes étaient fausses.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
elif (contraction de else if) sert à enchaîner plusieurs conditions.
Python teste les conditions dans l'ordre et s'arrête à la première qui est vraie.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. elif signifie « sinon si » : on teste une nouvelle condition quand la précédente est fausse.
[/solution]
[/etape]

[etape]
On exécute le programme Python ci-dessous :

n = 5
if n > 0 :
    print("A")
if n > 3 :
    print("B")
else :
    print("C")

Affirmation : Ce programme affiche A puis B.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Bravo !
Il y a ici deux tests indépendants (deux if séparés).
$5 > 0$ est vrai, donc A s'affiche. $5 > 3$ est vrai aussi, donc B s'affiche (et pas C).[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Attention : les deux if ne sont pas reliés par elif — ils sont indépendants.
Les deux conditions sont vraies, donc les blocs A et B s'exécutent ; C ne s'exécute pas car il est associé au second if.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. Les deux if sont indépendants : chacun est évalué. A et B s'affichent, C non.
[/solution]
[/etape]

[etape]
On exécute le programme Python ci-dessous :

n = 5
if n > 0 :
    print("A")
elif n > 3 :
    print("B")
else :
    print("C")

Affirmation : Ce programme affiche A puis B.

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]C'est bien ça !
Dans une cascade if…elif…else, un seul bloc est exécuté (le premier dont la condition est vraie).
Ici, $n > 0$ est vraie, donc A s'affiche et le programme saute le reste.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Le piège est de croire que plusieurs branches s'exécutent.
Avec if…elif…else, Python s'arrête dès qu'une condition est vraie : seul A s'affiche.[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. Dans un if…elif…else, Python exécute un seul bloc : ici, A seulement.
[/solution]
[/etape]

[etape]
Affirmation : En Python, l'instruction if x = 5 : provoque une erreur.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Tu as raison !
Dans une condition, il faut utiliser == (test d'égalité) et non = (affectation).
if x = 5 : produit une erreur de syntaxe.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Rappel : dans une condition, on utilise l'opérateur de comparaison ==, pas =.
Écrire if x = 5 : provoque une SyntaxError en Python.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. La bonne syntaxe est if x == 5 :. Avec = simple, Python renvoie une erreur.
[/solution]
[/etape]

[etape]
Affirmation : En Python, une condition après if doit obligatoirement être écrite entre parenthèses.

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]Correct !
Contrairement à d'autres langages (C, Java), Python n'impose pas les parenthèses autour de la condition.
On peut écrire if x > 0 : sans parenthèses.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Le piège vient d'autres langages (C, Java) qui imposent if (x > 0) {...}.
En Python, les parenthèses sont facultatives : if x > 0 : est tout à fait correct.[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. Les parenthèses autour de la condition sont facultatives en Python. En revanche, les deux-points : sont obligatoires.
[/solution]
[/etape]