<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/SNT/4. Conditions et booléens</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>L'instruction conditionnelle if, else et elif ; les comparaisons et<br/>
la différence entre égalité et affectation ; les opérateurs and, or<br/>
et not ; l'ordre des tests ; l'indentation qui délimite un bloc ; les<br/>
conditions imbriquées.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q01 : Le bloc exécuté</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une station météo déclenche une alerte.</p>
<pre><code>temperature = 31
if temperature &gt; 30:
    print("Alerte chaleur")
print("Relevé terminé")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le bloc indenté sous <code>if</code> ne s'exécute que si la condition est vraie.<br/>
Ce qui suit, au même niveau que <code>if</code>, s'exécute dans tous les cas.<br/>
L'indentation délimite le bloc.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Alerte chaleur</code> puis <code>Relevé terminé</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la condition est vraie, le bloc indenté<br/>
s'exécute, puis le programme continue avec la ligne non<br/>
indentée, qui s'exécute dans tous les cas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Relevé terminé</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 31 est bien supérieur à 30, la condition est vraie et<br/>
l'alerte est affichée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Alerte chaleur</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la dernière ligne n'est pas indentée, elle ne dépend<br/>
pas de la condition et s'exécute toujours.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, la condition est fausse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>31 &gt; 30</code> est vrai. Et même fausse, la condition ne<br/>
bloquerait pas la dernière ligne.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q02 : Tester une égalité</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle ligne teste si la variable <code>note</code> vaut 20 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>=</code> affecte, <code>==</code> compare. Confondre les deux est l'erreur la plus<br/>
fréquente dans les conditions : Python refuse <code>if note = 20:</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>if note == 20:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le double égal compare deux valeurs et donne un<br/>
booléen.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if note = 20:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un seul <code>=</code> est une affectation, interdite dans une<br/>
condition. Python signale une erreur de syntaxe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if note =&gt; 20:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'opérateur « supérieur ou égal » s'écrit <code>&gt;=</code>, et il ne<br/>
teste pas l'égalité seule.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if note === 20:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le triple égal n'existe pas en Python.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q03 : Le sinon</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>age = 15
if age &gt;= 18:
    print("Majeur")
else:
    print("Mineur")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>else</code> introduit le bloc exécuté quand la condition du <code>if</code> est<br/>
fausse. Exactement un des deux blocs s'exécute, jamais les deux,<br/>
jamais aucun.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Mineur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 15 n'est pas supérieur ou égal à 18, la<br/>
condition est fausse et le bloc <code>else</code> s'exécute.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Majeur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la condition <code>age &gt;= 18</code> est fausse pour 15.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Majeur</code> puis <code>Mineur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>if</code> et <code>else</code> s'excluent, un seul des deux blocs<br/>
s'exécute.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, aucune condition n'est vraie</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>else</code> s'exécute précisément quand la condition est<br/>
fausse.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q04 : Un et logique</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>a = 5
b = 12
print(a &lt; 10 and b &lt; 10)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>a and b</code> est vrai seulement si <code>a</code> et <code>b</code> sont tous les deux vrais.<br/>
Dès qu'une des deux conditions est fausse, le résultat est <code>False</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>and</code> exige que les deux comparaisons soient<br/>
vraies. Or <code>b &lt; 10</code> est fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une seule comparaison vraie ne suffit pas avec <code>and</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'expression est un booléen, pas un nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>and</code> ne s'applique pas à des comparaisons</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>and</code> combine justement des booléens, comme ceux que<br/>
produisent les comparaisons.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q05 : Négation et ou logique</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>pluie = False
vent = True
print(not pluie and vent)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>not</code> inverse un booléen, <code>and</code> exige deux vrais, <code>or</code> se contente<br/>
d'un seul. On évalue les <code>not</code> d'abord, puis les <code>and</code>, puis les<br/>
<code>or</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>not pluie</code> vaut <code>True</code>, et <code>True and True</code><br/>
vaut <code>True</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>not</code> inverse <code>pluie</code>, qui devient <code>True</code>. Les deux<br/>
côtés du <code>and</code> sont alors vrais.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>not pluie</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'expression est évaluée, pas affichée telle quelle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>not</code> s'applique à un nombre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>not</code> s'applique à un booléen et l'inverse.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q06 : La première branche vraie</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>vitesse = 52
if vitesse &gt; 50:
    print("Excès")
elif vitesse &gt; 30:
    print("Vigilance")
else:
    print("Normal")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dans une chaîne <code>if</code>, <code>elif</code>, <code>else</code>, les conditions sont testées de<br/>
haut en bas et une seule branche s'exécute : la première dont la<br/>
condition est vraie.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Excès</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la première condition est vraie, son bloc<br/>
s'exécute et les autres branches sont ignorées.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Excès</code> puis <code>Vigilance</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>vitesse &gt; 30</code> est aussi vrai, mais <code>elif</code> n'est testé<br/>
que si les conditions précédentes sont fausses.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Vigilance</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la première branche est vraie et prend la main.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Normal</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>else</code> ne s'exécute que si toutes les conditions sont<br/>
fausses.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q07 : Deux if successifs</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>n = 52
if n &gt; 50:
    print("A")
if n &gt; 30:
    print("B")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Deux <code>if</code> à la suite sont indépendants : chacun est testé. Avec<br/>
<code>elif</code>, le second ne serait testé que si le premier était faux. Le<br/>
choix entre les deux change le comportement.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>A</code> puis <code>B</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : deux <code>if</code> indépendants sont testés chacun leur<br/>
tour. Les deux conditions sont vraies.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>A</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait le cas avec <code>elif</code>. Ici, le second <code>if</code> est<br/>
testé quoi qu'il arrive.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>B</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la première condition, <code>52 &gt; 50</code>, est vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les deux conditions sont vraies pour 52.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q08 : Comparer des chaînes</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>reponse = "oui"
if reponse == "Oui":
    print("Accepté")
else:
    print("Refusé")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Deux chaînes sont égales si elles ont exactement les mêmes<br/>
caractères, majuscules comprises. Un programme qui accepte plusieurs<br/>
écritures doit les prévoir dans sa condition.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Refusé</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>"oui"</code> et <code>"Oui"</code> diffèrent par leur première<br/>
lettre. Les chaînes sont comparées caractère par caractère.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Accepté</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la comparaison distingue majuscules et minuscules.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, on ne compare pas des chaînes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>==</code> compare des chaînes sans difficulté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, la condition ne peut pas être évaluée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la condition vaut <code>False</code>, et le bloc <code>else</code> s'exécute.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q09 : Tester un intervalle</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle condition est vraie exactement quand <code>x</code> est compris entre 10<br/>
et 20, bornes comprises ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un intervalle se traduit par deux inégalités reliées par <code>and</code>. Avec<br/>
<code>or</code>, l'une ou l'autre suffirait, ce qui ne restreint plus rien.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>x &gt;= 10 and x &lt;= 20</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : il faut que les deux inégalités soient vraies en<br/>
même temps, d'où <code>and</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>x &gt;= 10 or x &lt;= 20</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : avec <code>or</code>, tout nombre convient : 5 vérifie <code>x &lt;= 20</code><br/>
et 50 vérifie <code>x &gt;= 10</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>10 &lt;= x or x &lt;= 20</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : même problème, <code>or</code> rend la condition toujours vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>x &gt;= 10 and x &gt;= 20</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette condition revient à <code>x &gt;= 20</code>, elle laisse passer<br/>
100.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q10 : La négation d'une comparaison</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle condition est équivalente à <code>not (age &gt;= 18)</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La négation de <code>&gt;=</code> est <code>&lt;</code>, celle de <code>&gt;</code> est <code>&lt;=</code>, celle de <code>==</code> est<br/>
<code>!=</code>. On vérifie toujours la borne : ici, 18 doit rendre la condition<br/>
fausse.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>age &lt; 18</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : ne pas être supérieur ou égal à 18, c'est être<br/>
strictement inférieur à 18.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>age &lt;= 18</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour 18, <code>age &gt;= 18</code> est vrai, donc sa négation est<br/>
fausse, alors que <code>age &lt;= 18</code> serait vrai.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>age &gt; 18</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 20 vérifie <code>age &gt;= 18</code>, sa négation est donc fausse,<br/>
alors que <code>age &gt; 18</code> serait vrai.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>age != 18</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 25 est différent de 18 mais vérifie <code>age &gt;= 18</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q11 : Une variable modifiée par la condition</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>stock = 3
if stock &gt; 0:
    stock = stock - 1
print(stock)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un <code>if</code> exécute son bloc au plus une fois. Pour répéter la<br/>
soustraction jusqu'à zéro, il faudrait une boucle.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>2</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la condition est vraie, le stock diminue de 1,<br/>
puis la valeur 2 est affichée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>3 &gt; 0</code> est vrai, la soustraction a lieu.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le bloc ne s'exécute qu'une fois, un <code>if</code> n'est pas une<br/>
boucle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>-1</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : on retire 1 à 3, ce qui donne 2.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q12 : L'ordre des tests</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>note = 17
if note &gt;= 10:
    mention = "Admis"
elif note &gt;= 16:
    mention = "Très bien"
else:
    mention = "Refusé"
print(mention)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dans une chaîne <code>if</code>, <code>elif</code>, l'ordre des tests compte : la<br/>
condition la plus restrictive doit venir en premier. Ici, il fallait<br/>
tester <code>note &gt;= 16</code> avant <code>note &gt;= 10</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Admis</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la première condition est vraie pour 17, elle<br/>
prend la main et la branche <code>Très bien</code> n'est jamais atteinte.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Très bien</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>17 &gt;= 16</code> est vrai, mais la condition <code>note &gt;= 10</code>,<br/>
testée avant, l'est aussi et l'emporte.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Admis</code> puis <code>Très bien</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une seule branche s'exécute, et un seul <code>print</code> suit.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Refusé</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>else</code> ne s'exécute que si toutes les conditions sont<br/>
fausses.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q13 : Une condition dans une autre</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>connecte = True
admin = False
if connecte:
    if admin:
        print("Réglages")
    else:
        print("Accueil")
else:
    print("Connexion")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'indentation indique à quel <code>if</code> chaque <code>else</code> se rattache. Une<br/>
condition imbriquée n'est testée que si la condition extérieure est<br/>
vraie.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Accueil</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>connecte</code> est vrai, on entre dans le premier<br/>
bloc ; <code>admin</code> est faux, c'est le <code>else</code> intérieur qui<br/>
s'exécute.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Réglages</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>admin</code> vaut <code>False</code>, la condition intérieure est<br/>
fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Connexion</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le <code>else</code> extérieur correspond à <code>connecte</code> faux, ce<br/>
qui n'est pas le cas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Accueil</code> puis <code>Connexion</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les deux <code>else</code> appartiennent à des <code>if</code> différents,<br/>
repérés par l'indentation. Un seul s'exécute.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q14 : Différent de</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>print(4 != 4)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les six comparaisons sont <code>==</code>, <code>!=</code>, <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code> et <code>&gt;=</code>. Chacune<br/>
renvoie <code>True</code> ou <code>False</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>!=</code> signifie « différent de ». 4 n'est pas<br/>
différent de 4, la comparaison est fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>!=</code> est vrai seulement quand les deux valeurs<br/>
diffèrent.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>4</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une comparaison donne un booléen, pas un nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, l'opérateur <code>!=</code> n'existe pas</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>!=</code> est l'opérateur de différence, l'inverse de <code>==</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q15 : Une ligne hors du bloc</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>solde = 5
if solde &gt;= 10:
    print("Achat possible")
print("Fin")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Seules les lignes indentées sous <code>if</code> dépendent de la condition. Une<br/>
ligne revenue au niveau du <code>if</code> s'exécute dans tous les cas.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Fin</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la condition est fausse, le bloc indenté est<br/>
sauté. <code>print("Fin")</code> n'est pas indenté et s'exécute toujours.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Achat possible</code> puis <code>Fin</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 5 n'est pas supérieur ou égal à 10, le premier<br/>
affichage n'a pas lieu.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la dernière ligne ne dépend pas de la condition.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Achat possible</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'inverse, seul <code>Fin</code> est affiché.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q16 : Deux lignes dans le bloc</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>batterie = 15
if batterie &lt; 10:
    print("Batterie faible")
    print("Brancher le chargeur")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un bloc contient toutes les lignes indentées au même niveau sous le<br/>
<code>if</code>. Elles s'exécutent toutes ou aucune, selon la condition.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Rien, les deux affichages dépendent de la condition</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les deux lignes sont indentées sous <code>if</code>, et la<br/>
condition <code>15 &lt; 10</code> est fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Brancher le chargeur</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette ligne est indentée comme la précédente, elle fait<br/>
partie du même bloc.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Batterie faible</code> puis <code>Brancher le chargeur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la condition est fausse, aucune des deux lignes ne<br/>
s'exécute.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Batterie faible</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la première ligne dépend aussi de la condition, qui<br/>
est fausse.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q17 : Des booléens mémorisés</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>x = 7
pair = x % 2 == 0
petit = x &lt; 10
print(pair, petit, pair or petit)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un booléen se range dans une variable comme n'importe quelle valeur.<br/>
On peut ensuite le combiner avec <code>and</code>, <code>or</code> et <code>not</code>, ce qui rend<br/>
les conditions lisibles.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>False True True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 7 est impair, donc <code>pair</code> vaut <code>False</code> ; 7 est<br/>
inférieur à 10, donc <code>petit</code> vaut <code>True</code> ; un seul vrai suffit<br/>
au <code>or</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True True True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 7 % 2 vaut 1, <code>pair</code> est faux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False True False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>or</code> est vrai dès qu'un des deux booléens est vrai.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False False False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>x &lt; 10</code> est vrai pour 7.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q18 : Compléter une condition</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un arrosage automatique se déclenche si l'humidité du sol est<br/>
inférieure à 30 et qu'il ne pleut pas. <code>pluie</code> est un booléen.<br/>
Quelle ligne convient ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Traduire une phrase en condition demande de repérer le connecteur,<br/>
« et » devient <code>and</code>, et les négations, « ne … pas » devient <code>not</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>if humidite &lt; 30 and not pluie:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les deux conditions doivent être vraies à la<br/>
fois, et « il ne pleut pas » se traduit par <code>not pluie</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if humidite &lt; 30 or not pluie:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : avec <code>or</code>, l'arrosage partirait dès qu'il ne pleut pas,<br/>
même sur un sol humide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if humidite &gt; 30 and pluie:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est presque l'inverse : sol humide et pluie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if humidite &lt; 30 and pluie:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette condition arrose quand il pleut, il manque le<br/>
<code>not</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q19 : Deux conditions vraies, une seule branche</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>n = 12
if n % 2 == 0:
    print("Pair")
elif n % 3 == 0:
    print("Multiple de 3")
else:
    print("Autre")</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>elif</code> signifie « sinon, si » : il n'est testé que si les conditions<br/>
précédentes sont fausses. Pour afficher toutes les propriétés vraies,<br/>
on utilise des <code>if</code> indépendants.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>Pair</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 12 est pair, la première branche s'exécute, et<br/>
le <code>elif</code> n'est pas testé même si 12 est aussi multiple de 3.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Pair</code> puis <code>Multiple de 3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : avec <code>elif</code>, une seule branche s'exécute. Deux <code>if</code><br/>
séparés afficheraient les deux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Multiple de 3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la première condition, testée avant, est vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Autre</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>else</code> n'est atteint que si toutes les conditions sont<br/>
fausses.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q20 : Supérieur ou égal</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>a = 8
print(a &gt;= 8, a &gt; 8)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>&gt;=</code> et <code>&lt;=</code> acceptent l'égalité, <code>&gt;</code> et <code>&lt;</code> sont stricts. Le choix<br/>
entre les deux décide du sort de la valeur limite.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>True False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 8 est supérieur ou égal à 8, mais pas<br/>
strictement supérieur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>&gt;</code> est strict, 8 n'est pas plus grand que 8.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>&gt;=</code> accepte l'égalité, la première comparaison est<br/>
vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'inverse.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q21 : Majeur ou mineur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>age = 20
if age &gt;= 18:
    print("majeur")
else:
    print("mineur")</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>if</code> choisit la branche selon la condition, <code>else</code> prend le relais<br/>
quand elle est fausse.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>majeur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : avec <code>age</code> égal à 20, la condition <code>age &gt;= 18</code><br/>
désigne la branche exécutée, qui affiche <code>majeur</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>mineur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : compare 20 à 18 pour savoir si la condition est vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>majeur</code> puis <code>mineur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une seule des deux branches est exécutée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>20</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le programme affiche un texte, pas la valeur de <code>age</code>.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q22 : Pair ou impair</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>n = 4
if n % 2 == 0:
    print("pair")
else:
    print("impair")</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Tester <code>n % 2 == 0</code> est le réflexe pour reconnaître un nombre pair.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>pair</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>n % 2</code> est le reste de la division de 4 par<br/>
2. Il vaut 0 pour un nombre pair.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>impair</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : calcule le reste de 4 divisé par 2 avant de choisir la<br/>
branche.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>0</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le reste n'est pas affiché, il sert seulement au test.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>%</code> ne pouvant être comparé à 0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>n % 2 == 0</code> est la façon habituelle de tester la<br/>
parité.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q23 : Ce qui s'affiche après le if</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>temperature = 30
if temperature &gt; 25:
    print("chaud")
print("fin")</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'indentation délimite le bloc conditionnel. Ce qui revient à la<br/>
marge est exécuté quoi qu'il arrive.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>chaud</code> puis <code>fin</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : seul <code>print("chaud")</code> dépend de la condition.<br/>
<code>print("fin")</code>, non indenté, s'exécute dans tous les cas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>fin</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : vérifie si 30 dépasse 25, et souviens-toi que la<br/>
dernière ligne n'est pas dans le bloc.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>chaud</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>print("fin")</code> est hors du bloc <code>if</code>, il s'affiche<br/>
toujours.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, le programme n'ayant pas de <code>else</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>else</code> est facultatif, et la dernière ligne s'exécute de<br/>
toute façon.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q24 : Le plus grand de deux nombres</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>a = 3
b = 5
if a &gt; b:
    print(a)
else:
    print(b)</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Ce programme calcule un maximum. Si <code>a</code> et <code>b</code> étaient égaux, la<br/>
branche <code>else</code> afficherait <code>b</code>, ce qui reviendrait au même.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si <code>a &gt; b</code>, c'est <code>a</code> qui est affiché, sinon<br/>
<code>b</code>. Dans tous les cas, le plus grand des deux apparaît.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la condition <code>a &gt; b</code> conduit à afficher le plus grand,<br/>
pas le plus petit.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>3 5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une seule branche s'exécute, donc une seule valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>8</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune addition n'est faite.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q25 : Deux retraits successifs</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>x = 8
if x &gt; 10:
    x = x - 10
if x &gt; 5:
    x = x - 5
print(x)</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Deux <code>if</code> à la suite sont indépendants : le second voit les<br/>
modifications faites par le premier.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 8 n'est pas supérieur à 10, le premier bloc<br/>
est sauté ; 8 est supérieur à 5, le second retire 5.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>-7</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les deux retraits ne sont pas automatiques. Le premier<br/>
exige <code>x &gt; 10</code>, ce qui est faux pour 8.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>8</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : au moins une condition est vraie et modifie <code>x</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>-2</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : -2 correspondrait au premier retrait seul, or sa<br/>
condition <code>x &gt; 10</code> est fausse pour 8.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q26 : Le tarif selon l'âge</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>age = 10
if age &lt; 12:
    prix = 3
elif age &lt; 18:
    prix = 5
else:
    prix = 8
print(prix)</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>elif</code> enchaîne les tests sans les cumuler : dès qu'une condition<br/>
est vraie, les suivantes sont ignorées.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les conditions sont testées dans l'ordre, et la<br/>
première vraie fixe le prix. Avec 10 ans, c'est 3.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : relis les conditions dans l'ordre avec <code>age</code> égal à<br/>
10.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>8</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une seule branche de la chaîne s'exécute, la première<br/>
dont la condition est vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>3 5 8</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une chaîne <code>if</code>, <code>elif</code>, <code>else</code> ne retient qu'une<br/>
valeur.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q27 : Un état inversé par not</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>actif = False
if not actif:
    print("inactif")</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>not</code> transforme <code>True</code> en <code>False</code> et inversement. <code>if not actif</code><br/>
se lit « si l'objet n'est pas actif ».</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>inactif</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>not</code> inverse le booléen. Avec <code>actif</code> à False,<br/>
<code>not actif</code> vaut l'inverse, ce qui décide de l'affichage.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, la condition étant fausse</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>not False</code> vaut l'inverse de False. Reprends le test avec<br/>
cette valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>actif</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le programme ne peut afficher que <code>inactif</code>, ou rien.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>not</code> ne s'appliquant qu'aux nombres</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>not</code> s'applique justement aux booléens.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q28 : Un ou entre deux comparaisons</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>x = 3
y = 9
print(x &gt; 5 or y &gt; 5)</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>or</code> est vrai si au moins une des conditions l'est, faux seulement<br/>
si toutes sont fausses.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>x &gt; 5</code> est faux ; <code>y &gt; 5</code> décide donc du<br/>
résultat, et <code>or</code> vaut <code>True</code> dès qu'une comparaison est vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : évalue chaque comparaison séparément, puis applique la<br/>
règle du <code>or</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>9</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une expression avec <code>or</code> renvoie un booléen, pas un<br/>
nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>print</code> ne pouvant afficher une comparaison</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>print</code> affiche le résultat de l'expression, ici un<br/>
booléen.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q29 : Petit, grand ou négatif</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>a = 5
if a &gt; 0:
    if a &gt; 10:
        print("grand")
    else:
        print("petit")
else:
    print("négatif")</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un <code>if</code> dans un <code>if</code> affine le tri. L'indentation indique à quel<br/>
<code>if</code> appartient chaque <code>else</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>petit</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le premier test sépare positifs et négatifs ; le<br/>
second, à l'intérieur, sépare les positifs en grands et petits.<br/>
Avec 5, on obtient <code>petit</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>grand</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suis les tests dans l'ordre, en respectant<br/>
l'indentation.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>négatif</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : chaque <code>else</code> est lié au <code>if</code> de même indentation.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, aucune branche ne convenant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tout nombre tombe dans une des trois branches.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>4. Conditions et booléens — Q30 : La note à la frontière</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
<pre><code>note = 10
if note &gt;= 10:
    print("reçu")
else:
    print("recalé")</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La valeur frontière décide tout : <code>&gt;=</code> l'accepte, <code>&gt;</code> la rejette.<br/>
Choisir le bon signe est une question de précision.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>reçu</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>&gt;=</code> inclut la valeur 10. Avec 10, la<br/>
condition <code>note &gt;= 10</code> donne <code>reçu</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>recalé</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : regarde si 10 est supérieur ou égal à 10, le signe<br/>
<code>&gt;=</code> incluant l'égalité.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le programme affiche un texte, pas la note.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, une note ne pouvant être comparée à un entier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : entiers et flottants se comparent sans difficulté.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
