<?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[<pre><code>def double(x):
    return 2 * x
print(double(7))</code></pre>
<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 <code>return</code> remplace l'appel dans<br/>
l'expression, ici dans <code>print</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>14</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel <code>double(7)</code> exécute la fonction avec <code>x</code><br/>
égal à 7 et renvoie 14, que <code>print</code> affiche.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>2 * x</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>return</code> renvoie le résultat du calcul, pas le texte de<br/>
la formule.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>7</code></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="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 <code>print</code> affiche la<br/>
valeur qu'elle renvoie.</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 <code>def aire(largeur, hauteur):</code> et<br/>
appelée par <code>aire(4, 3)</code>. 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="100" format="html">
    <text><![CDATA[<p>L'argument transmis au paramètre <code>largeur</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les arguments sont associés aux paramètres dans<br/>
l'ordre. <code>largeur</code> vaut 4 et <code>hauteur</code> vaut 3 pendant l'appel.</p>]]></text>
    </feedback>
  </answer>
  <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 <code>largeur</code>. 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 <code>hauteur</code></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>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q03 : Définir sans appeler</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>def saluer():
    print("Bonjour")</code></pre>
<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="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 : <code>def</code> prépare la fonction sans l'exécuter. Il<br/>
faudrait ajouter la ligne <code>saluer()</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Bonjour</code>, 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><code>Bonjour</code> 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="0" format="html">
    <text><![CDATA[<p>Une erreur, il manque <code>return</code> à la fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>return</code> n'est pas obligatoire. Une fonction peut se<br/>
contenter d'afficher.</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[<pre><code>def carre(n):
    print(n * n)

r = carre(3)
print(r)</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>print</code> montre une valeur à l'écran, <code>return</code> la transmet au<br/>
programme. Une fonction sans <code>return</code> renvoie <code>None</code>, 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><code>9</code> puis <code>None</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel affiche 9, mais sans <code>return</code> la<br/>
fonction renvoie <code>None</code>, qui est rangé dans <code>r</code> puis affiché.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>9</code> puis <code>9</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>print</code> dans la fonction affiche, il ne renvoie rien.<br/>
<code>r</code> ne reçoit pas 9.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>None</code> puis <code>9</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'affichage de 9 a lieu pendant l'appel, donc avant le<br/>
second <code>print</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>9</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le second <code>print</code> affiche bien quelque chose, la valeur<br/>
<code>None</code>.</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[<pre><code>def prix_ttc(ht):
    return ht * 1.2
total = prix_ttc(10) + prix_ttc(20)
print(total)</code></pre>
<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/>
<code>return</code> plus puissant que <code>print</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>36.0</code></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><code>36</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la multiplication par 1.2 donne des flottants, la somme<br/>
est affichée <code>36.0</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>30</code></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><code>12.0</code></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>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q06 : Deux paramètres, un ordre</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>def soustraire(a, b):
    return a - b
print(soustraire(3, 10))</code></pre>
<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="100" format="html">
    <text><![CDATA[<p><code>-7</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>a</code> vaut 3 et <code>b</code> vaut 10, la fonction renvoie<br/>
3 moins 10.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>7</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'ordre des arguments compte, le premier va dans <code>a</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>13</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction soustrait, elle n'additionne pas.</p>]]></text>
    </feedback>
  </answer>
  <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>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q07 : Ce qui suit return</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>def test(x):
    return x + 1
    print("Après")

print(test(1))</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>return</code> renvoie une valeur et quitte la fonction sur-le-champ. Du<br/>
code écrit après un <code>return</code> 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="100" format="html">
    <text><![CDATA[<p><code>2</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>return</code> 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><code>Après</code> puis <code>2</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction s'arrête au <code>return</code>, avant le <code>print</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>2</code> puis <code>Après</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : après un <code>return</code>, plus rien ne s'exécute dans la<br/>
fonction.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>Après</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'appel renvoie 2, que <code>print</code> affiche, et <code>Après</code><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[<pre><code>def est_majeur(age):
    return age &gt;= 18

print(est_majeur(20), est_majeur(12))</code></pre>
<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 <code>if</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>True False</code></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>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>False True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'inverse, 20 est supérieur ou égal à 18.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 12 n'est pas supérieur ou égal à 18.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>20 12</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction ne renvoie pas l'âge mais un booléen.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q09 : Une variable locale</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>def calcul():
    resultat = 10
    return resultat

calcul()
print(resultat)</code></pre>
<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 <code>return</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une erreur, <code>resultat</code> n'existe que dans la fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>resultat</code> est une variable locale, créée à<br/>
l'appel et détruite à la sortie. En dehors, elle 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/>
<code>print(calcul())</code>, ou ranger la valeur renvoyée dans une<br/>
variable.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python affiche <code>None</code>, 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 <code>resultat</code> est inconnu à l'extérieur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Python affiche le mot <code>resultat</code>, sans sa valeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>print</code> affiche la valeur d'une variable, et ici la<br/>
variable 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[<pre><code>def moyenne(a, b):
    return (a + b) / 2

print(moyenne(10, 12, 14))</code></pre>
<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 <code>TypeError</code>, 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="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 <code>TypeError</code>.</p>]]></text>
    </feedback>
  </answer>
  <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>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q11 : Une fonction appelée dans une autre</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>def double(x):
    return 2 * x
def quadruple(x):
    return double(double(x))
print(quadruple(3))</code></pre>
<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="100" format="html">
    <text><![CDATA[<p><code>12</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>double(3)</code> vaut 6, et <code>double(6)</code> vaut 12.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>6</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 6 est le résultat du premier <code>double</code>, auquel on<br/>
applique encore <code>double</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>24</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : deux multiplications par 2 font un facteur 4, pas 8.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>9</code></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>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q12 : Deux return dans une fonction</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>def categorie(age):
    if age &lt; 12:
        return "enfant"
    return "adulte"

print(categorie(9), categorie(30))</code></pre>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Plusieurs <code>return</code> peuvent figurer dans une fonction ; seul le<br/>
premier rencontré s'exécute. Un <code>return</code> dans un <code>if</code> évite parfois<br/>
un <code>else</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>enfant adulte</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : pour 9, le premier <code>return</code> s'exécute et la<br/>
fonction s'arrête ; pour 30, la condition est fausse et le<br/>
second <code>return</code> est atteint.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>enfant enfant</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour 30, la condition <code>age &lt; 12</code> est fausse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>adulte adulte</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pour 9, la condition est vraie et <code>enfant</code> est renvoyé<br/>
avant d'atteindre le second <code>return</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, une fonction n'a qu'un seul <code>return</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction peut contenir plusieurs <code>return</code>. 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/>
<code>aire</code> à deux paramètres ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une définition s'écrit <code>def nom(parametres):</code> suivie d'un bloc<br/>
indenté. Les deux-points et l'indentation sont obligatoires, comme<br/>
pour <code>if</code> et <code>for</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>def aire(l, h):</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : le mot-clé <code>def</code>, le nom, les paramètres entre<br/>
parenthèses et les deux-points.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>function aire(l, h):</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>function</code> n'est pas un mot-clé de Python.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>def aire(l, h)</code></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><code>aire(l, h) = def</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>def</code> se place en tête de ligne, avant le nom.</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[<pre><code>def suivant(n):
    return n + 1
print(suivant(1), suivant(suivant(1)))</code></pre>
<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="100" format="html">
    <text><![CDATA[<p><code>2 3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>suivant(1)</code> vaut 2, et <code>suivant(2)</code> vaut 3.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>2 2</code></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="0" format="html">
    <text><![CDATA[<p><code>1 2</code></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><code>3 3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le premier appel n'ajoute 1 qu'une fois.</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[<pre><code>def augmenter(n):
    n = n + 5
    return n
valeur = 10
augmenter(valeur)
print(valeur)</code></pre>
<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><code>10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : la fonction travaille sur son paramètre <code>n</code>, une<br/>
copie de la valeur. <code>valeur</code> 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><code>15</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 15 est renvoyé mais jamais rangé. Il faudrait écrire<br/>
<code>valeur = augmenter(valeur)</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : rien ne ramène <code>valeur</code> à 5, elle reste à 10.</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>valeur</code> a bien une valeur, 10, inchangée par l'appel.</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 <code>l</code><br/>
et de hauteur <code>h</code> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une fonction qui calcule doit renvoyer son résultat avec <code>return</code>,<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="100" format="html">
    <text><![CDATA[<p><code>def perimetre(l, h): return 2 * (l + h)</code></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 <code>return</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>def perimetre(l, h): return l * h</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>l * h</code> est l'aire, pas le périmètre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>def perimetre(l, h): print(2 * (l + h))</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le calcul est juste, mais il est affiché et non<br/>
renvoyé. La fonction renverrait <code>None</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>def perimetre(l, h): return 2 * l + h</code></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[<pre><code>def premier_multiple(n, seuil):
    k = 1
    while n * k &lt;= seuil:
        k = k + 1
    return n * k
print(premier_multiple(7, 30))</code></pre>
<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 <code>k</code> tour par tour, puis on applique le<br/>
<code>return</code>.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p><code>35</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>k</code> augmente tant que <code>7 * k</code> 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>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>28</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 28 est encore inférieur ou égal à 30, la boucle<br/>
continue et <code>k</code> passe à 5.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 5 est la valeur finale de <code>k</code>, mais la fonction renvoie<br/>
<code>n * k</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>4</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ni <code>k</code> ni le résultat ne valent 4 à la fin.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>7. Fonctions — Q18 : Deux affichages</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<pre><code>def f(x):
    return x * 10
print(f(2))
print(f(2) + f(3))</code></pre>
<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="100" format="html">
    <text><![CDATA[<p><code>20</code> puis <code>50</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>f(2)</code> vaut 20, et <code>f(2) + f(3)</code> vaut 20 plus<br/>
30.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>20</code> puis <code>20</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la seconde ligne additionne deux appels, 20 et 30.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>20</code> puis <code>2030</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les résultats sont des entiers, <code>+</code> les additionne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>50</code> puis <code>20</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est l'ordre inverse des lignes du programme.</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[<pre><code>def est_pair(n):
    return n % 2 == 0

for k in range(1, 7):
    if est_pair(k):
        print(k)</code></pre>
<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 <code>if</code>. 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 <code>True</code> pour les nombres<br/>
pairs, et seuls ceux-là sont affichés.</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 : <code>n % 2 == 0</code> est vrai pour les pairs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>True</code>, <code>True</code> et <code>True</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le programme affiche <code>k</code>, 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 : <code>range(1, 7)</code> va jusqu'à 6, qui est pair.</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="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 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="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 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/>
<pre><code>def carre(x):
    return x * x

print(carre(5))</code></pre></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 <code>return</code> 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="100" format="html">
    <text><![CDATA[<p><code>25</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel <code>carre(5)</code> donne la valeur 5 au<br/>
paramètre <code>x</code>, et la fonction renvoie 5 × 5 = 25.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>x * x</code> multiplie <code>x</code> par lui-même, ce n'est pas le<br/>
double.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>x * x</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>return</code> renvoie le résultat du calcul, pas son<br/>
écriture.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, la fonction ne contenant pas de <code>print</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le <code>print</code> entoure l'appel et affiche la valeur<br/>
renvoyée.</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 <code>Bonjour</code> ?<br/>
<pre><code>def saluer():
    print("Bonjour")

saluer()
saluer()</code></pre></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="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/>
<code>saluer()</code> exécute le corps de la fonction.</p>]]></text>
    </feedback>
  </answer>
  <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="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 <code>def</code> ne provoque aucun affichage.</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 <code>return</code> peut tout de même afficher<br/>
avec <code>print</code>.</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/>
<pre><code>def aire(largeur, hauteur):
    return largeur * hauteur

r = aire(3, 4)
print(r)</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La valeur renvoyée par <code>return</code> 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="100" format="html">
    <text><![CDATA[<p><code>12</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel renvoie 3 × 4 = 12, rangé dans <code>r</code><br/>
puis affiché.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>7</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction multiplie ses deux paramètres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>aire(3, 4)</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>r</code> contient le résultat de l'appel, pas son écriture.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien, <code>r</code> ne pouvant recevoir une fonction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : <code>r</code> reçoit la valeur renvoyée par la fonction, un<br/>
nombre.</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/>
<pre><code>def montrer(x):
    print(x)

r = montrer(3)
print(r)</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p><code>print</code> affiche, <code>return</code> renvoie. Une fonction sans <code>return</code><br/>
renvoie <code>None</code>, 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="100" format="html">
    <text><![CDATA[<p><code>3</code> puis <code>None</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel affiche 3, mais la fonction ne renvoie<br/>
rien ; <code>r</code> reçoit donc <code>None</code>, la valeur « rien », que le second<br/>
<code>print</code> affiche.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>3</code> puis <code>3</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : sans <code>return</code>, la fonction ne transmet pas 3 à<br/>
l'appelant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>3</code> seulement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le second <code>print</code> affiche quand même quelque chose, la<br/>
valeur <code>None</code>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, <code>r</code> ne recevant aucune valeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python ne signale rien ; il range <code>None</code> dans <code>r</code>.</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/>
<pre><code>def double(x):
    return 2 * x

print(double(2 + 3))</code></pre></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="100" format="html">
    <text><![CDATA[<p><code>10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'argument <code>2 + 3</code> est calculé avant l'appel,<br/>
puis la fonction double 5.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>7</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 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><code>5</code></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>
</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/>
<pre><code>print(triple(4))

def triple(x):
    return 3 * x</code></pre></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="100" format="html">
    <text><![CDATA[<p>Une erreur, <code>triple</code> 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 <code>triple</code> n'a été définie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>12</code>, 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="0" format="html">
    <text><![CDATA[<p><code>4</code>, 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/>
<pre><code>def tarif(age):
    if age &lt; 18:
        return 5
    return 8

print(tarif(18))</code></pre></p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un <code>return</code> dans un <code>if</code> renvoie et sort aussitôt. Le <code>return</code> 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><code>8</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : si <code>age &lt; 18</code>, le premier <code>return</code> 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><code>5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : relis la condition <code>age &lt; 18</code> avec <code>age</code> égal à 18.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>5</code> puis <code>8</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le premier <code>return</code> 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 <code>return</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : plusieurs <code>return</code> sont permis, un seul est atteint à<br/>
chaque appel.</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/>
<pre><code>def perimetre(l, L):
    return 2 * (l + L)

print(perimetre(3, 5))</code></pre></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="100" format="html">
    <text><![CDATA[<p><code>16</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <code>l</code> vaut 3 et <code>L</code> vaut 5, et<br/>
2 × (3 + 5) = 16.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>11</code></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>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>15</code></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, <code>l</code> et <code>L</code> étant le même nom</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python distingue majuscules et minuscules, <code>l</code> et <code>L</code><br/>
sont deux paramètres différents.</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/>
<pre><code>x = 5

def f(x):
    return x + 1

print(f(10), x)</code></pre></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><code>11 5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : dans <code>f</code>, <code>x</code> est le paramètre et vaut 10,<br/>
d'où 11. En dehors, <code>x</code> reste la variable initiale, 5.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>11 10</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'appel ne modifie pas la variable <code>x</code> extérieure.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>6 5</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : dans la fonction, <code>x</code> prend la valeur de l'argument,<br/>
10, pas celle de la variable extérieure.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, le nom <code>x</code> é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>
</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/>
<pre><code>def affiche(x):
    print(x)

y = affiche(2) + 1</code></pre></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 <code>return</code>. Un <code>print</code> 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><code>2</code> s'affiche, puis une erreur sur <code>None + 1</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : l'appel affiche 2 et renvoie <code>None</code>. Le calcul<br/>
<code>None + 1</code> échoue, car <code>None</code> n'est pas un nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>2</code> s'affiche et <code>y</code> vaut <code>3</code>, la fonction renvoyant <code>x</code></p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la fonction n'a pas de <code>return</code>, elle ne renvoie pas 2.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Rien ne s'affiche et <code>y</code> vaut <code>3</code>, le <code>print</code> étant ignoré</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le <code>print</code> de la fonction s'exécute bien, puis<br/>
l'addition échoue.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p><code>3</code> s'affiche, l'addition étant faite avant l'affichage</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est <code>x</code>, égal à 2, qui est affiché, et aucun 3 n'est<br/>
calculé.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
