<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/SNT/Notions transversales de programmation</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Variables et affectation, types de base, séquence d'instructions,<br/>
instruction conditionnelle, boucles bornées et non bornées,<br/>
définition et appel de fonctions, listes simples, opérateurs<br/>
arithmétiques, de comparaison et booléens, affichage et saisie,<br/>
lecture d'un message d'erreur.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q01 : Une suite d'affectations</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme note les dimensions d'une photographie, en pixels.</p>
<p>`<code>python<br/>
largeur = 1024<br/>
hauteur = 768<br/>
hauteur = largeur<br/>
largeur = 640<br/>
</code></p>
<p>Que vaut hauteur` à la fin ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>En Python, le signe = n'énonce pas une égalité mathématique, il range<br/>
une valeur dans une variable. Une affectation se lit de droite à gauche,<br/>
et seule la variable écrite à gauche change.</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="0" format="html">
    <text><![CDATA[<p>768</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la valeur du départ, mais la troisième ligne l'a<br/>
remplacée par celle de largeur. Une affectation écrase sans<br/>
prévenir ce que la variable contenait.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>1024</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la troisième ligne recopie dans hauteur la valeur<br/>
que largeur porte à cet instant, soit 1024. La ligne suivante ne<br/>
touche qu'à largeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>640</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose qu'une affectation crée un lien durable entre les<br/>
deux variables. Elle recopie une valeur une fois pour toutes, puis<br/>
chaque variable vit de son côté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1792</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : additionne les deux valeurs. Le signe = ne calcule rien,<br/>
il range dans la variable de gauche la valeur trouvée à droite.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q02 : Repérer une chaîne de caractères</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un objet connecté range quatre informations dans quatre variables.</p>
<p>`<code>python<br/>
ville = "Lyon"<br/>
altitude = 173<br/>
humide = True<br/>
vitesse = 12.5<br/>
</code>`</p>
<p>Laquelle contient une chaîne de caractères ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les quatre types de base se reconnaissent à l'écriture : guillemets pour<br/>
une chaîne, chiffres seuls pour un entier, point décimal pour un<br/>
flottant, True ou False pour un booléen.</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="0" format="html">
    <text><![CDATA[<p>altitude, qui contient 173</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 173 est un nombre entier. Il s'écrit sans guillemets et<br/>
sans point décimal, et se prête aux calculs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>humide, qui contient True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : True est un booléen, l'une des deux seules valeurs de<br/>
vérité. Il s'écrit sans guillemets et ne peut valoir que vrai ou<br/>
faux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>vitesse, qui contient 12.5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 12.5 est un nombre flottant, reconnaissable à son point<br/>
décimal. Les guillemets sont absents.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>ville, qui contient "Lyon"</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les guillemets font de Lyon une suite de<br/>
caractères, et non un nom de variable.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q03 : Un compteur de messages</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une application compte les messages reçus.</p>
<p>`<code>python<br/>
messages = 0<br/>
messages = messages + 3<br/>
messages = messages + 2<br/>
print(messages)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La ligne messages = messages + 3 se lit en deux temps : on calcule<br/>
d'abord messages + 3 avec la valeur actuelle, puis on range le<br/>
résultat dans messages. C'est le schéma de tout compteur.</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>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la variable part de 0, reçoit 3, puis 2 de plus.<br/>
Chaque ligne lit la valeur courante, ajoute un nombre et range le<br/>
total au même endroit.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ne retient que la première addition. La ligne d'après<br/>
repart de 3 et ajoute encore 2.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que la dernière addition remplace tout ce qui a<br/>
été calculé avant. Elle ajoute 2 à ce que la variable contient<br/>
déjà.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : retient la valeur du départ. Les deux lignes qui suivent<br/>
modifient bel et bien la variable avant l'affichage.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q04 : Un échange de coordonnées manqué</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme voudrait échanger la latitude et la longitude relevées par<br/>
un récepteur.</p>
<p>`<code>python<br/>
lat = 45<br/>
lon = 4<br/>
lat = lon<br/>
lon = lat<br/>
print(lat, lon)<br/>
</code>`</p>
<p>Qu'affiche-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Échanger deux variables réclame une troisième variable, chargée de<br/>
garder la valeur qui va être écrasée. Sans elle, la première<br/>
affectation détruit ce que la seconde devait recopier.</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="0" format="html">
    <text><![CDATA[<p>45 4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce sont les valeurs du départ, comme si les deux<br/>
affectations n'avaient rien fait. La troisième ligne modifie<br/>
pourtant lat.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4 45</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'échange souhaité, mais le programme ne l'obtient<br/>
pas. La valeur 45 disparaît dès que lat reçoit celle de lon.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>4 4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : lat prend la valeur 4, puis lon reçoit cette<br/>
même valeur 4. L'ancienne valeur de lat n'existe plus nulle part.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>45 45</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le résultat du même enchaînement mené dans l'autre<br/>
sens, où lon recevrait d'abord la valeur de lat.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q05 : La division entière</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un programme range 7 photographies sur des pages de 2 photographies.</p>
<p>`<code>python<br/>
print(7 // 2)<br/>
</code>`</p>
<p>Qu'affiche-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Trois opérateurs cohabitent : / donne un quotient décimal, // le<br/>
quotient entier, % le reste. Ici, 7 vaut 3 fois 2, plus 1.</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="0" format="html">
    <text><![CDATA[<p>3.5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le résultat de 7 / 2, la division ordinaire, qui<br/>
donne un flottant. La barre doublée demande le quotient entier.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : // donne le nombre de fois que 2 tient dans 7,<br/>
soit 3, en abandonnant la partie décimale.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le résultat de 7 % 2, qui donne le reste de la<br/>
division et non le quotient.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : arrondit 3,5 au plus proche. La division entière<br/>
n'arrondit pas, elle abandonne la partie décimale.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q06 : Une condition avec and</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>L'éclairage d'un escalier lit deux capteurs.</p>
<p>`<code>python<br/>
sombre = True<br/>
presence = False<br/>
print(sombre and presence)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>and exige les deux conditions, or se contente d'une seule, not<br/>
inverse. Ces trois mots suffisent à écrire la règle de commande d'un<br/>
objet connecté.</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>False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : and n'est vrai que si ses deux côtés le sont. Le<br/>
second vaut ici False, donc le résultat aussi.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait le résultat de or, vrai dès qu'un seul côté<br/>
l'est. Avec and, les deux sont exigés en même temps.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que print affiche les deux variables. Il ne<br/>
reçoit qu'une seule valeur, celle que and vient de calculer.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>None</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : None marque l'absence de valeur. Une opération entre<br/>
booléens donne toujours True ou False.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q07 : La bonne condition d'alerte</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un capteur sur pile doit lancer une alerte lorsque son niveau de<br/>
batterie est strictement inférieur à 20 et que l'appareil n'est pas en<br/>
charge. La variable en_charge vaut True pendant une recharge.<br/>
Quelle ligne convient ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Traduire une phrase en condition demande de repérer le mot de liaison,<br/>
ici « et », et la négation, ici « n'est pas ». and traduit le premier,<br/>
not la seconde.</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="0" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if niveau &lt; 20 or not en_charge:<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : avec or, une seule des deux conditions suffit. L'alerte<br/>
partirait pour un capteur chargé à 80 %, au seul motif qu'il n'est<br/>
pas branché.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if niveau &lt; 20 and en_charge:<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette ligne réclame l'inverse, une batterie basse pendant<br/>
la recharge. L'alerte ne partirait jamais pour un appareil<br/>
débranché.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if not niveau &lt; 20 and not en_charge:<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : not niveau &lt; 20 exige un niveau d'au moins 20. La<br/>
condition serait vraie pour un capteur plein et débranché, jamais<br/>
pour un capteur vide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if niveau &lt; 20 and not en_charge:<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : and réunit les deux exigences et not inverse la<br/>
valeur de en_charge, ce qui traduit « pas en charge ».</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q08 : Ce que renvoie input</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un questionnaire en ligne réclame un nombre.</p>
<p>`<code>python<br/>
reponse = input("Combien de messages as-tu reçus ? ")<br/>
</code></p>
<p>L'utilisateur tape 12. Que contient reponse` ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>input rend toujours une chaîne de caractères. Pour calculer avec la<br/>
saisie, il faut la convertir, par exemple avec int(reponse) pour<br/>
obtenir un entier.</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="0" format="html">
    <text><![CDATA[<p>L'entier 12, converti par Python</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune conversion n'a lieu d'elle-même. Obtenir un entier<br/>
demande de l'écrire, avec int(reponse).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le flottant 12.0, issu du clavier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun point décimal n'a été saisi, et le clavier ne<br/>
convertit rien. La saisie arrive telle qu'elle a été tapée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La chaîne de caractères « 12 »</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : input rend toujours une chaîne, faite ici des deux<br/>
caractères 1 et 2, même quand la saisie ressemble à un nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le booléen True, la saisie n'étant pas vide</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un booléen ne sert qu'à répondre par vrai ou faux. input<br/>
rend le texte saisi, sans le juger.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q09 : Une addition qui échoue</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme s'arrête sur une erreur.</p>
<p>`<code>python<br/>
reponse = input("Nombre de messages : ")<br/>
total = reponse + 1<br/>
print(total)<br/>
</code>`</p>
<p>Pourquoi ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le signe + additionne deux nombres et met deux chaînes bout à bout,<br/>
mais ne mélange pas les deux genres. Toute saisie destinée à un calcul<br/>
doit d'abord être convertie.</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="0" format="html">
    <text><![CDATA[<p>Parce que la variable total n'a pas été créée avant d'être<br/>
utilisée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la deuxième ligne crée justement total. Une variable naît<br/>
de sa première affectation, elle n'a pas à être annoncée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Parce que input renvoie une chaîne, et non un entier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python refuse d'ajouter un entier à une chaîne et<br/>
signale TypeError: can only concatenate str (not "int") to str.<br/>
Il faut écrire int(reponse) + 1.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que le texte affiché par input contient un deux-points</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le texte passé à input est un simple message d'invite.<br/>
Son contenu n'a aucun effet sur le calcul qui suit.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que print ne sait afficher que des chaînes de caractères</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : print affiche aussi bien un entier qu'une chaîne.<br/>
L'erreur survient avant l'affichage, sur la ligne de l'addition.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q10 : Tester une égalité</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un thermostat doit réagir quand la température relevée vaut exactement<br/>
30. Quelle ligne écrit ce test ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un signe simple affecte, un signe doublé compare. La confusion est si<br/>
répandue que Python propose lui-même la correction dans son message<br/>
d'erreur.</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>if temperature == 30:</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le signe doublé compare deux valeurs et donne True<br/>
ou False. C'est exactement ce qu'une condition attend.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>if temperature = 30:</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le signe simple range une valeur dans une variable, il ne<br/>
compare rien. Python refuse la ligne et signale une SyntaxError.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>if temperature === 30:</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le signe triplé vient d'un autre langage. Python ne le<br/>
connaît pas et signale SyntaxError: invalid syntax.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>if egale(temperature, 30):</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune fonction de ce nom n'existe. Python signale<br/>
NameError: name 'egale' is not defined au moment de l'appel.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q11 : La branche retenue</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un capteur de qualité de l'air range son relevé en trois catégories.</p>
<p>`<code>python<br/>
indice = 55<br/>
if indice &lt; 50:<br/>
    print("bon")<br/>
elif indice &lt; 100:<br/>
    print("moyen")<br/>
else:<br/>
    print("mauvais")<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les conditions sont examinées de haut en bas et la première vraie<br/>
l'emporte. Celles qui la suivent ne sont même pas évalué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="0" format="html">
    <text><![CDATA[<p>bon</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 55 n'est pas inférieur à 50. La première condition est<br/>
donc fausse et sa branche est sautée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>mauvais</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la branche else ne sert que si aucune condition n'a été<br/>
trouvée vraie. Celle du elif l'est ici.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>moyen</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la première condition est fausse, la deuxième est<br/>
vraie puisque 55 est inférieur à 100. Seule sa branche s'exécute.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>bon puis moyen</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que plusieurs branches peuvent s'exécuter. Un<br/>
enchaînement if, elif, else n'en retient jamais qu'une.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q12 : Une branche jamais atteinte</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme classe une vitesse relevée par un radar, mais il n'affiche<br/>
jamais « autoroute », quelle que soit la vitesse.</p>
<p>`<code>python<br/>
vitesse = 120<br/>
if vitesse &gt; 50:<br/>
    print("hors agglomération")<br/>
elif vitesse &gt; 110:<br/>
    print("autoroute")<br/>
else:<br/>
    print("agglomération")<br/>
</code>`</p>
<p>Comment l'expliquer ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dans un enchaînement de conditions, l'ordre compte autant que les<br/>
seuils. Quand les intervalles se recouvrent, la condition la plus<br/>
exigeante doit venir en tête.</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="0" format="html">
    <text><![CDATA[<p>Parce qu'une instruction elif ne peut pas tester deux fois la<br/>
même variable</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : rien n'interdit de tester plusieurs fois la même variable.<br/>
C'est même le procédé habituel pour découper un intervalle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que la branche else est choisie dès que deux conditions<br/>
sont vraies</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : else n'entre en jeu que si toutes les conditions sont<br/>
fausses. La première étant vraie, else est écarté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce qu'il manque un if devant la seconde condition, qui n'est<br/>
jamais lue</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : elif joue déjà le rôle d'un if rattaché au premier<br/>
test. La ligne est correctement écrite, c'est son rang qui pose<br/>
problème.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Parce que toute vitesse dépassant 110 dépasse déjà 50, si bien que<br/>
la première branche l'emporte</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 120 est supérieur à 50, donc la première branche est<br/>
retenue et le reste de l'enchaînement est ignoré. Il faudrait<br/>
tester d'abord le seuil le plus élevé.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q13 : Le nombre de tours d'une boucle</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un programme de test envoie plusieurs requêtes à un serveur.</p>
<p>`<code>python<br/>
for i in range(5):<br/>
    print("requête envoyée")<br/>
</code>`</p>
<p>Combien de fois le message est-il affiché ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>range(n) parcourt les entiers de 0 à n - 1, soit exactement n<br/>
valeurs. Le nombre de tours se lit donc directement sur l'argument.</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="0" format="html">
    <text><![CDATA[<p>4 fois, la valeur 0 ne comptant pas pour un tour</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : range(5) commence bel et bien à 0, et ce premier passage<br/>
exécute la ligne comme tous les autres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>5 fois, une par valeur parcourue</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : range(5) fournit 0, 1, 2, 3 et 4, soit cinq<br/>
valeurs, donc cinq tours de boucle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>6 fois, les valeurs allant de 0 à 5 comprises</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la borne écrite est exclue. range(5) s'arrête à 4 et ne<br/>
fournit jamais la valeur 5.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1 fois, seul le dernier tour affichant le message</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la ligne indentée est exécutée à chaque tour, et non au<br/>
seul dernier. C'est tout l'intérêt d'une boucle.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q14 : Une plage de valeurs</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un objet connecté effectue un relevé à chaque heure d'une plage<br/>
horaire.</p>
<p>`<code>python<br/>
compte = 0<br/>
for heure in range(2, 8):<br/>
    compte = compte + 1<br/>
print(compte)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>range(a, b) parcourt les entiers de a à b - 1, soit b - a<br/>
valeurs. Ici, 8 moins 2 donne bien six tours.</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>6</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la boucle parcourt 2, 3, 4, 5, 6 et 7, soit six<br/>
valeurs. La borne 8 est exclue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : retire une valeur de trop. La borne de départ, elle, est<br/>
bien parcourue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : compte la borne 8, qui est pourtant exclue. La boucle<br/>
s'arrête à 7.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>8</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : prend la borne de fin pour le nombre de tours. Le départ<br/>
à 2 retire deux valeurs au compte.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q15 : Une file de signalements traitée par lots</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une équipe de modération traite 100 signalements par lots de 30.</p>
<p>`<code>python<br/>
restants = 100<br/>
tours = 0<br/>
while restants &gt; 0:<br/>
    restants = restants - 30<br/>
    tours = tours + 1<br/>
print(tours, restants)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une boucle while examine sa condition avant chaque tour, jamais au<br/>
milieu. Le dernier lot est donc entamé en entier, même s'il dépasse ce<br/>
qui restait à traiter.</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="0" format="html">
    <text><![CDATA[<p>3 10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : après trois tours il reste 10 signalements, ce qui est<br/>
strictement supérieur à 0. La condition est encore vraie et un<br/>
quatrième tour a lieu.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4 0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la soustraction retire 30 à chaque tour, sans s'ajuster au<br/>
reste. Le quatrième tour fait passer le total sous zéro.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>4 -20</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les valeurs passent par 70, 40, 10 puis -20, soit<br/>
quatre tours. La condition n'est examinée qu'en début de tour.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5 -50</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ajoute un tour de trop. Dès que restants vaut -20, la<br/>
condition est fausse et la boucle s'arrête.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q16 : Une boucle qui ne s'arrête pas</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme doit décompter les blocs d'un fichier restant à recevoir.</p>
<p>`<code>python<br/>
restants = 10<br/>
while restants &gt; 0:<br/>
    print(restants)<br/>
</code>`</p>
<p>Que fait-il réellement ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Toute boucle while réclame une instruction qui rapproche la condition<br/>
de sa fin. Sans elle, le programme tourne sans terme et il faut<br/>
l'interrompre à la main.</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="0" format="html">
    <text><![CDATA[<p>Il affiche 10 une seule fois, puis passe à la suite</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : while n'exécute pas son bloc une fois pour toutes. Il le<br/>
répète tant que la condition reste vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il n'affiche rien, la condition étant fausse au départ</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 10 est bien supérieur à 0. La condition est donc vraie dès<br/>
le premier examen et la boucle démarre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il affiche les nombres de 10 jusqu'à 1, puis s'arrête</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le comportement attendu, mais aucune ligne ne<br/>
diminue restants. Il faudrait ajouter restants = restants - 1<br/>
dans le bloc.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Il affiche 10 sans jamais s'arrêter</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : rien ne modifie restants, qui vaut 10 à chaque<br/>
examen de la condition. Le même nombre défile indéfiniment.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q17 : Une mémoire qui se remplit</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le nombre de relevés stockés par un capteur est multiplié par trois<br/>
chaque jour.</p>
<p>`<code>python<br/>
releves = 5<br/>
jours = 0<br/>
while releves &lt; 100:<br/>
    releves = releves * 3<br/>
    jours = jours + 1<br/>
print(jours, releves)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une multiplication répétée fait grimper une valeur très vite : trois<br/>
tours suffisent à passer de 5 à 135. La boucle s'arrête au premier<br/>
examen où la condition devient 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>3 135</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les valeurs passent par 15, 45 puis 135, soit trois<br/>
tours. Le troisième a lieu parce que 45 est encore inférieur à 100.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2 45</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : s'arrête à 45, qui est pourtant inférieur à 100. La<br/>
condition reste vraie, donc un tour de plus a lieu.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3 45</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : compte trois tours mais garde la valeur du deuxième. Le<br/>
troisième tour multiplie encore par 3.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4 135</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ajoute un tour de trop. Une fois releves à 135, la<br/>
condition est fausse et la boucle s'arrête.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q18 : Une boucle de cinq en cinq</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un programme de cartographie place un repère tous les cinq<br/>
kilomètres le long d'un parcours.<br/>
`<code>python<br/>
compteur = 0<br/>
for borne in range(5, 31, 5):<br/>
    compteur = compteur + 1<br/>
print(compteur)<br/>
</code>`<br/>
Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dans range(debut, fin, pas), la boucle part de debut, avance<br/>
de pas à chaque tour et s'arrête avant fin. Ici elle prend les<br/>
six valeurs 5, 10, 15, 20, 25 et 30.</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>6</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la boucle parcourt 5, 10, 15, 20, 25 et 30,<br/>
soit six valeurs, car le pas de 5 part de 5 et s'arrête avant<br/>
31. Le compteur est donc incrémenté six fois.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tu as sans doute compté 30 divisé par 5 en oubliant<br/>
que la borne 30 est atteinte. Les valeurs parcourues sont 5,<br/>
10, 15, 20, 25 et 30.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>26</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tu as compté les entiers de 5 à 30 en ignorant le<br/>
pas. Le troisième nombre de range fixe justement l'écart<br/>
entre deux valeurs successives.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>31</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tu as pris la borne de fin pour le nombre de tours.<br/>
Cette borne est exclue, et le pas de 5 ne retient que six<br/>
valeurs.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q19 : La branche d'un relevé doux</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une station météo qualifie la température relevée.<br/>
`<code>python<br/>
temp = 19<br/>
if temp &lt; 5:<br/>
    resultat = "gel"<br/>
elif temp &lt; 18:<br/>
    resultat = "frais"<br/>
elif temp &lt; 25:<br/>
    resultat = "doux"<br/>
else:<br/>
    resultat = "chaud"<br/>
print(resultat)<br/>
</code>`<br/>
Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les conditions d'une suite if, elif, else sont examinées<br/>
dans l'ordre, et la première qui est vraie emporte tout : son bloc<br/>
s'exécute, les suivants sont abandonnés.</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="0" format="html">
    <text><![CDATA[<p>frais</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la condition temp &lt; 18 est fausse pour 19, donc<br/>
cette branche est ignorée et l'examen se poursuit avec la<br/>
suivante.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>doux</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 19 n'est ni inférieur à 5 ni inférieur à 18,<br/>
mais il est inférieur à 25. C'est donc la troisième branche<br/>
qui s'exécute.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>chaud</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la branche else ne s'exécute que si toutes les<br/>
conditions précédentes sont fausses. Or temp &lt; 25 est vraie<br/>
pour 19.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>frais puis doux</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : dans une suite if, elif, else, une seule<br/>
branche s'exécute. Dès qu'une condition est vraie, les autres<br/>
ne sont plus examinées.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q20 : Un partage répété par deux</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un programme réduit de moitié la taille d'une image tant qu'elle<br/>
dépasse dix unités.<br/>
`<code>python<br/>
reste = 100<br/>
tours = 0<br/>
while reste &gt; 10:<br/>
    reste = reste // 2<br/>
    tours = tours + 1<br/>
print(tours)<br/>
</code>`<br/>
Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une boucle non bornée répète son bloc tant que sa condition est<br/>
vraie, sans qu'on sache d'avance combien de tours auront lieu.<br/>
Ici, la division entière par deux mène de 100 à 6 en quatre tours.</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>4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : reste prend successivement 50, 25, 12 puis<br/>
6. À ce moment la condition devient fausse, après quatre<br/>
tours.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tu t'es arrêté à 12, qui dépasse encore 10. Un tour<br/>
supplémentaire a lieu et ramène reste à 6.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tu as compté un tour de trop. Une fois reste à 6,<br/>
la condition est fausse et la boucle s'arrête sans exécuter<br/>
son bloc.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tu as pris le seuil de la condition pour le nombre<br/>
de tours. Comme la valeur est divisée par deux à chaque fois,<br/>
elle descend bien plus vite.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q21 : Un argument manquant</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un programme calcule le coût d'un trajet.<br/>
``python<br/>
def cout(distance, prix_km):<br/>
    return distance * prix_km</p>
<p>print(cout(12))<br/>
``<br/>
Que se passe-t-il à l'exécution ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un appel doit fournir autant d'arguments que la définition compte<br/>
de paramètres, dans le même ordre. Ici, cout(12, 3) renverrait<br/>
36, tandis que cout(12) est refusé.</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>Python signale une erreur, car il manque un argument<br/>
à l'appel</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la fonction attend deux arguments et n'en<br/>
reçoit qu'un. Python refuse l'appel en signalant l'argument<br/>
absent, ici prix_km.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le programme affiche 12, la valeur du seul<br/>
argument fourni</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction ne peut pas calculer son produit sans<br/>
connaître le prix. Aucun calcul n'a lieu, l'appel est refusé<br/>
avant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le programme affiche 0, le paramètre absent<br/>
valant zéro</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un paramètre sans argument ne prend aucune valeur par<br/>
défaut. Il faut soit fournir l'argument, soit prévoir une<br/>
valeur par défaut dans la définition.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le programme demande la valeur manquante à<br/>
l'utilisateur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction ne dialogue jamais d'elle-même avec<br/>
l'utilisateur. Elle reçoit ses arguments au moment de l'appel,<br/>
et seulement là.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q22 : La somme de quatre relevés</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Un capteur a enregistré quatre températures.</p>
<p>`<code>python<br/>
mesures = [18, 20, 22, 24]<br/>
total = 0<br/>
for m in mesures:<br/>
    total = total + m<br/>
print(total, len(mesures))<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le schéma de l'accumulateur revient sans cesse : une variable mise à 0<br/>
avant la boucle, augmentée à chaque tour. Divisé par len, ce total<br/>
donne la moyenne.</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="0" format="html">
    <text><![CDATA[<p>24 4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 24 est le dernier relevé, pas la somme. La variable total<br/>
accumule les quatre valeurs au fil de la boucle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>84 3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : len donne le nombre d'éléments, soit 4, et non le plus<br/>
grand indice de la liste.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>84 4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la boucle ajoute 18, 20, 22 puis 24, ce qui fait 84,<br/>
et la liste compte quatre éléments.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>18 4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 18 est le premier relevé. La boucle ne s'arrête pas au<br/>
premier tour, elle parcourt toute la liste.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q23 : Un maximum jamais trouvé</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme cherche la température la plus haute d'une nuit d'hiver.</p>
<p>`<code>python<br/>
temperatures = [-3, -8, -1, -5]<br/>
maxi = 0<br/>
for t in temperatures:<br/>
    if t &gt; maxi:<br/>
        maxi = t<br/>
print(maxi)<br/>
</code>`</p>
<p>Qu'affiche-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Initialiser un maximum à 0 revient à supposer que toutes les valeurs<br/>
sont positives. Mieux vaut partir du premier élément de la liste, avec<br/>
maxi = temperatures[0].</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="0" format="html">
    <text><![CDATA[<p>-1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la réponse attendue, mais le programme ne la trouve<br/>
pas. Aucun relevé ne dépasse la valeur du départ, qui reste donc en<br/>
place.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les quatre relevés sont négatifs, donc aucun n'est<br/>
supérieur à 0. La variable maxi garde la valeur de son<br/>
initialisation.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>-8</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le relevé le plus bas, que la comparaison &gt; ne<br/>
retient jamais. Le test cherche les valeurs supérieures.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>-3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est le premier relevé, qui aurait servi de point de<br/>
départ si l'initialisation avait été mieux choisie. Elle vaut 0.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q24 : Compter les mesures fortes</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme doit afficher le nombre de mesures strictement supérieures<br/>
à 25.</p>
<p>`<code>python<br/>
mesures = [12, 31, 8, 45, 27]<br/>
compte = 0<br/>
for m in mesures:<br/>
    ...<br/>
print(compte)<br/>
</code>`</p>
<p>Par quoi remplacer les points de suspension ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un compteur avance toujours de 1, quelle que soit la valeur examinée.<br/>
C'est ce qui le distingue d'un accumulateur, qui ajoute la valeur<br/>
elle-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="0" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if m &gt; 25:<br/>
    compte = m<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : range la mesure elle-même dans le compteur au lieu de<br/>
l'augmenter. Le programme afficherait 27, la dernière mesure<br/>
retenue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if compte &gt; 25:<br/>
    compte = compte + 1<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : teste le compteur au lieu de la mesure. Comme il part de 0<br/>
et n'atteint jamais 25, le programme afficherait 0.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if m &gt; 25:<br/>
    compte = compte + m<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ajoute la valeur de la mesure au lieu d'ajouter 1. Le<br/>
programme afficherait 103, la somme des mesures retenues.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>`<code>python<br/>
if m &gt; 25:<br/>
    compte = compte + 1<br/>
</code>`</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : à chaque mesure supérieure à 25, le compteur avance<br/>
de 1. Le programme affiche 3, pour 31, 45 et 27.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q25 : Le volume d'un groupe de discussion</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Dans un groupe de discussion, chaque membre envoie le même nombre de<br/>
messages, et chaque message pèse 2 kilo-octets.</p>
<p>``python<br/>
def volume(membres, messages):<br/>
    return membres <em> messages </em> 2</p>
<p>print(volume(20, 15))<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un appel de fonction remplace les paramètres par les arguments donnés,<br/>
exécute le corps, puis rend la valeur écrite après return. C'est<br/>
cette valeur que print affiche.</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>600</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 20 membres envoient chacun 15 messages, soit 300<br/>
messages, et chacun pèse 2 kilo-octets.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>300</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : oublie les 2 kilo-octets par message. C'est le nombre de<br/>
messages, et non le volume échangé.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>70</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : additionne les deux paramètres au lieu de les multiplier,<br/>
avant de multiplier par 2.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>40</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ne tient compte que du nombre de membres. Les deux<br/>
paramètres interviennent dans le calcul.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q26 : L'ordre des arguments</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Cette fonction calcule l'écart entre deux bornes kilométriques.</p>
<p>``python<br/>
def ecart(depart, arrivee):<br/>
    return arrivee - depart</p>
<p>print(ecart(12, 5), ecart(5, 12))<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les arguments d'un appel prennent la place des paramètres dans l'ordre<br/>
où ils sont écrits. Deux appels aux mêmes valeurs rangées autrement ne<br/>
donnent donc pas le même résultat.</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="0" format="html">
    <text><![CDATA[<p>7 -7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : intervertit les deux résultats. Au premier appel, depart<br/>
vaut 12 et arrivee vaut 5, donc la soustraction donne un nombre<br/>
négatif.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>7 7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que la fonction rend toujours un écart positif.<br/>
Elle applique la soustraction telle qu'elle est écrite, sans<br/>
corriger le signe.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>-7 7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les arguments prennent la place des paramètres dans<br/>
l'ordre, d'où 5 moins 12 au premier appel et 12 moins 5 au second.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>-7 -7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : donne le même signe aux deux appels. Échanger les<br/>
arguments change bien le signe du résultat.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q27 : Afficher ou renvoyer</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme emploie une fonction qui double une valeur.</p>
<p>``python<br/>
def doubler(valeur):<br/>
    print(valeur * 2)</p>
<p>resultat = doubler(5)<br/>
print(resultat)<br/>
``</p>
<p>Qu'affiche-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Afficher et renvoyer sont deux actions distinctes. print montre une<br/>
valeur à l'écran, return la rend au programme qui a fait l'appel. Une<br/>
fonction sans return rend None.</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="0" format="html">
    <text><![CDATA[<p>10 puis 10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que la fonction rend ce qu'elle affiche. Sans<br/>
return, l'appel ne rapporte aucune valeur utilisable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>10 puis None</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la fonction affiche 10, puis resultat reçoit<br/>
None, faute de return. La dernière ligne montre cette absence<br/>
de valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>10 seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : oublie la dernière ligne, qui affiche resultat. Elle<br/>
s'exécute et montre ce que l'appel a rapporté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>None puis 10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : inverse l'ordre. L'affichage écrit dans le corps de la<br/>
fonction a lieu pendant l'appel, donc avant la dernière ligne.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q28 : Un résultat qui se perd</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme veut doubler la largeur d'une image.</p>
<p>``python<br/>
def agrandir(valeur):<br/>
    valeur = valeur * 2<br/>
    return valeur</p>
<p>largeur = 640<br/>
agrandir(largeur)<br/>
print(largeur)<br/>
``</p>
<p>Qu'affiche-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction travaille sur ses propres variables. Pour conserver ce<br/>
qu'elle calcule, il faut ranger la valeur rendue dans une variable au<br/>
moment de l'appel.</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="0" format="html">
    <text><![CDATA[<p>1280</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la valeur calculée par la fonction, mais personne ne<br/>
la recueille. Il faudrait écrire largeur = agrandir(largeur).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>None</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction contient bien un return, et de toute façon la<br/>
dernière ligne affiche largeur, pas le résultat de l'appel.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la variable n'est jamais remise à zéro. Elle garde la<br/>
valeur reçue au moment de sa création.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>640</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le paramètre valeur est une variable propre à la<br/>
fonction. La modifier ne change rien à largeur, et le résultat<br/>
rendu n'est rangé nulle part.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q29 : Une fonction qui renvoie un booléen</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une moyenne n'a de sens qu'à partir de trois relevés.</p>
<p>``python<br/>
def assez(liste):<br/>
    return len(liste) &gt;= 3</p>
<p>matin = [18, 21]<br/>
journee = [18, 21, 22, 25]<br/>
print(assez(matin), assez(journee), assez(matin) or assez(journee))<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction peut rendre un booléen, qui s'emploie alors comme une<br/>
condition ou se combine avec and, or et not. La comparaison<br/>
écrite après return est évaluée avant d'être rendue.</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>False True True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : matin compte 2 éléments et journee en compte 4.<br/>
Le or est vrai dès qu'un seul des deux appels l'est.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>False True False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : or est vrai dès qu'une des deux valeurs l'est, et<br/>
l'appel sur journee rend justement True.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True False True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : intervertit les deux listes. C'est journee, avec ses<br/>
quatre éléments, qui atteint le seuil de trois.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>False False True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : journee compte quatre éléments, ce qui est bien<br/>
supérieur ou égal à 3. Le deuxième appel rend True.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Notions transversales de programmation — Q30 : Un appel incomplet</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Ce programme s'arrête sur une erreur au moment de l'appel.</p>
<p>``python<br/>
def surface(largeur, hauteur):<br/>
    return largeur * hauteur</p>
<p>print(surface(12))<br/>
``</p>
<p>Que reproche Python à ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un appel doit fournir une valeur pour chaque paramètre, dans l'ordre.<br/>
Le message d'erreur nomme même le paramètre qui manque, ici hauteur.</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="0" format="html">
    <text><![CDATA[<p>La fonction est appelée avant d'avoir été définie dans le fichier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la définition est bien écrite avant l'appel. Ce reproche<br/>
vaudrait pour un appel placé plus haut dans le fichier, et Python<br/>
signalerait alors une NameError.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La valeur 12 n'est pas d'un type admis pour une multiplication</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 12 est un entier, parfaitement multipliable. Le calcul n'a<br/>
même pas lieu, l'appel échouant avant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La fonction attend deux paramètres, or un seul argument est fourni</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python signale TypeError: surface() missing 1<br/>
required positional argument: 'hauteur'. Il faut fournir autant<br/>
d'arguments que de paramètres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La fonction ne renvoie rien, donc print n'a rien à afficher</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction contient un return et rendrait bien une<br/>
valeur si l'appel aboutissait. L'erreur survient avant.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
