Aller au contenu

Sujet n°40

Sujet original

Pour télécharger l'énoncé original, cliquer ici.

Exercice n°1

Écrire une fonction recherche() qui prend en paramètres elt un nombre et tab un tableau de nombres, et qui renvoie le tableau des indices de elt dans tab si elt est dans tab et le tableau vide [] sinon.

Exemples

1
2
3
4
5
>>> recherche(3, [3, 2, 1, 3, 2, 1])
[0, 3]

>>> recherche(4, [1, 2, 3])
[]
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def recherche(elt, tab):
    """
    elt - int ou float, un nombre
    tab - list, tableau de nombres
    Sortie: list - tableau des indices de elt dans tab.
    """
    result = []
    for i in range(len(tab)):
        if tab[i] == elt:
            result.append(i)
    return result

if __name__ == '__main__':
    # Exemples de l'énoncé
    print(recherche(3, [3, 2, 1, 3, 2, 1]) == [0, 3])
    print(recherche(4, [1, 2, 3]) == [])
    # Nouvel exemple
    print(recherche(1, [1, 1, 1, 1, 1, 1, 1, 1]) == [0, 1, 2, 3, 4, 5, 6, 7])
    print(recherche(4, [3, 2, 1, 4, 2, 1]) == [3])

Exercice n°2

Un professeur 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 et les valeurs sont les notes obtenues associées à leurs coefficients.

Exemple

L’élève de nom « Durand » a obtenu au DS2 la note de 8 avec un coefficient 4 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
resultats = {'Dupont': {'DS1' : [15.5, 4],
                        'DM1' : [14.5, 1],
                        'DS2' : [13, 4],
                        'PROJET1' : [16, 3],
                        'DS3' : [14, 4] },
             'Durand': {'DS1' : [6 , 4],
                        'DM1' : [14.5, 1],
                        'DS2' : [8, 4],
                        'PROJET1' : [9, 3],
                        'IE1' : [7, 2],
                        'DS3' : [8, 4],
                        'DS4' : [15, 4]} }

Le professeur crée une fonction moyenne() qui prend en paramètre le nom d’un de ces élèves et lui renvoie sa moyenne arrondie au dixième.

Compléter le code du professeur ci-dessous :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def moyenne(nom):
    if nom in ...:
        notes = resultats[nom]
        total_points = ...
        total_coefficients = ...
        for ... in notes.values():
            note , coefficient = valeurs
            total_points = total_points + ... * coefficient
            total_coefficients = ... + coefficient
        return round( ... / total_coefficients , 1 )
    else:
        return -1
Commentaire sur le code original
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. Compliqué ici d'ajouter un exemple pertinent qui permette de vérifier la bonne exécution de ce programme.

  3. Le code fait appel à la fonction round() dont le rôle n'est pas explicité.
    N'oubliez pas que vous pouvez taper l'instruction :

    1
    >>> help(round)
    
    pour obtenir la documentation de cette fonction.

Une réponse
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
resultats = {'Dupont':{'DS1' : [15.5, 4],
                       'DM1' : [14.5, 1],
                       'DS2' : [13, 4],
                       'PROJET1' : [16, 3],
                       'DS3' : [14, 4] },
             'Durand':{'DS1' : [6 , 4],
                       'DM1' : [14.5, 1],
                       'DS2' : [8, 4],
                       'PROJET1' : [9, 3],
                       'IE1' : [7, 2],
                       'DS3' : [8, 4],
                       'DS4' : [15, 4]}}


def moyenne(nom):
    if nom in resultats.keys():
        notes = resultats[nom]
        total_points = 0
        total_coefficients = 0
        for valeurs  in notes.values():
            note , coefficient = valeurs
            total_points = total_points + note * coefficient
            total_coefficients = total_coefficients + coefficient
        return round( total_points / total_coefficients , 1 )
    else:
        return -1



if __name__ == '__main__':
    print(moyenne('Dupont') == 14.5)
    print(moyenne('Durand') == 9.2)
    print(moyenne('Duval') == -1)