Corrigé — Première NSI
Répondez aux questions dans les cellules prévues.
Complétez les cellules de code en remplaçant pass.
Écrivez les recherches et les calculs avec des boucles for. Vous pouvez parcourir les éléments directement ou utiliser leurs indices.
Les fonctions sum, min, max, sorted et les méthodes index, count ne doivent pas être utilisées.
Les fonctions écrites doivent conserver le contenu des tableaux reçus en paramètres.
Exécutez les tests après avoir écrit chaque réponse. Les tests utilisent uniquement des assert : si aucune erreur ne s'affiche, ils sont réussis.
On considère le programme suivant :
valeurs = [6, 2, 9, 2, 5]
total = 0
for i in range(len(valeurs)):
if valeurs[i] >= 5:
total = total + valeurs[i]
Sans exécuter le programme, complétez le tableau ci-dessous. La dernière colonne donne la valeur de total à la fin de chaque tour de boucle.
| Indice i | Élément valeurs[i] | total à la fin du tour |
| --- | --- | --- |
| 0 | 6 | 6 |
| 1 | 2 | 6 |
| 2 | 9 | 15 |
| 3 | 2 | 15 |
| 4 | 5 | 20 |
Le programme additionne les valeurs supérieures ou égales à 5. À la fin, total vaut 20.
Réécrivez ce programme en parcourant directement les éléments avec for valeur in valeurs. Le résultat doit être identique.
valeurs = [6, 2, 9, 2, 5]
total = 0
for valeur in valeurs:
if valeur >= 5:
total = total + valeur
Test
assert total == 20
Les fonctions de cet exercice doivent fonctionner avec des tableaux de nombres ou de chaînes de caractères. Le tableau peut être vide.
Écrivez la fonction rechercher(tableau, valeur) qui renvoie l'indice de la première occurrence de valeur dans tableau.
Si la valeur est absente, la fonction renvoie -1.
Par exemple, rechercher([6, 2, 9, 2, 5], 2) doit renvoyer 1.
def rechercher(tableau, valeur):
for i in range(len(tableau)):
if tableau[i] == valeur:
return i
return -1
La fonction s'arrête dès la première égalité. Le return -1 est placé après la boucle : il est atteint lorsque tout le tableau a été parcouru sans trouver la valeur.
Tests
assert rechercher([6, 2, 9, 2, 5], 2) == 1
assert rechercher([6, 2, 9, 2, 5], 6) == 0
assert rechercher([6, 2, 9, 2, 5], 5) == 4
assert rechercher([6, 2, 9, 2, 5], 8) == -1
assert rechercher(["Lina", "Noé", "Lina"], "Lina") == 0
assert rechercher(["Lina", "Noé", "Lina"], "Adam") == -1
assert rechercher([], 2) == -1
assert rechercher([4], 4) == 0
Écrivez la fonction compter_occurrences(tableau, valeur) qui renvoie le nombre de fois où valeur apparaît dans tableau.
Par exemple, compter_occurrences([6, 2, 9, 2, 5], 2) doit renvoyer 2.
def compter_occurrences(tableau, valeur):
nombre = 0
for element in tableau:
if element == valeur:
nombre = nombre + 1
return nombre
Le compteur commence à 0. On ajoute 1 à chaque égalité et on renvoie le compteur après le parcours complet.
Tests
assert compter_occurrences([6, 2, 9, 2, 5], 2) == 2
assert compter_occurrences([6, 2, 9, 2, 5], 8) == 0
assert compter_occurrences([4, 4, 4], 4) == 3
assert compter_occurrences(["Lina", "Noé", "Lina"], "Lina") == 2
assert compter_occurrences([], 2) == 0
assert compter_occurrences([4], 4) == 1
Dans cet exercice, les tableaux contiennent des nombres et sont non vides.
Écrivez la fonction extrema(tableau) qui renvoie le couple (minimum, maximum).
Les deux valeurs doivent être recherchées pendant un seul parcours du tableau.
Par exemple, extrema([6, 2, 9, 2, 5]) doit renvoyer (2, 9).
def extrema(tableau):
minimum = tableau[0]
maximum = tableau[0]
for valeur in tableau:
if valeur < minimum:
minimum = valeur
if valeur > maximum:
maximum = valeur
return minimum, maximum
Le minimum et le maximum sont initialisés avec le premier élément du tableau. Cette initialisation permet aussi de traiter les tableaux dont toutes les valeurs sont négatives.
Tests
assert extrema([6, 2, 9, 2, 5]) == (2, 9)
assert extrema([-9, -2, -7]) == (-9, -2)
assert extrema([5]) == (5, 5)
assert extrema([4, 4, 4]) == (4, 4)
assert extrema([3.5, -1.5, 2.5]) == (-1.5, 3.5)
Écrivez la fonction indice_maximum(tableau) qui renvoie l'indice du plus grand élément.
Si le maximum apparaît plusieurs fois, la fonction doit renvoyer l'indice de sa première occurrence.
Par exemple, indice_maximum([4, 9, 2, 9]) doit renvoyer 1.
def indice_maximum(tableau):
maximum = tableau[0]
indice = 0
for i in range(1, len(tableau)):
if tableau[i] > maximum:
maximum = tableau[i]
indice = i
return indice
On mémorise à la fois le maximum et son indice. La comparaison stricte > permet de conserver le premier indice lorsque le maximum apparaît plusieurs fois.
Tests
assert indice_maximum([4, 9, 2, 9]) == 1
assert indice_maximum([7, 4, 7]) == 0
assert indice_maximum([-9, -2, -2, -7]) == 1
assert indice_maximum([5]) == 0
assert indice_maximum([2, 9, 4]) == 1
assert indice_maximum([4, 4, 4]) == 0
On a relevé les températures suivantes, en degrés Celsius, pendant sept jours :
temperatures = [12, 14, 10, 16, 13, 11, 15]
Écrivez la fonction moyenne(tableau) qui renvoie la moyenne des nombres du tableau.
Le tableau est non vide. La fonction doit fonctionner pour n'importe quel nombre d'éléments.
def moyenne(tableau):
somme = 0
for valeur in tableau:
somme = somme + valeur
return somme / len(tableau)
Tests
assert moyenne(temperatures) == 13.0
assert moyenne([2, 4, 6]) == 4.0
assert moyenne([7]) == 7.0
assert moyenne([-6, -3, -9]) == -6.0
assert moyenne([1, 2]) == 1.5
Écrivez la fonction nombre_au_dessus_moyenne(tableau) qui renvoie le nombre d'éléments strictement supérieurs à la moyenne du tableau.
Le tableau est non vide.
Appelez la fonction moyenne une seule fois, avant la boucle de comptage, et conservez son résultat dans une variable.
Pour la semaine donnée, la fonction doit renvoyer 3.
def nombre_au_dessus_moyenne(tableau):
seuil = moyenne(tableau)
nombre = 0
for valeur in tableau:
if valeur > seuil:
nombre = nombre + 1
return nombre
La moyenne de la semaine est 13 °C. Les trois températures strictement supérieures à cette moyenne sont 14 °C, 16 °C et 15 °C.
Tests
assert nombre_au_dessus_moyenne(temperatures) == 3
assert nombre_au_dessus_moyenne([5, 5, 5]) == 0
assert nombre_au_dessus_moyenne([7]) == 0
assert nombre_au_dessus_moyenne([-6, -3, -9]) == 1
assert nombre_au_dessus_moyenne([1, 3]) == 1
Calculez la moyenne de temperatures et stockez-la dans moyenne_semaine.
Construisez ensuite par compréhension le tableau ecarts. Chaque élément doit être la température du jour moins la moyenne de la semaine, dans le même ordre que les températures.
Un écart négatif correspond à une température inférieure à la moyenne.
moyenne_semaine = moyenne(temperatures)
ecarts = [temperature - moyenne_semaine for temperature in temperatures]
Tests
assert moyenne_semaine == 13.0
assert ecarts == [-1, 1, -3, 3, 0, -2, 2]
assert len(ecarts) == len(temperatures)
assert temperatures == [12, 14, 10, 16, 13, 11, 15]