Étape 1
Rappel des règles logiques : $p$ est Vrai si $x > 3$, $q$ est Vrai si $x$ est un nombre pair (reste de la division par 2 égal à 0). L'expression `cond` est Vraie si l'une exactement des deux conditions $p$ ou $q$ est vérifiée (OU exclusif).
Étape 2
Effectuons un traçage pas à pas pour chaque valeur de $x$ dans l'intervalle $[1 ; 6]$ :
Étape 3
Pour $x = 1$ : $p = \text{Faux}$, $q = \text{Faux}$. L'expression `cond` vaut $(\text{Faux} \text{ et } \text{Vrai}) \text{ ou } (\text{Vrai} \text{ et } \text{Faux}) = \text{Faux}$. La variable `res` reste égale à $0$.
Étape 4
Pour $x = 2$ : $p = \text{Faux}$, $q = \text{Vrai}$. L'expression `cond` vaut $(\text{Faux} \text{ et } \text{Faux}) \text{ ou } (\text{Vrai} \text{ et } \text{Vrai}) = \text{Vrai}$. La variable `res` devient $0 + 2 = 2$.
Étape 5
Pour $x = 3$ : $p = \text{Faux}$, $q = \text{Faux}$. L'expression `cond` vaut $\text{Faux}$. La variable `res` reste égale à $2$.
Étape 6
Pour $x = 4$ : $p = \text{Vrai}$, $q = \text{Vrai}$. L'expression `cond` vaut $(\text{Vrai} \text{ et } \text{Faux}) \text{ ou } (\text{Faux} \text{ et } \text{Vrai}) = \text{Faux}$. La variable `res` reste égale à $2$.
Étape 7
Pour $x = 5$ : $p = \text{Vrai}$, $q = \text{Faux}$. L'expression `cond` vaut $(\text{Vrai} \text{ et } \text{Vrai}) \text{ ou } (\text{Faux} \text{ et } \text{Faux}) = \text{Vrai}$. La variable `res` devient $2 + 5 = 7$.
Étape 8
Pour $x = 6$ : $p = \text{Vrai}$, $q = \text{Vrai}$. L'expression `cond` vaut $\text{Faux}$. La variable `res` reste égale à $7$.
Étape 9
À la fin du script, la valeur finale de la variable `res` est donc $7$.
Méthode clé
Construire une table d'exécution pas à pas en évaluant séparément chaque sous-expression booléenne.
Piège à éviter
Confondre range(1, 7) qui s'arrête à 6, ou mal évaluer la priorité de 'not' par rapport à 'and' et 'or'.