====== 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)