Aller au contenu principal

Atelier 9 - Débogueur

Pour chaque numéro, un programme buggé est fourni: il s'exécute sans erreur, mais affiche un résultat incorrect. Le but n'est pas de trouver le bug seulement en lisant le code, mais d'utiliser le débogueur (points d'arrêt, Step Over, Watch, etc.) pour observer l'exécution et repérer exactement où et pourquoi une valeur devient incorrecte.

Pour chaque numéro, notez la ligne responsable du bug et expliquez pourquoi il cause le mauvais résultat.

Numéro 1​

Ce programme devrait afficher Nombres pairs trouvés: 5, mais affiche Nombres pairs trouvés: 0.

compteurPairs: int = 0

for nombre in range(1, 11):
if nombre % 2 == 0:
compteurImpairs = compteurPairs + 1

print("Nombres pairs trouvés:", compteurPairs)

Indice: ajoutez compteurPairs au Watch et avancez avec Step Over à travers les itérations, sa valeur ne devrait jamais bouger.

Numéro 2​

Ce programme devrait afficher la lettre correspondant à une note sur 100 (A, B, C, D ou E), mais retourne toujours E.

note: int = 78
lettre: str

match note / 10:
case 10 | 9:
lettre = "A"
case 8:
lettre = "B"
case 7:
lettre = "C"
case 6:
lettre = "D"
case _:
lettre = "E"

print("La lettre est", lettre)

Indice: mettez un point d'arrêt sur le match et ajoutez l'expression note / 10 au Watch pour voir exactement ce qui est comparé à chaque case.

Numéro 3​

Ce programme compte combien de produits i * j (pour i et j de 1 à 5) sont des multiples de 3. Il devrait afficher 9, mais affiche 1.

TAILLE: int = 5
diviseur: int = 3
compteMultiples: int = 0

for i in range(1, TAILLE + 1):
compteMultiples = 0
for j in range(1, TAILLE + 1):
if (i * j) % diviseur == 0:
compteMultiples += 1

print("Nombre de produits multiples de", diviseur, ":", compteMultiples)

Indice: mettez un point d'arrêt sur la ligne du for j, ajoutez compteMultiples au Watch, puis avancez tranquillement avec Step Over. Portez une attention particulière à ce qui se passe chaque fois que i change de valeur.

Numéro 4​

Ce programme simule un certain nombre de tours de jeu et compte combien de tours donnent un résultat pair. Avec 6 tours, il devrait afficher 3, mais affiche 18.

nbTours: int = 6
total: int = 0
resultat: int

for tour in range(1, nbTours + 1):
resultat = (tour * 7) % 10
if resultat % 2 == 0:
total += nbTours

print("Nombre de tours pairs:", total)

Indice: le bug ne se produit pas à chaque tour, seulement lorsqu'une certaine condition est vraie. Ajoutez un point d'arrêt conditionnel sur la ligne total += nbTours avec la condition resultat % 2 == 0, puis inspectez ce que fait réellement cette ligne à ce moment précis.

Numéro 5​

Ce programme demande les notes de plusieurs élèves et calcule des statistiques. Avec les notes 85, 90, 55, 72 et 48, il devrait afficher Nombre d'échecs: 2 (les notes sous 60 sont 55 et 48), mais affiche Nombre d'échecs: 3.

nbEleves: int = -1
somme: int = 0
sommeCarres: int = 0
notePlusHaute: int = 0
notePlusBasse: int = 100
nbEchecs: int = 0
note: int
moyenne: int
moyenneExacte: float
variance: float
ecartType: float
classement: str

while nbEleves <= 0:
nbEleves = int(input("Combien d'élèves? "))

for i in range(1, nbEleves + 1):
note = int(input(f"Note de l'élève {i}: "))
somme += note
sommeCarres += note * note
if note > notePlusHaute:
notePlusHaute = note
if note < notePlusBasse:
notePlusBasse = note
if note > 60:
nbEchecs += 1

moyenne = somme // nbEleves
moyenneExacte = somme / nbEleves
variance = sommeCarres / nbEleves - moyenneExacte ** 2

ecartType = 0.0
while ecartType * ecartType < variance:
ecartType += 0.01

match moyenne // 10:
case 10 | 9:
classement = "Excellent"
case 8 | 7:
classement = "Bon"
case 6:
classement = "Passable"
case _:
classement = "Faible"

print("Moyenne:", moyenne)
print("Note la plus haute:", notePlusHaute)
print("Note la plus basse:", notePlusBasse)
print("Nombre d'échecs:", nbEchecs)
print("Écart-type:", ecartType)
print("Classement du groupe:", classement)

Indice: ajoutez note et nbEchecs au Watch, puis avancez avec Step Over à travers chaque itération de la boucle for. Portez une attention particulière à la condition qui incrémente nbEchecs.


🔑 Corrigé disponible