Étape 1
Pour déterminer la valeur renvoyée par l'appel $traitement(3, 4)$, traçons pas à pas l'exécution de la fonction avec les valeurs d'entrée $a = 3$ et $b = 4$.
Étape 2
Au départ, l'accumulateur $p$ est initialisé à $1$. La boucle $for\ i\ in\ range(4)$ va s'exécuter pour $i$ variant de $0$ à $3$ (soit $4$ itérations).
Étape 3
Pour $i = 0$ : $a = 3$. Le test $3 \% 2 == 0$ est faux ($3$ est impair). On exécute le bloc $else$ : $$p = 1 + 3 \times 3 = 10$$ Puis $a$ prend la valeur $3 + 1 = 4$.
Étape 4
Pour $i = 1$ : $a = 4$. Le test $4 \% 2 == 0$ est vrai ($4$ est pair). On exécute le bloc $if$ : $$p = 10 + 4 // 2 = 10 + 2 = 12$$ Puis $a$ prend la valeur $4 + 1 = 5$.
Étape 5
Pour $i = 2$ : $a = 5$. Le test $5 \% 2 == 0$ est faux ($5$ est impair). On exécute le bloc $else$ : $$p = 12 + 3 \times 5 = 12 + 15 = 27$$ Puis $a$ prend la valeur $5 + 1 = 6$.
Étape 6
Pour $i = 3$ : $a = 6$. Le test $6 \% 2 == 0$ est vrai ($6$ est pair). On exécute le bloc $if$ : $$p = 27 + 6 // 2 = 27 + 3 = 30$$ Puis $a$ prend la valeur $6 + 1 = 7$.
Étape 7
La boucle est terminée. L'instruction $return\ p$ renvoie la valeur finale de $p$, c'est-à-dire $30$.
Méthode clé
Suivre pas à pas l'évolution des variables à chaque tour de boucle en consignant leurs valeurs dans un tableau d'état.
Piège à éviter
Oublier de mettre à jour la valeur de $a$ à la fin de chaque itération ou confondre la division entière // avec la division classique.