Classement des indices d'un tableau - Sujet 40 - EP NSI 2025
Énoncé du problème
EXERCICE 1 (10 points)
Écrire une fonction recherche_indices_classement qui prend en paramètres un entier elt et un tableau d’entiers tab représenté par une liste Python, et qui renvoie trois listes Python d’entiers :
- la première liste contient les indices des valeurs du tableau
tabstrictement inférieures àelt; - la deuxième liste contient les indices des valeurs du tableau
tabégales àelt; - la troisième liste contient les indices des valeurs du tableau
tabstrictement supérieures àelt.
Exemples :
>>> recherche_indices_classement(3, [1, 3, 4, 2, 4, 6, 3, 0])
([0, 3, 7], [1, 6], [2, 4, 5])
>>> recherche_indices_classement(3, [1, 4, 2, 4, 6, 0])
([0, 2, 5], [], [1, 3, 4])
>>>recherche_indices_classement(3, [1, 1, 1, 1])
([0, 1, 2, 3], [], [])
>>> recherche_indices_classement(3, [])
([], [], [])
EXERCICE 2 (10 points)
Une professeure de NSI décide de gérer les résultats de sa classe sous la forme d’un dictionnaire :
- les clefs sont les noms des élèves ;
- les valeurs sont des dictionnaires dont les clefs sont les types d’épreuves sous forme de chaîne de caractères et les valeurs sont les notes obtenues associées à leurs coefficients dans une liste.
Avec :
resultats = {
'Dupont': {
'DS1': [15.5, 4],
'DM1': [14.5, 1],
'DS2': [13, 4],
'PROJET1': [16, 3],
'DS3': [14, 4]
},
'Durand': {
'DS1': [6 , 4],
'DS2': [8, 4],
'PROJET1': [9, 3],
'IE1': [7, 2],
'DS3': [12, 4]
}
}
L’élève dont le nom est Durand a ainsi obtenu au DS2 la note de 8 avec un coefficient 4.
La professeure crée une fonction moyenne qui prend en paramètre le nom d’un de ses élèves et renvoie sa moyenne arrondie au dixième. Si l’élève n’a pas de notes, on considère que sa moyenne est nulle. Si le nom donné n’est pas dans les résultats, la fonction renvoie None.
Compléter le code de la professeure ci-dessous :
def moyenne(nom, resultats):
'''Renvoie la moyenne de l'élève nom, selon le dictionnaire
resultats. Si nom n'est pas dans le dictionnaire,
la fonction renvoie None.'''
if nom in ...:
notes = resultats[nom]
if ...: # pas de notes
return 0
total_points = ...
total_coefficients = ...
for ... in notes.values():
note, coefficient = valeurs
total_points = total_points + ... * coefficient
... = ... + coefficient
return round( ... / total_coefficients, 1 )
else:
return None
Exemples :
>>> moyenne("Dupont", resultats)
14.5
>>> moyenne("Durand", resultats)
8.5
Les contraintes ci-dessous sont ajoutées par la plateforme et ne font pas partie du sujet.
Exercice 1
Contraintes :
eltest un entier avec-10^9 <= elt <= 10^9tabest une liste Python d’entiers avec0 <= len(tab) <= 10^4-10^9 <= tab[i] <= 10^9pour tout indiceivalidetabpeut être vide : dans ce cas les trois listes renvoyées sont videstabn’est pas nécessairement trié et peut contenir des valeurs répétées- la fonction renvoie un triplet de trois listes d’indices, chacune dans l’ordre croissant des indices
Exercice 2
Contraintes :
nomest une chaîne de caractèresresultatsest un dictionnaire dont les clefs sont des chaînes de caractères (les noms des élèves) et les valeurs des dictionnaires, avec0 <= len(resultats) <= 10^3- chaque dictionnaire d’élève associe un nom d’épreuve (chaîne de caractères) à une liste
[note, coefficient]de longueur 2, avec au plus10^2épreuves par élève noteest un entier ou un flottant avec0 <= note <= 20coefficientest un entier avec1 <= coefficient <= 10- si
nomest une clef deresultatsassociée à un dictionnaire vide, la fonction renvoie0 - si
nomn’est pas une clef deresultats, la fonction renvoieNone - sinon la fonction renvoie la moyenne pondérée arrondie au dixième