<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/SNT/7. Fonctions</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Définir une fonction avec def, l'appeler ; paramètres et arguments ;<br/>
la valeur renvoyée par return, à distinguer d'un affichage par<br/>
print ; une fonction sans return renvoie None ; réutiliser un<br/>
résultat dans un calcul ou un test ; les variables locales.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q01 : Appeler une fonction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def double(x):<br/>
    return 2 * x<br/>
print(double(7))<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Appeler une fonction, c'est exécuter son bloc avec les arguments<br/>
fournis. La valeur qui suit return remplace l'appel dans<br/>
l'expression, ici dans print.</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>Rien, une fonction n'affiche pas</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction n'affiche rien, mais print affiche la<br/>
valeur qu'elle renvoie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 7 est l'argument. La fonction renvoie 2 fois sa valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>14</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel double(7) exécute la fonction avec x<br/>
égal à 7 et renvoie 14, que print affiche.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2 * x</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : return renvoie le résultat du calcul, pas le texte de<br/>
la formule.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q02 : Paramètre et argument</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une fonction est définie par def aire(largeur, hauteur): et<br/>
appelée par aire(4, 3). Que représente le 4 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les paramètres sont les noms écrits dans la définition ; les<br/>
arguments sont les valeurs fournies à l'appel. Ils sont associés<br/>
dans l'ordre.</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>Le nom du premier paramètre de la fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le nom du paramètre est largeur. 4 est la valeur<br/>
qu'il reçoit lors de cet appel.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La valeur renvoyée par la fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la valeur renvoyée est calculée par la fonction, ici<br/>
probablement 12.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La valeur du paramètre hauteur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'ordre compte, le premier argument va au premier<br/>
paramètre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>L'argument transmis au paramètre largeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les arguments sont associés aux paramètres dans<br/>
l'ordre. largeur vaut 4 et hauteur vaut 3 pendant l'appel.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q03 : Définir sans appeler</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def saluer():<br/>
    print("Bonjour")<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Définir une fonction ne l'exécute pas. Le bloc ne tourne qu'au moment<br/>
de l'appel, écrit avec le nom suivi de parenthèses.</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>Bonjour, une seule fois, à la définition</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le bloc d'une fonction ne s'exécute qu'à l'appel, et<br/>
aucun appel n'est écrit.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, il manque return à la fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : return n'est pas obligatoire. Une fonction peut se<br/>
contenter d'afficher.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Bonjour sans fin, la fonction se relance</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction n'est pas une boucle, et elle n'est même<br/>
pas appelée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Rien, la fonction n'est jamais appelée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : def prépare la fonction sans l'exécuter. Il<br/>
faudrait ajouter la ligne saluer().</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q04 : Afficher n'est pas renvoyer</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>``python<br/>
def carre(n):<br/>
    print(n * n)</p>
<p>r = carre(3)<br/>
print(r)<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>print montre une valeur à l'écran, return la transmet au<br/>
programme. Une fonction sans return renvoie None, et son<br/>
résultat ne peut pas être réutilisé.</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>9 puis None</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel affiche 9, mais sans return la<br/>
fonction renvoie None, qui est rangé dans r puis affiché.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>9 seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le second print affiche bien quelque chose, la valeur<br/>
None.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>None puis 9</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'affichage de 9 a lieu pendant l'appel, donc avant le<br/>
second print.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>9 puis 9</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : print dans la fonction affiche, il ne renvoie rien.<br/>
r ne reçoit pas 9.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q05 : Réutiliser un résultat</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def prix_ttc(ht):<br/>
    return ht * 1.2<br/>
total = prix_ttc(10) + prix_ttc(20)<br/>
print(total)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une valeur renvoyée s'utilise comme n'importe quelle valeur : dans<br/>
une addition, une affectation ou un autre appel. C'est ce qui rend<br/>
return plus puissant que print.</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>12.0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 12.0 n'est que le premier appel, le second est ajouté.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>36.0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les deux appels renvoient 12.0 et 24.0, dont la<br/>
somme est 36.0.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>30</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 30 est la somme des prix hors taxe, avant la<br/>
multiplication.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>36</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la multiplication par 1.2 donne des flottants, la somme<br/>
est affichée 36.0.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q06 : Deux paramètres, un ordre</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def soustraire(a, b):<br/>
    return a - b<br/>
print(soustraire(3, 10))<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les arguments sont affectés aux paramètres dans l'ordre de l'appel.<br/>
Inverser deux arguments change le résultat sans provoquer d'erreur,<br/>
d'où l'importance de l'ordre.</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>Une erreur, le résultat est négatif</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un résultat négatif est un entier comme un autre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>-7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : a vaut 3 et b vaut 10, la fonction renvoie<br/>
3 moins 10.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'ordre des arguments compte, le premier va dans a.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>13</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction soustrait, elle n'additionne pas.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q07 : Ce qui suit return</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>``python<br/>
def test(x):<br/>
    return x + 1<br/>
    print("Après")</p>
<p>print(test(1))<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>return renvoie une valeur et quitte la fonction sur-le-champ. Du<br/>
code écrit après un return inconditionnel est du code mort.</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>Après puis 2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction s'arrête au return, avant le print.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2 puis Après</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : après un return, plus rien ne s'exécute dans la<br/>
fonction.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>2 seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : return termine immédiatement la fonction. La<br/>
ligne qui suit n'est jamais exécutée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Après seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'appel renvoie 2, que print affiche, et Après<br/>
n'est jamais atteint.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q08 : Une fonction qui répond par oui ou non</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>``python<br/>
def est_majeur(age):<br/>
    return age &gt;= 18</p>
<p>print(est_majeur(20), est_majeur(12))<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction peut renvoyer directement une comparaison. Elle sert<br/>
alors de test réutilisable, par exemple dans un if.</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>20 12</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction ne renvoie pas l'âge mais un booléen.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 12 n'est pas supérieur ou égal à 18.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>False True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'inverse, 20 est supérieur ou égal à 18.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>True False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la fonction renvoie le résultat de la<br/>
comparaison, vrai pour 20 et faux pour 12.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q09 : Une variable locale</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>``python<br/>
def calcul():<br/>
    resultat = 10<br/>
    return resultat</p>
<p>calcul()<br/>
print(resultat)<br/>
``</p>
<p>Que se passe-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les variables créées dans une fonction sont locales : elles<br/>
disparaissent à la fin de l'appel. Pour transmettre une valeur à<br/>
l'extérieur, on utilise return.</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>Python affiche le mot resultat, sans sa valeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : print affiche la valeur d'une variable, et ici la<br/>
variable n'existe pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python affiche 10, la valeur renvoyée par l'appel</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour obtenir 10, il faudrait écrire<br/>
print(calcul()), ou ranger la valeur renvoyée dans une<br/>
variable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python affiche None, faute de valeur conservée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction renvoie bien 10, mais ce résultat n'est pas<br/>
conservé, et resultat est inconnu à l'extérieur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une erreur, resultat n'existe que dans la fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : resultat est une variable locale, créée à<br/>
l'appel et détruite à la sortie. En dehors, elle n'existe pas.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q10 : Trop d'arguments</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>``python<br/>
def moyenne(a, b):<br/>
    return (a + b) / 2</p>
<p>print(moyenne(10, 12, 14))<br/>
``</p>
<p>Que se passe-t-il ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un appel doit fournir exactement un argument par paramètre. En<br/>
donner trop ou trop peu déclenche une erreur TypeError, dont le<br/>
message indique le nombre attendu.</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>Python affiche 12.0, la moyenne des trois valeurs</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction ne sait calculer qu'avec deux valeurs,<br/>
elle ne s'adapte pas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python affiche 11.0, le troisième argument est ignoré</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python n'ignore pas un argument en trop, il refuse<br/>
l'appel.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python affiche 13.0, à partir des deux derniers arguments</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun choix n'est fait parmi les arguments, l'appel est<br/>
refusé.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une erreur, la fonction attend deux arguments et en reçoit trois</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le nombre d'arguments doit correspondre au<br/>
nombre de paramètres. Python signale une TypeError.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q11 : Une fonction appelée dans une autre</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def double(x):<br/>
    return 2 * x<br/>
def quadruple(x):<br/>
    return double(double(x))<br/>
print(quadruple(3))<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction peut en appeler une autre, y compris avec le résultat<br/>
d'un premier appel comme argument. On évalue de l'intérieur vers<br/>
l'extérieur.</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>6</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 6 est le résultat du premier double, auquel on<br/>
applique encore double.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>12</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : double(3) vaut 6, et double(6) vaut 12.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>9</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction multiplie par 2, elle n'élève pas au carré.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>24</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : deux multiplications par 2 font un facteur 4, pas 8.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q12 : Deux return dans une fonction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>``python<br/>
def categorie(age):<br/>
    if age &lt; 12:<br/>
        return "enfant"<br/>
    return "adulte"</p>
<p>print(categorie(9), categorie(30))<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Plusieurs return peuvent figurer dans une fonction ; seul le<br/>
premier rencontré s'exécute. Un return dans un if évite parfois<br/>
un else.</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>adulte adulte</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour 9, la condition est vraie et enfant est renvoyé<br/>
avant d'atteindre le second return.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>enfant enfant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour 30, la condition age &lt; 12 est fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>enfant adulte</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : pour 9, le premier return s'exécute et la<br/>
fonction s'arrête ; pour 30, la condition est fausse et le<br/>
second return est atteint.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, une fonction n'a qu'un seul return</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction peut contenir plusieurs return. Le<br/>
premier atteint termine l'appel.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q13 : Commencer une définition</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle ligne commence correctement la définition d'une fonction<br/>
aire à deux paramètres ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une définition s'écrit def nom(parametres): suivie d'un bloc<br/>
indenté. Les deux-points et l'indentation sont obligatoires, comme<br/>
pour if et for.</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>aire(l, h) = def</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : def se place en tête de ligne, avant le nom.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>def aire(l, h)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il manque les deux-points qui annoncent le bloc.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>function aire(l, h):</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : function n'est pas un mot-clé de Python.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>def aire(l, h):</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le mot-clé def, le nom, les paramètres entre<br/>
parenthèses et les deux-points.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q14 : Un appel dans un appel</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def suivant(n):<br/>
    return n + 1<br/>
print(suivant(1), suivant(suivant(1)))<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Chaque appel est indépendant et reçoit ses propres arguments. Quand<br/>
un appel sert d'argument à un autre, on calcule d'abord le plus<br/>
intérieur.</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 2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le premier appel renvoie déjà 2.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3 3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le premier appel n'ajoute 1 qu'une fois.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2 2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le second appel reçoit 2 en argument, il renvoie 3.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>2 3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : suivant(1) vaut 2, et suivant(2) vaut 3.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q15 : Le paramètre n'est pas la variable extérieure</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def augmenter(n):<br/>
    n = n + 5<br/>
    return n<br/>
valeur = 10<br/>
augmenter(valeur)<br/>
print(valeur)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un paramètre reçoit une copie de l'argument. Modifier le paramètre ne<br/>
change pas la variable de l'appelant : pour garder un résultat, on<br/>
affecte la valeur renvoyée.</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>10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la fonction travaille sur son paramètre n, une<br/>
copie de la valeur. valeur n'est pas modifiée, et le résultat<br/>
renvoyé, 15, n'est pas conservé.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : rien ne ramène valeur à 5, elle reste à 10.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>None</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : valeur a bien une valeur, 10, inchangée par l'appel.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>15</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 15 est renvoyé mais jamais rangé. Il faudrait écrire<br/>
valeur = augmenter(valeur).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q16 : Écrire la bonne fonction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle fonction renvoie le périmètre d'un rectangle de largeur l<br/>
et de hauteur h ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction qui calcule doit renvoyer son résultat avec return,<br/>
pour que l'appelant puisse s'en servir. Et les parenthèses restent<br/>
indispensables dans la formule.</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>def perimetre(l, h): return l * h</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l * h est l'aire, pas le périmètre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>def perimetre(l, h): return 2 * (l + h)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le périmètre est le double de la somme des deux<br/>
dimensions, et la valeur est renvoyée avec return.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>def perimetre(l, h): print(2 * (l + h))</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le calcul est juste, mais il est affiché et non<br/>
renvoyé. La fonction renverrait None.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>def perimetre(l, h): return 2 * l + h</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : sans parenthèses, seule la largeur est doublée.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q17 : Une boucle dans une fonction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def premier_multiple(n, seuil):<br/>
    k = 1<br/>
    while n <em> k &lt;= seuil:<br/>
        k = k + 1<br/>
    return n </em> k<br/>
print(premier_multiple(7, 30))<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction peut contenir une boucle, et renvoyer une valeur<br/>
calculée après elle. On suit k tour par tour, puis on applique le<br/>
return.</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>28</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 28 est encore inférieur ou égal à 30, la boucle<br/>
continue et k passe à 5.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ni k ni le résultat ne valent 4 à la fin.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 5 est la valeur finale de k, mais la fonction renvoie<br/>
n * k.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>35</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : k augmente tant que 7 * k reste inférieur ou<br/>
égal à 30, jusqu'à 5. La fonction renvoie 35, le premier<br/>
multiple de 7 au-delà de 30.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q18 : Deux affichages</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
def f(x):<br/>
    return x * 10<br/>
print(f(2))<br/>
print(f(2) + f(3))<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Chaque appel renvoie une valeur, utilisable dans un calcul. Une<br/>
fonction peut être appelée autant de fois qu'on veut, avec des<br/>
arguments différents.</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>20 puis 2030</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les résultats sont des entiers, + les additionne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>20 puis 50</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : f(2) vaut 20, et f(2) + f(3) vaut 20 plus<br/>
30.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>50 puis 20</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'ordre inverse des lignes du programme.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>20 puis 20</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la seconde ligne additionne deux appels, 20 et 30.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q19 : Une fonction dans un test</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>``python<br/>
def est_pair(n):<br/>
    return n % 2 == 0</p>
<p>for k in range(1, 7):<br/>
    if est_pair(k):<br/>
        print(k)<br/>
``</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction qui renvoie un booléen s'utilise directement comme<br/>
condition dans un if. Elle donne un nom parlant au test et évite de<br/>
répéter la formule.</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>2, 4 et 6</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la fonction renvoie True pour les nombres<br/>
pairs, et seuls ceux-là sont affichés.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True, True et True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le programme affiche k, pas le résultat de la<br/>
fonction.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2 et 4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : range(1, 7) va jusqu'à 6, qui est pair.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1, 3 et 5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : n % 2 == 0 est vrai pour les pairs.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q20 : À quoi sert une fonction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi définit-on une fonction dans un programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction regroupe un traitement sous un nom. On l'écrit une fois<br/>
et on l'appelle partout où l'on en a besoin, ce qui évite les<br/>
répétitions et facilite les corrections.</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>Pour se passer de variables dans le programme</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les fonctions utilisent des variables, paramètres et<br/>
variables locales.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Pour rendre l'exécution du programme plus rapide</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction ne change pas la vitesse d'exécution. Son<br/>
intérêt est l'organisation du code.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Pour réutiliser un même traitement avec des valeurs différentes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : une fonction écrite une fois s'appelle autant de<br/>
fois que nécessaire, avec d'autres arguments. Le programme est<br/>
plus court et plus lisible.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Pour afficher automatiquement chaque résultat</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction n'affiche rien par elle-même. Elle renvoie<br/>
une valeur, que l'appelant affiche s'il le souhaite.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q21 : Le carré d'un nombre</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
``python<br/>
def carre(x):<br/>
    return x * x</p>
<p>print(carre(5))<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Appeler une fonction, c'est remplacer son paramètre par l'argument<br/>
et récupérer ce que return renvoie.</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>Rien, la fonction ne contenant pas de print</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le print entoure l'appel et affiche la valeur<br/>
renvoyée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>25</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel carre(5) donne la valeur 5 au<br/>
paramètre x, et la fonction renvoie 5 × 5 = 25.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>x * x</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : return renvoie le résultat du calcul, pas son<br/>
écriture.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : x * x multiplie x par lui-même, ce n'est pas le<br/>
double.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q22 : Une fonction appelée plusieurs fois</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Combien de fois ce programme affiche-t-il Bonjour ?<br/>
``python<br/>
def saluer():<br/>
    print("Bonjour")</p>
<p>saluer()<br/>
saluer()<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction s'écrit une fois et s'appelle autant de fois que<br/>
nécessaire. Chaque appel exécute son corps.</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>Une seule fois, la fonction n'étant définie qu'une fois</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : définir une fonction ne l'exécute pas ; ce sont les<br/>
appels qui comptent, et il y en a deux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>deux fois</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la définition n'affiche rien, mais chaque appel<br/>
saluer() exécute le corps de la fonction.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune fois, la fonction ne renvoyant rien</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction sans return peut tout de même afficher<br/>
avec print.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3 fois, la définition comptant pour un affichage</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la ligne def ne provoque aucun affichage.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q23 : Un résultat rangé dans une variable</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
``python<br/>
def aire(largeur, hauteur):<br/>
    return largeur * hauteur</p>
<p>r = aire(3, 4)<br/>
print(r)<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La valeur renvoyée par return peut être rangée dans une variable<br/>
pour servir plus tard.</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</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction multiplie ses deux paramètres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>12</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel renvoie 3 × 4 = 12, rangé dans r<br/>
puis affiché.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, r ne pouvant recevoir une fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : r reçoit la valeur renvoyée par la fonction, un<br/>
nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>aire(3, 4)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : r contient le résultat de l'appel, pas son écriture.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q24 : Une fonction qui affiche au lieu de renvoyer</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
``python<br/>
def montrer(x):<br/>
    print(x)</p>
<p>r = montrer(3)<br/>
print(r)<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>print affiche, return renvoie. Une fonction sans return<br/>
renvoie None, ce qui trahit souvent une confusion entre les deux.</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>Une erreur, r ne recevant aucune valeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python ne signale rien ; il range None dans r.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>3 puis None</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel affiche 3, mais la fonction ne renvoie<br/>
rien ; r reçoit donc None, la valeur « rien », que le second<br/>
print affiche.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3 puis 3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : sans return, la fonction ne transmet pas 3 à<br/>
l'appelant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3 seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le second print affiche quand même quelque chose, la<br/>
valeur None.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q25 : Un calcul passé en argument</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
``python<br/>
def double(x):<br/>
    return 2 * x</p>
<p>print(double(2 + 3))<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les arguments sont évalués avant l'appel : la fonction reçoit le<br/>
résultat du calcul, pas le calcul.</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</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la somme entière qui est doublée, pas seulement<br/>
2.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction double la valeur reçue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, un argument devant être une simple valeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tout calcul peut servir d'argument, il est évalué<br/>
d'abord.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'argument 2 + 3 est calculé avant l'appel,<br/>
puis la fonction double 5.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q26 : Un appel avant la définition</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que produit ce programme ?<br/>
``python<br/>
print(triple(4))</p>
<p>def triple(x):<br/>
    return 3 * x<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction doit être définie avant d'être appelée. Les<br/>
définitions se placent en tête du programme.</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>12, la définition étant lue avant l'exécution</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait le résultat si la définition précédait<br/>
l'appel.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une erreur, triple n'étant pas encore définie</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python lit le programme de haut en bas. À la<br/>
première ligne, aucune fonction triple n'a été définie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4, l'argument étant affiché faute de fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le programme s'arrête avant d'afficher quoi que ce<br/>
soit.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, la définition annulant l'appel précédent</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'appel est exécuté en premier et échoue, la suite<br/>
n'est jamais atteinte.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q27 : Deux return sous condition</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
``python<br/>
def tarif(age):<br/>
    if age &lt; 18:<br/>
        return 5<br/>
    return 8</p>
<p>print(tarif(18))<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un return dans un if renvoie et sort aussitôt. Le return qui<br/>
suit n'est atteint que si la condition est fausse.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>8</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si age &lt; 18, le premier return termine la<br/>
fonction avec 5 ; sinon le second renvoie 8. Avec 18, on<br/>
obtient 8.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5 puis 8</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le premier return exécuté arrête la fonction, un seul<br/>
résultat est renvoyé.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, une fonction ne pouvant contenir deux return</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : plusieurs return sont permis, un seul est atteint à<br/>
chaque appel.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : relis la condition age &lt; 18 avec age égal à 18.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q28 : Le périmètre d'un rectangle</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
``python<br/>
def perimetre(l, L):<br/>
    return 2 * (l + L)</p>
<p>print(perimetre(3, 5))<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les arguments sont distribués aux paramètres dans l'ordre, puis le<br/>
corps de la fonction calcule avec ces valeurs.</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>15</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le produit serait l'aire, la fonction calcule le<br/>
périmètre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, l et L étant le même nom</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python distingue majuscules et minuscules, l et L<br/>
sont deux paramètres différents.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>16</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l vaut 3 et L vaut 5, et<br/>
2 × (3 + 5) = 16.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>11</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les parenthèses font porter le doublement sur la somme<br/>
entière.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q29 : Un paramètre qui porte le nom d'une variable</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
``python<br/>
x = 5</p>
<p>def f(x):<br/>
    return x + 1</p>
<p>print(f(10), x)<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le paramètre d'une fonction est une variable locale : même nom<br/>
qu'une variable extérieure ou non, il vit séparément.</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>11 5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : dans f, x est le paramètre et vaut 10,<br/>
d'où 11. En dehors, x reste la variable initiale, 5.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>11 10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'appel ne modifie pas la variable x extérieure.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, le nom x étant déjà utilisé</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un paramètre peut porter le même nom qu'une variable<br/>
extérieure, les deux restent indépendants.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>6 5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : dans la fonction, x prend la valeur de l'argument,<br/>
10, pas celle de la variable extérieure.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q30 : Un résultat absent utilisé dans un calcul</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que produit ce programme ?<br/>
``python<br/>
def affiche(x):<br/>
    print(x)</p>
<p>y = affiche(2) + 1<br/>
``</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour utiliser le résultat d'une fonction dans un calcul, il faut<br/>
que la fonction le renvoie avec return. Un print seul ne suffit<br/>
pas.</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>2 s'affiche, puis une erreur sur None + 1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel affiche 2 et renvoie None. Le calcul<br/>
None + 1 échoue, car None n'est pas un nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3 s'affiche, l'addition étant faite avant l'affichage</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est x, égal à 2, qui est affiché, et aucun 3 n'est<br/>
calculé.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien ne s'affiche et y vaut 3, le print étant ignoré</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le print de la fonction s'exécute bien, puis<br/>
l'addition échoue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2 s'affiche et y vaut 3, la fonction renvoyant x</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction n'a pas de return, elle ne renvoie pas 2.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
