<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/Première/Variables et types de base</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Variables Python, affectation, types primitifs (entier,<br/>
flottant, chaîne, booléen), conversions de types,<br/>
opérateurs arithmétiques et logiques, opérations de base<br/>
sur les chaînes.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q01 : Affectation</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la signification de l'instruction<br/>
x = 5 en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'opérateur = est l'<strong>affectation</strong> (asymétrique :<br/>
gauche reçoit droite). À ne pas confondre avec<br/>
== qui est le <strong>test d'égalité</strong> (symétrique,<br/>
booléen).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Affecter la valeur 5 à la variable x</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : on fait pointer le nom x<br/>
vers la valeur 5. Si x n'existait pas,<br/>
la variable est créée ; sinon, elle est mise<br/>
à jour.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Tester si x est égal à 5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le test d'égalité s'écrit == (deux<br/>
signes égal). Avec un seul =, c'est une<br/>
<strong>affectation</strong>.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Définir une fonction x qui renvoie 5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une fonction se définit avec def.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Multiplier x par 5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la multiplication s'écrit x * 5.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q02 : Type entier</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel est le type de la valeur 42 en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Python distingue int (entiers, précision<br/>
arbitraire) et float (flottants, précision<br/>
finie). 42 et 42.0 sont distincts (mais<br/>
égaux par valeur).</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>int</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 42 est un <strong>entier</strong> (type<br/>
int). On peut le vérifier avec<br/>
type(42) qui renvoie &lt;class 'int'&gt;.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>str</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 42 n'a pas de guillemets, ce n'est<br/>
pas une chaîne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>bool</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les booléens sont True et False.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>float</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 42.0 serait un flottant. Sans<br/>
virgule, c'est un entier.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q03 : Type flottant</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie type(3.14) en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Attention : les flottants ont une <strong>précision limitée</strong>. 0.1 + 0.2 ne donne pas exactement<br/>
0.3 mais 0.30000000000000004, car ces nombres<br/>
n'ont pas d'écriture binaire exacte.</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>&lt;class 'int'&gt;</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 3.14 a une partie décimale, c'est<br/>
un flottant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>&lt;class 'str'&gt;</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas de guillemets.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>&lt;class 'float'&gt;</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : tout nombre avec un point<br/>
décimal est un flottant en Python.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>&lt;class 'decimal'&gt;</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : decimal n'est pas un type natif de<br/>
Python ; le type des nombres à virgule est<br/>
float.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q04 : Type chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel est le type de "hello" en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Python n'a pas de type spécifique pour un seul<br/>
caractère : 'a' est une chaîne de longueur 1.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>int</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : "hello" est entre guillemets,<br/>
c'est une chaîne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>char</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas de type char en Python (à la<br/>
différence de C ou Java). Un caractère est<br/>
juste une chaîne de longueur 1.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>bool</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un booléen est True ou False.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>str</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les chaînes de caractères<br/>
sont du type str (string). On les écrit<br/>
entre guillemets simples (') ou doubles<br/>
(").</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q05 : Type booléen</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelles sont les <strong>deux seules</strong> valeurs du type<br/>
bool en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Mnémonique : majuscule à True et False,<br/>
pas comme en JavaScript ou C.</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>oui et non</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python est en anglais, pas en<br/>
français.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>0 et 1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce sont des entiers. Ils sont<br/>
interprétés comme booléens (0 = faux, 1 =<br/>
vrai) mais leur type reste int.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>True et False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : avec une <strong>majuscule obligatoire</strong>. true ou false (en<br/>
minuscules) provoqueraient une erreur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>yes et no</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ces mots-clés n'existent pas en<br/>
Python.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q06 : Conversion en entier</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie int("42") ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>int(x) accepte : entiers (renvoie x), flottants<br/>
(tronque vers 0), chaînes représentant un entier.<br/>
Avec int("3.14"), ça lève ValueError.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La chaîne "42"</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : int(...) renvoie un entier, pas<br/>
une chaîne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>L'entier 42</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : int(s) convertit la chaîne<br/>
s en son entier correspondant. Utile pour<br/>
lire une saisie utilisateur (input()<br/>
renvoie toujours une chaîne).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : "42" est convertible. Une chaîne<br/>
comme "abc" lèverait ValueError.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le flottant 42.0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : int produit un entier, pas un<br/>
flottant. Utiliser float("42") pour cela.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q07 : Opérateur de division</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie 7 / 2 en Python 3 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Distinction Python 3 : / = division flottante<br/>
(toujours float) ; // = division entière<br/>
(entier si les deux opérandes sont entiers).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>3.5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : en Python 3, / est la<br/>
division <strong>flottante</strong>. Toujours, même entre<br/>
deux entiers.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas d'arrondi.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la division entière (//).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la syntaxe est valide.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q08 : Division entière</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie 7 // 2 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avec des <strong>négatifs</strong>, attention : -7 // 2<br/>
vaut -4 (arrondi vers le bas, pas vers 0).<br/>
Cohérent avec a == (a // b) * b + a % b.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 1 est le reste (%), pas le quotient.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3.5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est la division <strong>flottante</strong><br/>
(/).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas d'arrondi à l'entier supérieur,<br/>
mais troncature vers le bas.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : // est la division<br/>
<strong>entière</strong> (quotient sans le reste).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q09 : Modulo</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie 7 % 2 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Très utile : n % 2 permet de tester la parité<br/>
(n % 2 == 0 ⇔ pair). De manière plus<br/>
générale, n % k regarde la classe modulo k.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 3 est le quotient (//), pas le<br/>
reste.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 7 n'est pas un multiple de 2, son reste<br/>
n'est pas nul.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3.5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est /, pas %.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : % calcule le <strong>reste</strong><br/>
de la division entière. 7 = 3 × 2 + 1, donc<br/>
7 % 2 = 1.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q10 : Print</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que fait l'instruction print("bonjour") ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>print est aussi utile pour la mise au point d'un<br/>
programme : afficher la valeur d'une variable aide<br/>
à repérer une erreur.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Imprime sur l'imprimante de l'ordinateur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Confusion : print affiche dans la<br/>
<strong>console</strong> (sortie standard), pas sur une<br/>
imprimante physique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Ne fait rien</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : print produit un effet visible.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Affiche bonjour dans la console</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est l'affichage standard.<br/>
Pour ajouter à la fin, utiliser<br/>
print(x, end="") ; pour séparer plusieurs<br/>
arguments, print(a, b, sep=", ").</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Définit une variable nommée bonjour</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : print affiche, ne définit pas.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q11 : Typage dynamique</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
x = 5<br/>
x = "hello"<br/>
</code>`<br/>
Cette suite d'instructions est-elle valide ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avec le typage dynamique, on gagne en souplesse<br/>
mais on perd en sûreté : une erreur de type<br/>
n'apparaît qu'au moment de l'exécution.</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>Non, x est figé en entier dès sa première affectation</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait le cas dans un langage à<br/>
<strong>typage statique</strong> (Java, C++, Rust),<br/>
mais pas en Python.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Oui, mais Python affiche un avertissement de changement de type</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun avertissement n'est émis par<br/>
défaut.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Oui : le typage de Python est dynamique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : une variable peut désigner<br/>
successivement des objets de types<br/>
différents, Python autorise cette<br/>
réaffectation. C'est puissant mais source<br/>
de bugs subtils.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Non, il faut d'abord redéclarer la variable x avec son nouveau type</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune « redéclaration » n'existe<br/>
en Python, une simple affectation suffit.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q12 : Conversion qui plante</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que se passe-t-il avec int("abc") ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Bonne pratique : vérifier qu'une saisie ne<br/>
contient que des chiffres avant de la convertir.<br/>
`<code>python<br/>
s = input()<br/>
ok = len(s) &gt; 0<br/>
for c in s:<br/>
    if c not in "0123456789":<br/>
        ok = False<br/>
if ok:<br/>
    n = int(s)<br/>
else:<br/>
    print("Pas un entier")<br/>
</code>`<br/>
La gestion des exceptions, qui permet de<br/>
rattraper l'erreur après coup, est au programme<br/>
de terminale.</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ève ValueError</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python lève ValueError:<br/>
invalid literal for int() with base 10:<br/>
'abc'. Avant de convertir une saisie, on<br/>
vérifie donc qu'elle ne contient que des<br/>
chiffres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Renvoie None</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas de retour silencieux à None.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Renvoie "abc"</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : int(...) est censé renvoyer un<br/>
entier, pas une chaîne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Renvoie 0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python ne renvoie pas une valeur<br/>
par défaut, il lève une exception.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q13 : Concaténation</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie "abc" + "def" ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>+ a un sens différent selon le type : addition<br/>
pour les nombres, concaténation pour les chaînes<br/>
et les listes. Mais pas de mélange : "a" + 5<br/>
lève TypeError.</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</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la syntaxe est valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>abc def</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun espace n'est ajouté<br/>
automatiquement par +.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>9 (somme alphabétique)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucune somme alphabétique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>abcdef</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : + concatène deux chaînes.<br/>
Le résultat est "abcdef" (sans espace,<br/>
sauf indication explicite).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q14 : Répétition de chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie "ab" * 3 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Comme pour +, <em> est surchargé. Sur des<br/>
listes : [0] </em> 5 == [0, 0, 0, 0, 0]. Très<br/>
utile pour initialiser un tableau.</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 (longueur)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : * ne calcule pas la longueur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>ab3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : * ne convertit pas l'entier en<br/>
chaîne pour concaténer.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la syntaxe est valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>ababab</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <em> répète une chaîne. C'est<br/>
un raccourci très pratique :<br/>
"-" </em> 80 produit une ligne de tirets.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q15 : Saisie utilisateur</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie input("Âge ?") après que<br/>
l'utilisateur a tapé 17 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Piège classique : n = input(); n + 1 lève<br/>
TypeError car n est une chaîne. Penser à<br/>
convertir explicitement.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>L'entier 17</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : input renvoie <strong>toujours</strong> une<br/>
chaîne, même si l'utilisateur a tapé un<br/>
nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>La chaîne "17"</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : pour obtenir un entier, il<br/>
faut convertir : int(input("Âge ?")).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le flottant 17.0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas de conversion automatique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le booléen True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La fonction input() renvoie<br/>
systématiquement une chaîne<br/>
de caractères, indépendamment<br/>
de ce que l'utilisateur saisit.<br/>
Aucune conversion en booléen<br/>
n'est effectuée.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q16 : Comparaison</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie 2 &lt; 3 &lt; 5 en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Particularité Python (rare dans les autres<br/>
langages) : a &lt; b &lt; c est correctement<br/>
interprété comme a &lt; b and b &lt; c.</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>False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 2 &lt; 3 et 3 &lt; 5 sont les deux<br/>
vraies.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la comparaison renvoie un booléen,<br/>
pas une valeur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur de syntaxe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python autorise la comparaison<br/>
chaînée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python permet d'enchaîner<br/>
les comparaisons : 2 &lt; 3 &lt; 5 équivaut à<br/>
2 &lt; 3 and 3 &lt; 5. C'est lisible et naturel<br/>
(« 3 est entre 2 et 5 »).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q17 : Conversion en booléen</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie bool(0) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>bool convertit un nombre en booléen : 0 et<br/>
0.0 donnent False, tout autre nombre donne<br/>
True. On retrouve la convention des valeurs<br/>
booléennes 0 et 1.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : conversion valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : par convention, 0 (entier<br/>
ou flottant) est faux ; tout autre nombre<br/>
est vrai.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : bool(...) renvoie un booléen,<br/>
pas le même entier.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 0 est considéré comme faux en<br/>
Python.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q18 : Longueur de chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie len("hello") ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>len s'applique aussi aux listes, aux p-uplets<br/>
et aux dictionnaires : elle renvoie toujours un<br/>
nombre d'éléments.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>5</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : len renvoie le nombre<br/>
de caractères. Pour une liste, c'est le<br/>
nombre d'éléments.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>hello</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : len renvoie un entier, pas la<br/>
chaîne elle-même.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5.0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : len renvoie un entier, pas un<br/>
flottant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : len ne renvoie pas le nombre de<br/>
mots ou de phrases.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q19 : Conversion float → int</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie int(3.9) ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Distinguer quatre fonctions : int(3.9) vaut 3<br/>
(troncature vers zéro) ; round(3.9) vaut 4<br/>
(arrondi au plus proche) ; math.floor(3.9)<br/>
vaut 3 (partie entière inférieure) ;<br/>
math.ceil(3.9) vaut 4 (partie entière<br/>
supérieure).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3.9</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : int() renvoie un entier, pas un<br/>
flottant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : int() ne fait pas d'arrondi<br/>
mathématique ; c'est round(3.9) qui<br/>
donnerait 4.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : conversion valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : int(x) applique une<br/>
<strong>troncature vers 0</strong>, pas un arrondi.<br/>
int(-3.9) donnerait<br/>
-3, pas -4. Pour arrondir<br/>
mathématiquement, utiliser round.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q20 : Indexation de chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie "hello"[0] ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Indexation négative : "hello"[-1] = 'o'<br/>
(dernier). Tranche : "hello"[1:4] = 'ell'.</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>e</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : à l'indice 1, pas 0.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>hello</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : [0] extrait un seul caractère,<br/>
pas la chaîne entière.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la syntaxe est valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>h</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python indexe à partir de<br/>
<strong>0</strong>. Le premier caractère est à l'indice<br/>
0, le dernier à l'indice n-1.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q21 : Précision flottante</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie 0.1 + 0.2 == 0.3 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Bonne pratique : ne jamais comparer des<br/>
flottants avec ==. On teste plutôt<br/>
abs(a - b) &lt; epsilon, avec epsilon un petit<br/>
seuil comme 1e-9 : ainsi<br/>
abs(0.1 + 0.2 - 0.3) &lt; 1e-9 vaut True.</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</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : pas d'erreur, juste un résultat<br/>
contre-intuitif.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>0.3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : une comparaison renvoie toujours<br/>
un booléen.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : 0.1 + 0.2 vaut en réalité<br/>
0.30000000000000004. C'est un piège<br/>
classique des flottants.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : à cause de la représentation IEEE<br/>
754, 0.1 + 0.2 ne donne pas exactement<br/>
0.3.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q22 : Opérateur puissance</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut 2 ** 10 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Syntaxe a <strong> b (parfois écrite pow(a, b)).<br/>
Astuce : 2 </strong> 0.5 donne la racine carrée de<br/>
2.</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</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : confusion entre <em> (multiplication)<br/>
et </em>* (puissance).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>1024</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : ** est l'opérateur<br/>
puissance. À retenir : 2¹⁰ = 1024,<br/>
2²⁰ ≈ 10⁶, 2³⁰ ≈ 10⁹.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ** est valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>100</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait 10², pas 2 élevé à la puissance 10.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q23 : Affectation simultanée</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>`<code>python<br/>
a, b = 1, 2<br/>
a, b = b, a<br/>
</code><br/>
Que valent a et b` à la fin ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'affectation simultanée est l'un des grands<br/>
atouts de Python pour la lisibilité. Beaucoup<br/>
d'algorithmes (tri, recherche) en bénéficient.</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>a = 2, b = 1 (échangés)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python crée d'abord le<br/>
tuple (b, a) = (2, 1), puis le déballe<br/>
dans a, b. Les deux changent<br/>
<strong>simultanément</strong>, sans variable<br/>
temporaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>a = 1, b = 2 (inchangé)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il y a bien échange.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : syntaxe valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>a = 2, b = 2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait le résultat <strong>buggé</strong><br/>
d'un échange séquentiel mal écrit. Python<br/>
gère correctement.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q24 : Print avec virgule</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que renvoie print("a", "b", "c") ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Paramètres utiles : sep="..." (séparateur<br/>
entre arguments) et end="..." (à la fin, par<br/>
défaut \n). Pour ne pas aller à la ligne :<br/>
print("...", end="").</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>Affiche abc</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : par défaut, print insère un<br/>
espace entre les arguments.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Affiche [a, b, c]</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : aucun crochet ajouté<br/>
automatiquement.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Lève une exception</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : print accepte plusieurs<br/>
arguments.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Affiche a b c</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : print insère un espace<br/>
entre ses arguments, le séparateur par<br/>
défaut. On peut le changer avec<br/>
sep="...". Ex. : print("a", "b",<br/>
sep=" - ") affiche a - b.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q25 : Synthèse</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Parmi les affirmations suivantes, laquelle est<br/>
<strong>fausse</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>À retenir : les flottants sont des valeurs<br/>
approchées, on évite donc de tester leur égalité<br/>
avec ==. On compare plutôt leur écart à une<br/>
petite tolérance, par exemple<br/>
abs(a - b) &lt; 0.000001.</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>Les indices Python commencent à 0</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Vrai : convention standard en informatique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>0.1 + 0.2 == 0.3 vaut True en Python</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Faux (donc bonne réponse) : 0.1 + 0.2 vaut<br/>
0.30000000000000004, car ces nombres n'ont pas<br/>
d'écriture binaire exacte. La comparaison vaut<br/>
donc False.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le langage Python est typé dynamiquement</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Vrai : une variable peut changer de type.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>/ produit toujours un flottant en Python 3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Vrai : différence par rapport à Python 2.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q26 : Échanger deux variables en Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est la façon la plus idiomatique d'échanger<br/>
les valeurs de deux variables a et b en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>L'affectation multiple a, b = b, a repose sur les<br/>
<em>p-uplets</em> implicites : Python crée d'abord le<br/>
couple (b, a) côté droit, puis le déballe à<br/>
gauche. Cette construction est plus claire et plus<br/>
courte que la version classique avec variable<br/>
temporaire (tmp = a; a = b; b = tmp).</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>a, b = b, a</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : Python évalue d'abord le<br/>
membre de droite (le couple (b, a)) puis<br/>
affecte simultanément les deux composantes aux<br/>
variables de gauche. Aucune variable temporaire<br/>
n'est nécessaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>a = b puis b = a</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce code ne réalise pas un échange. Après<br/>
la première instruction, a perd sa valeur<br/>
d'origine et prend celle de b. La seconde<br/>
instruction recopie alors b dans... b. Les<br/>
deux variables se retrouvent égales à la valeur<br/>
initiale de b.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>a = b = a</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette instruction affecte la valeur<br/>
actuelle de a à b, puis cette même valeur à<br/>
a (sans changement). Aucun échange n'est<br/>
effectué.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>swap(a, b)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il n'existe pas de fonction native<br/>
swap en Python.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q27 : Découper une date</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On exécute le code suivant :<br/>
`<code>python<br/>
date = "12/09/2026"<br/>
morceaux = date.split("/")<br/>
print(morceaux)<br/>
</code>`<br/>
Que va afficher le programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>split(sep) découpe une chaîne selon un séparateur et renvoie une<br/>
liste de chaînes. C'est la méthode utilisée pour lire une ligne d'un<br/>
fichier CSV, avant de convertir les valeurs numériques avec int ou<br/>
float.</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, 9, 2026]</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : split ne convertit rien, les morceaux restent des<br/>
chaînes de caractères. Pour obtenir le jour sous forme d'entier,<br/>
il faut écrire int(morceaux[0]).</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>'12092026'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : split ne se contente pas de supprimer les barres<br/>
obliques, il renvoie une <strong>liste</strong> de morceaux, pas une chaîne<br/>
recollée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>['12', '09', '2026']</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : split("/") découpe la chaîne à chaque barre<br/>
oblique et renvoie la liste des morceaux. Ce sont des chaînes :<br/>
il faudrait int pour obtenir des nombres.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>['12/', '09/', '2026']</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le séparateur sert à couper la chaîne et disparaît du<br/>
résultat. Aucun morceau ne contient la barre oblique.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q28 : Méthodes de chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut l'expression "NSI".lower() en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Méthodes de chaîne fréquentes : upper() (tout en<br/>
majuscules), lower() (tout en minuscules),<br/>
strip() (supprime les espaces de début et de fin),<br/>
split(sep) (découpe selon un séparateur). Ces<br/>
méthodes renvoient une <strong>nouvelle</strong> chaîne, sans<br/>
modifier la chaîne d'origine.</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>'nsi'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : lower renvoie une <strong>nouvelle chaîne</strong> où toutes les lettres ont été passées<br/>
en minuscules. La chaîne d'origine n'est pas<br/>
modifiée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>'Nsi'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : seule la première lettre serait alors<br/>
en majuscule. La méthode lower passe tous les<br/>
caractères en minuscules.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>'NSI'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la méthode lower transforme la chaîne<br/>
en minuscules. Elle ne peut donc pas renvoyer la<br/>
chaîne d'origine inchangée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La méthode lower n'existe pas</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : lower est une méthode standard des<br/>
chaînes Python, présente depuis les premières<br/>
versions du langage. Elle est très utilisée pour<br/>
comparer des chaînes sans tenir compte de la<br/>
casse.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q29 : Une division par zéro évitée</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On exécute le code suivant :</p>
<p>`<code>python<br/>
x = 0<br/>
print(x != 0 and 10 / x &gt; 1)<br/>
print(x == 0 or 10 / x &gt; 1)<br/>
</code>`</p>
<p>Qu'affiche ce programme ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le caractère séquentiel de and et or permet de protéger une<br/>
opération risquée : dans x != 0 and 10 / x &gt; 1, la division n'est<br/>
tentée que si x est non nul.</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 ZeroDivisionError dès le premier print</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : and n'évalue pas son opérande droit quand l'opérande<br/>
gauche est faux. Comme x != 0 vaut False, la division par zéro<br/>
n'a jamais lieu.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>True puis False</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les deux résultats sont inversés. x != 0 est faux pour<br/>
x nul, donc le and vaut False ; x == 0 est vrai, donc le<br/>
or vaut True.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>False puis une erreur ZeroDivisionError</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : or est lui aussi séquentiel. Son opérande gauche,<br/>
x == 0, est vrai : le résultat vaut True et la division<br/>
10 / x n'est jamais calculée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>False puis True</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : and et or évaluent leurs opérandes de gauche à<br/>
droite et s'arrêtent dès que le résultat est connu. x != 0 est<br/>
faux, donc le and vaut False sans calculer 10 / x ; x == 0<br/>
est vrai, donc le or vaut True sans calculer 10 / x.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q30 : Addition de deux chaînes</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut l'expression "3" + "4" en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le même symbole + additionne deux nombres et concatène deux<br/>
chaînes. C'est le type des opérandes qui décide : "3" + "4"<br/>
vaut '34', alors que 3 + 4 vaut 7.</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 : Python n'additionne pas le contenu des chaînes. Il les<br/>
met bout à bout, ce qui donne '34'.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>'34'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : entre deux chaînes, + est la concaténation.<br/>
Les caractères de "4" sont ajoutés à la suite de ceux de<br/>
"3", sans aucun calcul.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, car + ne s'applique pas aux chaînes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : + s'applique bien à deux chaînes et les concatène.<br/>
L'erreur n'apparaît que si l'on mélange une chaîne et un nombre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>7</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les guillemets font de "3" et "4" des chaînes,<br/>
pas des nombres. Pour obtenir 7, il faudrait convertir les<br/>
deux avec int avant d'additionner.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q31 : Multiplication d'une chaîne par un entier</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut l'expression "ab" * 3 en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avec une chaîne et un entier, * répète la chaîne. Avec deux<br/>
chaînes, l'opération n'a pas de sens et lève une erreur.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>'ab ab ab'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la répétition n'insère aucun espace. Les copies sont<br/>
collées les unes aux autres : 'ababab'.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>'ababab'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : multiplier une chaîne par un entier la répète.<br/>
"ab" est recopiée trois fois à la suite, sans séparateur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, car on ne multiplie pas une chaîne par un entier</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : cette opération est permise et très utilisée, par<br/>
exemple "-" * 20 pour tracer une ligne. Seule la<br/>
multiplication de deux chaînes entre elles est interdite.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>'ab3'</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : * ne colle pas le nombre à la chaîne. Il répète la<br/>
chaîne, ce qui donne 'ababab'.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q32 : Dernier caractère d'une chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
`<code>python<br/>
mot = "python"<br/>
print(mot[len(mot) - 1])<br/>
</code>`</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les indices d'une chaîne de longueur n vont de 0 à n - 1. Le<br/>
dernier caractère s'obtient donc avec mot[len(mot) - 1].</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>o</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'avant-dernier caractère est à l'indice<br/>
len(mot) - 2, soit 4. À l'indice 5 se trouve n.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>n</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : len(mot) vaut 6 et les indices vont de 0<br/>
à 5. L'indice len(mot) - 1, soit 5, désigne donc le<br/>
dernier caractère, n.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>p</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : le premier caractère est à l'indice 0. L'indice<br/>
len(mot) - 1 vaut 5 et désigne le dernier caractère.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, car l'indice dépasse la longueur de la chaîne</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : c'est mot[len(mot)], d'indice 6, qui serait hors<br/>
limites. En retranchant 1, on tombe exactement sur le dernier<br/>
indice valide.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q33 : Un nom de variable interdit</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que produit l'instruction class = 3 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un nom de variable commence par une lettre ou un tiret bas, ne<br/>
contient ni espace ni accent de préférence, et n'est jamais un<br/>
mot-clé. classe ou niveau conviennent.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La création d'une variable class valant 3</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python refuse ce nom avant même d'exécuter<br/>
l'affectation.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un avertissement, puis la création de la variable</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il ne s'agit pas d'un avertissement mais d'une erreur<br/>
bloquante.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La création d'une classe nommée 3, sans attribut</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : définir une classe demande une autre syntaxe, et 3<br/>
n'est pas un nom valide.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une erreur de syntaxe, class étant un mot réservé</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les mots-clés comme class, if, for ou<br/>
def sont réservés et ne peuvent pas servir de nom de variable.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q34 : Trois affectations raccourcies</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Qu'affiche ce programme ?<br/>
`<code>python<br/>
n = 10<br/>
n -= 4<br/>
n *= 2<br/>
print(n)<br/>
</code>`</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>n -= a et n <em>= b abrègent n = n - a et n = n </em> b ; chaque<br/>
instruction part de la valeur courante.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>10</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : chaque écriture raccourcie modifie bien n.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : les deux instructions s'enchaînent ; la multiplication<br/>
porte sur la valeur déjà diminuée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, -= n'existant pas en Python</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : n -= 4 est l'abréviation de n = n - 4.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>12</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : n -= 4 retire 4, puis n *= 2 multiplie<br/>
le résultat par 2 : (10 - 4) × 2 = 12.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q35 : Un signe moins devant une puissance</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut -2 ** 2 en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>*<em> passe avant le signe et avant </em> ; en cas de doute, on écrit<br/>
(-2) <strong> 2 ou -(2 </strong> 2) pour lever l'ambiguïté.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>-4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : <strong> est prioritaire sur le signe moins.<br/>
L'expression se lit -(2 </strong> 2), soit -4.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>-2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : la puissance est bien calculée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>4</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : ce serait (-2) ** 2. Sans parenthèses, le signe<br/>
s'applique après la puissance.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur de syntaxe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'expression est valide, seule sa lecture demande de<br/>
connaître les priorités.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q36 : Le reste d'un nombre négatif</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut -7 % 3 en Python ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Python garantit a == b * (a // b) + a % b avec un reste compris<br/>
entre 0 et b - 1 pour b positif, même quand a est négatif.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>-1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : -1 est le reste au sens de certains autres langages,<br/>
qui gardent le signe du dividende. Python arrondit la division<br/>
entière vers le bas, ce qui donne un reste positif.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : 1 serait le reste de la valeur absolue ; le signe<br/>
du dividende change le résultat.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>2</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : en Python, le reste a le signe du diviseur et<br/>
vérifie -7 == 3 * (-7 // 3) + 2, avec -7 // 3<br/>
valant -3.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une erreur, le modulo n'acceptant pas un nombre négatif</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : % accepte tous les entiers.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q37 : Modifier un caractère d'une chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que produit ce programme ?<br/>
`<code>python<br/>
s = "bonjour"<br/>
s[0] = "B"<br/>
</code>`</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une chaîne ne change jamais : toute « modification » crée une<br/>
nouvelle chaîne, ce que font upper, replace ou la<br/>
concaténation.</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 modification étant ignorée en silence</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : Python signale l'opération interdite par une<br/>
exception.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>s devient Bonjour, le premier caractère remplacé</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : l'affectation par indice est refusée sur une chaîne.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>s devient B, l'affectation écrasant le reste</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : il n'y a ni remplacement ni raccourcissement, mais<br/>
une erreur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Une erreur, les chaînes étant immuables</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : les chaînes sont immuables ; pour obtenir<br/>
Bonjour, on construit une nouvelle chaîne, par exemple<br/>
"B" + s[1:].</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Variables et types de base — Q38 : Tester la présence d'une sous-chaîne</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Que vaut l'expression "jour" in "bonjour" ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>sous in chaine répond vrai si sous apparaît d'un seul tenant<br/>
dans chaine, sans dire où.</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, in ne s'appliquant qu'aux listes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : in fonctionne aussi sur les chaînes.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>False, in ne cherchant qu'un caractère isolé</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : in cherche la sous-chaîne entière, consécutive, pas<br/>
ses lettres une à une.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Un entier, la position de jour dans bonjour</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : in renvoie un booléen ; la position s'obtient par<br/>
find.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>True, jour figure d'un seul tenant dans bonjour</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : in teste si la chaîne de gauche apparaît<br/>
telle quelle, caractères consécutifs, dans celle de droite.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
