Exercice 5 · Bac Numérique et Sciences Informatiques Asie 2022 (jour 2)
Thème : Mise au point des programmes : bugs, assertions et tests · Tiré du sujet Jour 2 (2022)
Énoncé
EXERCICE 5 (4 points)
Thème: Exécution de programmes, recherche et corrections de bugs
Les questions proposées sont indépendantes les unes des autres.
1.
On considère la fonction somme(n) qui reçoit en paramètre un entier n strictement positif et renvoie le résultat du calcul .
1 | def somme(n):
2 | total = 0
3 | for i in range(n):
4 | total = total + 1/i
5 | return total
Lors de l'exécution de somme(10), le message d'erreur "ZeroDivisionError: division by zero" apparaît. Identifier le problème et corriger la fonction pour qu'elle effectue le calcul demandé.
2.
On considère la fonction maxi(L) qui prend comme paramètre une liste L de nombres et renvoie le plus grand nombre de cette liste:
1 | def maxi(L):
2 | indice = 0
3 | maximum = 0
4 | while indice <= len(L):
5 | if L[indice] > maximum:
6 | maximum = L[indice]
7 | indice = indice + 1
8 | return maximum
a.
Lors de l'exécution de maxi([2, 4, 9, 1]) une erreur est déclenchée. Identifier et corriger le problème.
b.
Le bug précédent est maintenant corrigé. Que renvoie à présent l'exécution de maxi([-2, -7, -3]) ?
3.
On souhaite réaliser une fonction qui génère une liste de n joueurs identifiés par leur numéro. Par exemple on souhaite que l'appel genere(3) renvoie la liste ['Joueur 1', 'Joueur 2', 'Joueur 3'].
1 | def genere(n):
2 | L = []
3 | for i in range(1, n+1):
4 | L.append('Joueur '+i)
5 | return L
L'appel genere(3) déclenche l'erreur suivante: TypeError: can only concatenate str (not "int") to str.
Expliquer ce message d'erreur et corriger la fonction afin de régler le problème.
4.
On considère la fonction suite(n) qui reçoit un entier positif et renvoie un entier.
1 | def suite(n):
2 | if n == 0:
3 | return 0
4 | else:
5 | return 3+2*suite(n-2)
a.
b.
5.
On considère le code Python ci-dessous:
1 | x = 4
2 | L = []
3 | def modif(x, L):
4 | x = x + 1
5 | L.append(2*x)
6 | return x, L
7 |
8 | print(modif(x, L))
9 | print(x, L)
a.
b.

Corrigé
Corrigé proposé par AprenAI (non officiel)
1. Identifier le problème lors de l'exécution de somme(10)
Réponse : L'appel range(n) produit des entiers de 0 à n-1. Au premier tour de boucle, i = 0, ce qui provoque une division par zéro (1/0).
1. Corriger la fonction pour qu'elle effectue le calcul demandé
Réponse : ```python def somme(n): total = 0 for i in range(1, n + 1): total = total + 1 / i return total ```
2.a. Identifier et corriger le problème lors de l'exécution de maxi([2, 4, 9, 1])
Réponse : L'indice dépasse la taille de la liste car la condition est indice <= len(L) au lieu de indice < len(L). À la fin, L[len(L)] déclenche une erreur IndexError.
2.b. Que renvoie à présent l'exécution de maxi([-2, -7, -3]) ?
Réponse : 0
2.b. Modifier la fonction pour qu'elle renvoie le bon résultat
Réponse : Initialiser maximum = L[0] (et éventuellement indice = 1)
3. Expliquer ce message d'erreur : TypeError: can only concatenate str (not "int") to str
Réponse : L'opérateur '+' est utilisé entre une chaîne de caractères ('Joueur ') et un entier (i), ce qui n'est pas autorisé en Python sans conversion.
Les réponses des 5 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 3 - Gestion de bugs et tests · Asie jour 1 - Remplacement 2025