<?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>
<pre><code>largeur = 1024
hauteur = 768
hauteur = largeur
largeur = 640</code></pre>
<p>Que vaut <code>hauteur</code> à la fin ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>En Python, le signe <code>=</code> 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 <code>largeur</code>. 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 <code>hauteur</code> la valeur<br/>
que <code>largeur</code> porte à cet instant, soit 1024. La ligne suivante ne<br/>
touche qu'à <code>largeur</code>.</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 <code>=</code> 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>
<pre><code>ville = "Lyon"
altitude = 173
humide = True
vitesse = 12.5</code></pre>
<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, <code>True</code> ou <code>False</code> 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><code>altitude</code>, 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><code>humide</code>, qui contient True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>True</code> 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><code>vitesse</code>, 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><code>ville</code>, qui contient "Lyon"</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les guillemets font de <code>Lyon</code> 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>
<pre><code>messages = 0
messages = messages + 3
messages = messages + 2
print(messages)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La ligne <code>messages = messages + 3</code> se lit en deux temps : on calcule<br/>
d'abord <code>messages + 3</code> avec la valeur actuelle, puis on range le<br/>
résultat dans <code>messages</code>. 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>
<pre><code>lat = 45
lon = 4
lat = lon
lon = lat
print(lat, lon)</code></pre>
<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><code>45 4</code></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 <code>lat</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>4 45</code></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 <code>lat</code> reçoit celle de <code>lon</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>4 4</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>lat</code> prend la valeur 4, puis <code>lon</code> reçoit cette<br/>
même valeur 4. L'ancienne valeur de <code>lat</code> n'existe plus nulle part.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>45 45</code></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ù <code>lon</code> recevrait d'abord la valeur de <code>lat</code>.</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>
<pre><code>print(7 // 2)</code></pre>
<p>Qu'affiche-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Trois opérateurs cohabitent : <code>/</code> donne un quotient décimal, <code>//</code> le<br/>
quotient entier, <code>%</code> 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 <code>7 / 2</code>, 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 : <code>//</code> 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 <code>7 % 2</code>, 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>
<pre><code>sombre = True
presence = False
print(sombre and presence)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>and</code> exige les deux conditions, <code>or</code> se contente d'une seule, <code>not</code><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><code>False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>and</code> n'est vrai que si ses deux côtés le sont. Le<br/>
second vaut ici <code>False</code>, donc le résultat aussi.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait le résultat de <code>or</code>, vrai dès qu'un seul côté<br/>
l'est. Avec <code>and</code>, les deux sont exigés en même temps.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True False</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que <code>print</code> affiche les deux variables. Il ne<br/>
reçoit qu'une seule valeur, celle que <code>and</code> vient de calculer.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>None</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>None</code> marque l'absence de valeur. Une opération entre<br/>
booléens donne toujours <code>True</code> ou <code>False</code>.</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 <code>en_charge</code> vaut <code>True</code> 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 ». <code>and</code> traduit le premier,<br/>
<code>not</code> 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[<pre><code>if niveau &lt; 20 or not en_charge:</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : avec <code>or</code>, 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[<pre><code>if niveau &lt; 20 and en_charge:</code></pre>]]></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[<pre><code>if not niveau &lt; 20 and not en_charge:</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>not niveau &lt; 20</code> 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[<pre><code>if niveau &lt; 20 and not en_charge:</code></pre>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>and</code> réunit les deux exigences et <code>not</code> inverse la<br/>
valeur de <code>en_charge</code>, 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>
<pre><code>reponse = input("Combien de messages as-tu reçus ? ")</code></pre>
<p>L'utilisateur tape 12. Que contient <code>reponse</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>input</code> rend toujours une chaîne de caractères. Pour calculer avec la<br/>
saisie, il faut la convertir, par exemple avec <code>int(reponse)</code> 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 <code>int(reponse)</code>.</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 : <code>input</code> 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. <code>input</code><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>
<pre><code>reponse = input("Nombre de messages : ")
total = reponse + 1
print(total)</code></pre>
<p>Pourquoi ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le signe <code>+</code> 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 <code>total</code> 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 <code>total</code>. 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 <code>input</code> 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 <code>TypeError: can only concatenate str (not "int") to str</code>.<br/>
Il faut écrire <code>int(reponse) + 1</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que le texte affiché par <code>input</code> contient un deux-points</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le texte passé à <code>input</code> 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 <code>print</code> ne sait afficher que des chaînes de caractères</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>print</code> 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><code>if temperature == 30:</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le signe doublé compare deux valeurs et donne <code>True</code><br/>
ou <code>False</code>. C'est exactement ce qu'une condition attend.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if temperature = 30:</code></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 <code>SyntaxError</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if temperature === 30:</code></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 <code>SyntaxError: invalid syntax</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>if egale(temperature, 30):</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune fonction de ce nom n'existe. Python signale<br/>
<code>NameError: name 'egale' is not defined</code> 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>
<pre><code>indice = 55
if indice &lt; 50:
    print("bon")
elif indice &lt; 100:
    print("moyen")
else:
    print("mauvais")</code></pre>
<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><code>bon</code></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><code>mauvais</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la branche <code>else</code> ne sert que si aucune condition n'a été<br/>
trouvée vraie. Celle du <code>elif</code> l'est ici.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>moyen</code></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><code>bon</code> puis <code>moyen</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que plusieurs branches peuvent s'exécuter. Un<br/>
enchaînement <code>if</code>, <code>elif</code>, <code>else</code> 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>
<pre><code>vitesse = 120
if vitesse &gt; 50:
    print("hors agglomération")
elif vitesse &gt; 110:
    print("autoroute")
else:
    print("agglomération")</code></pre>
<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 <code>elif</code> 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 <code>else</code> est choisie dès que deux conditions<br/>
sont vraies</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>else</code> n'entre en jeu que si toutes les conditions sont<br/>
fausses. La première étant vraie, <code>else</code> est écarté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce qu'il manque un <code>if</code> devant la seconde condition, qui n'est<br/>
jamais lue</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>elif</code> joue déjà le rôle d'un <code>if</code> 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>
<pre><code>for i in range(5):
    print("requête envoyée")</code></pre>
<p>Combien de fois le message est-il affiché ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>range(n)</code> parcourt les entiers de 0 à <code>n - 1</code>, soit exactement <code>n</code><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 : <code>range(5)</code> 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 : <code>range(5)</code> 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. <code>range(5)</code> 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>
<pre><code>compte = 0
for heure in range(2, 8):
    compte = compte + 1
print(compte)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>range(a, b)</code> parcourt les entiers de <code>a</code> à <code>b - 1</code>, soit <code>b - a</code><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>
<pre><code>restants = 100
tours = 0
while restants &gt; 0:
    restants = restants - 30
    tours = tours + 1
print(tours, restants)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une boucle <code>while</code> 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><code>3 10</code></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><code>4 0</code></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><code>4 -20</code></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><code>5 -50</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ajoute un tour de trop. Dès que <code>restants</code> 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>
<pre><code>restants = 10
while restants &gt; 0:
    print(restants)</code></pre>
<p>Que fait-il réellement ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Toute boucle <code>while</code> 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 : <code>while</code> 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 <code>restants</code>. Il faudrait ajouter <code>restants = restants - 1</code><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 <code>restants</code>, 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>
<pre><code>releves = 5
jours = 0
while releves &lt; 100:
    releves = releves * 3
    jours = jours + 1
print(jours, releves)</code></pre>
<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><code>3 135</code></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><code>2 45</code></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><code>3 45</code></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><code>4 135</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ajoute un tour de trop. Une fois <code>releves</code> à 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/>
<pre><code>compteur = 0
for borne in range(5, 31, 5):
    compteur = compteur + 1
print(compteur)</code></pre><br/>
Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Dans <code>range(debut, fin, pas)</code>, la boucle part de <code>debut</code>, avance<br/>
de <code>pas</code> à chaque tour et s'arrête avant <code>fin</code>. 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><code>6</code></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><code>5</code></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><code>26</code></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 <code>range</code> fixe justement l'écart<br/>
entre deux valeurs successives.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>31</code></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/>
<pre><code>temp = 19
if temp &lt; 5:
    resultat = "gel"
elif temp &lt; 18:
    resultat = "frais"
elif temp &lt; 25:
    resultat = "doux"
else:
    resultat = "chaud"
print(resultat)</code></pre><br/>
Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les conditions d'une suite <code>if</code>, <code>elif</code>, <code>else</code> 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><code>frais</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la condition <code>temp &lt; 18</code> 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><code>doux</code></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><code>chaud</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la branche <code>else</code> ne s'exécute que si toutes les<br/>
conditions précédentes sont fausses. Or <code>temp &lt; 25</code> est vraie<br/>
pour 19.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>frais</code> puis <code>doux</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : dans une suite <code>if</code>, <code>elif</code>, <code>else</code>, 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/>
<pre><code>reste = 100
tours = 0
while reste &gt; 10:
    reste = reste // 2
    tours = tours + 1
print(tours)</code></pre><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><code>4</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>reste</code> 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><code>3</code></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 <code>reste</code> à 6.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tu as compté un tour de trop. Une fois <code>reste</code> à 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><code>10</code></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/>
<pre><code>def cout(distance, prix_km):
    return distance * prix_km

print(cout(12))</code></pre><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, <code>cout(12, 3)</code> renverrait<br/>
36, tandis que <code>cout(12)</code> 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 <code>prix_km</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le programme affiche <code>12</code>, 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 <code>0</code>, 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>
<pre><code>mesures = [18, 20, 22, 24]
total = 0
for m in mesures:
    total = total + m
print(total, len(mesures))</code></pre>
<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 <code>len</code>, 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><code>24 4</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 24 est le dernier relevé, pas la somme. La variable <code>total</code><br/>
accumule les quatre valeurs au fil de la boucle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>84 3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>len</code> 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><code>84 4</code></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><code>18 4</code></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>
<pre><code>temperatures = [-3, -8, -1, -5]
maxi = 0
for t in temperatures:
    if t &gt; maxi:
        maxi = t
print(maxi)</code></pre>
<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/>
<code>maxi = temperatures[0]</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="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 <code>maxi</code> 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 <code>&gt;</code> 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>
<pre><code>mesures = [12, 31, 8, 45, 27]
compte = 0
for m in mesures:
    ...
print(compte)</code></pre>
<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[<pre><code>if m &gt; 25:
    compte = m</code></pre>]]></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[<pre><code>if compte &gt; 25:
    compte = compte + 1</code></pre>]]></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[<pre><code>if m &gt; 25:
    compte = compte + m</code></pre>]]></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[<pre><code>if m &gt; 25:
    compte = compte + 1</code></pre>]]></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>
<pre><code>def volume(membres, messages):
    return membres * messages * 2

print(volume(20, 15))</code></pre>
<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 <code>return</code>. C'est<br/>
cette valeur que <code>print</code> 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>
<pre><code>def ecart(depart, arrivee):
    return arrivee - depart

print(ecart(12, 5), ecart(5, 12))</code></pre>
<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><code>7 -7</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : intervertit les deux résultats. Au premier appel, <code>depart</code><br/>
vaut 12 et <code>arrivee</code> vaut 5, donc la soustraction donne un nombre<br/>
négatif.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>7 7</code></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><code>-7 7</code></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><code>-7 -7</code></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>
<pre><code>def doubler(valeur):
    print(valeur * 2)

resultat = doubler(5)
print(resultat)</code></pre>
<p>Qu'affiche-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Afficher et renvoyer sont deux actions distinctes. <code>print</code> montre une<br/>
valeur à l'écran, <code>return</code> la rend au programme qui a fait l'appel. Une<br/>
fonction sans <code>return</code> rend <code>None</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="0" format="html">
    <text><![CDATA[<p><code>10</code> puis <code>10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : suppose que la fonction rend ce qu'elle affiche. Sans<br/>
<code>return</code>, l'appel ne rapporte aucune valeur utilisable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>10</code> puis <code>None</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la fonction affiche 10, puis <code>resultat</code> reçoit<br/>
<code>None</code>, faute de <code>return</code>. La dernière ligne montre cette absence<br/>
de valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>10</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : oublie la dernière ligne, qui affiche <code>resultat</code>. 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><code>None</code> puis <code>10</code></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>
<pre><code>def agrandir(valeur):
    valeur = valeur * 2
    return valeur

largeur = 640
agrandir(largeur)
print(largeur)</code></pre>
<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 <code>largeur = agrandir(largeur)</code>.</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 <code>return</code>, et de toute façon la<br/>
dernière ligne affiche <code>largeur</code>, 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 <code>valeur</code> est une variable propre à la<br/>
fonction. La modifier ne change rien à <code>largeur</code>, 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>
<pre><code>def assez(liste):
    return len(liste) &gt;= 3

matin = [18, 21]
journee = [18, 21, 22, 25]
print(assez(matin), assez(journee), assez(matin) or assez(journee))</code></pre>
<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 <code>and</code>, <code>or</code> et <code>not</code>. La comparaison<br/>
écrite après <code>return</code> 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><code>False True True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>matin</code> compte 2 éléments et <code>journee</code> en compte 4.<br/>
Le <code>or</code> est vrai dès qu'un seul des deux appels l'est.</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'une des deux valeurs l'est, et<br/>
l'appel sur <code>journee</code> rend justement <code>True</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True False True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : intervertit les deux listes. C'est <code>journee</code>, avec ses<br/>
quatre éléments, qui atteint le seuil de trois.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False False True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>journee</code> compte quatre éléments, ce qui est bien<br/>
supérieur ou égal à 3. Le deuxième appel rend <code>True</code>.</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>
<pre><code>def surface(largeur, hauteur):
    return largeur * hauteur

print(surface(12))</code></pre>
<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 <code>hauteur</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="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 <code>NameError</code>.</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 <code>TypeError: surface() missing 1<br/>
required positional argument: 'hauteur'</code>. 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 <code>print</code> n'a rien à afficher</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction contient un <code>return</code> et rendrait bien une<br/>
valeur si l'appel aboutissait. L'erreur survient avant.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
