Outils pour utilisateurs

Outils du site


nsi:premiere:tableau:tri:critere

Tri, Exercice : Choix d'un critère

Supposons que les éléments à trier n'ait pas un ordre évident. Par exemple supposons que notre tableau soit :

[
    ("chaussettes", "4NB517", 3.50),
    ("moutarde",    "8XG356", 2.50),
    ("cahier",      "2KL649", 2.80),
    ("saucisson",   "1SR912", 5.65),
    ("crayons",     "3GE416", 3.50),
    ("gâteaux",     "8OU996", 2.80),
    ("bananes",     "7JV824", 1.95)
]

Nous voulons trier par prix croissante et, si les prix sont les mêmes, par nom de produit.

On définit alors une fonction prix(item) qui extrait le prix d'un item donné. Par exemple :

>>> item = ("saucisson",   "1SR912", 5.65)
>>> prix(item)
5.65

Cette fonction est soumise comme critère à un tri par sélection ce qui permet de trier le tableau.

Dans le code ci-dessous,

  • complétez la fonction prix,
  • modifiez la fonction tri pour qu'elle tienne compte du critère choisi,
  • exécutez pour voir si le test produit le résultat attendu.
# tri avec critère

def prix(item):
    '''
    item: item de la liste
      exemple : item = ("saucisson",   "1SR912", 5.65)
    renvoie le prix de l'item
      exemple : renvoie 5.65
    '''
    # à compléter

def tri(tab, key):
    '''
    tab: tableau à trier
    key: fonction (item) -> valeur
    tri le tableau en comparant les items selon la fonction clé
    '''
    # il faut modifier cette fonction pour tenir compte de key
    n = len(tab)
    for i in range(n-1):
        i_min = i
        for j in range(i+1,n):
            if tab[j] < tab[i_min]:
                i_min = j
        if i != i_min:
            tab[i_min], tab[i] = tab[i], tab[i_min]

# tests
if __name__=="__main__":
    T = [
        ("chaussettes", "4NB517", 3.50),
        ("moutarde",    "8XG356", 2.50),
        ("cahier",      "2KL649", 2.80),
        ("saucisson",   "1SR912", 5.65),
        ("crayons",     "3GE416", 3.50),
        ("gâteaux",     "8OU996", 2.80),
        ("bananes",     "7JV824", 1.95)
    ]

    print("tableau à trier =", T)
    print("Exécution du tri...")
    tri_par_selection(T, prix)
    print("tableau trié = ", T)
nsi/premiere/tableau/tri/critere.txt · Dernière modification : de goupillwiki