Aller au contenu

Sujet n°42

Sujet original

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

Exercice n°1

Écrire une fonction tri_selection() qui prend en paramètre une liste tab de nombres entiers, et qui renvoie la liste triée par ordre croissant.
Il est demandé de ne pas créer de nouvelle liste mais de modifier celle fournie.

On utilisera l’algorithme suivant :

  • on recherche le plus petit élément de la liste, en la parcourant du rang 0 au dernier rang, et on l'échange avec l'élément d'indice 0 ;

  • on recherche ensuite le plus petit élément de la liste restreinte du rang 1 au dernier rang, et on l'échange avec l'élément d'indice 1 ;

  • on continue de cette façon jusqu'à ce que la liste soit entièrement triée

Commentaires
  1. Ici, le mot « liste » est à comprendre dans le sens « liste Python » (c'est-à-dire tableau) plutôt que dans le sens du type abstrait de données liste étudié en Terminale.
  2. On peut s'interroger sur le fait de demander de modifier le tableau fourni (par effet de bord) s'il faut ensuite le renvoyer...

Exemple

>>> tri_selection([1, 52, 6, -9, 12])
[-9, 1, 6, 12, 52]
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
def tri_selection(tab):
    """
    tab - list, tableau de nombres non triés
    Sortie: list, tableau contenant les éléments de tab,
            mais triés par ordre croissant
    """
    for i in range(len(tab)-1):
        i_mini = i
        for j in range(i, len(tab)):
            if tab[j] < tab[i_mini]:
                i_mini = j
        tab[i], tab[i_mini] = tab[i_mini], tab[i]
    return tab


if __name__ == '__main__':
    # Exemple de l'énoncé
    print(tri_selection([1, 52, 6, -9, 12]) == [-9, 1, 6, 12, 52])

    # Exemples supplémentaires
    print(tri_selection([0, 1, 4, 2, -2, 9, 3, 1, 7, 1]) == [-2, 0, 1, 1, 1, 2, 3, 4, 7, 9])
    print(tri_selection([5, 4, 3, 2, 1]) == [1, 2, 3, 4, 5])

Exercice n°2

Le jeu du « plus ou moins » consiste à deviner un nombre entier choisi entre 1 et 99.

Un élève de NSI décide de le coder en langage Python de la manière suivante :

  • le programme génère un nombre entier aléatoire compris entre 1 et 99 ;

  • si la proposition de l’utilisateur est plus petite que le nombre cherché, l’utilisateur en est averti. Il peut alors en tester un autre ;

  • si la proposition de l’utilisateur est plus grande que le nombre cherché, l’utilisateur en est averti. Il peut alors en tester un autre ;

  • si l’utilisateur trouve le bon nombre en 10 essais ou moins, il gagne ;

  • si l’utilisateur a fait plus de 10 essais sans trouver le bon nombre, il perd.

La fonction randint du module random est utilisée.
Si a et b sont des entiers, randint(a, b) renvoie un nombre entier compris entre a et b.

Compléter le code ci-dessous et le tester.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from random import randint

def plus_ou_moins():
    nb_mystere = randint(1, ...)
    nb_test = int(input("Proposez un nombre entre 1 et 99 : "))
    compteur = ...

    while nb_mystere != ... and compteur < ... :
        compteur = compteur + ...
        if nb_mystere ... nb_test:
            nb_test = int(input("Trop petit ! Testez encore : "))
        else:
            nb_test = int(input("Trop grand ! Testez encore : "))

    if nb_mystere == nb_test:
        print ("Bravo ! Le nombre était", ...)
        print("Nombre d'essais :", ...)
    else:
        print ("Perdu ! Le nombre était", ...)
Commentaire sur le code original
  1. Pour télécharger l'original du fichier à compléter, cliquer ici.

  2. Un programme rempli de input() et de print(), ce n'est clairement pas dans l'esprit des instructions officielles. De plus, sans exemple, comment tester son travail correctement ?

Une réponse
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from random import randint

def plus_ou_moins():
    nb_mystere = randint(1, 99)
    nb_test = int(input("Proposez un nombre entre 1 et 99 : "))
    compteur = 1

    while nb_mystere != nb_test and compteur < 10 :
        compteur = compteur + 1
        if nb_mystere > nb_test:
            nb_test = int(input("Trop petit ! Testez encore : "))
        else:
            nb_test = int(input("Trop grand ! Testez encore : "))

    if nb_mystere == nb_test:
        print ("Bravo ! Le nombre était", nb_mystere)
        print("Nombre d'essais :", compteur)
    else:
        print ("Perdu ! Le nombre était", nb_mystere)