Introduction à l'informatique

Cours 7.5

kn@lmf.cnrs.fr
https://usr.lmf.cnrs.fr/~kn

But du cours

Le but est de consolider les connaissances en Python, particulièrement sur les tableaux et dicionnaires. On va se donner une série de problème concrets (ex: « trouver l'indice de la valeur maximale d'un tableau ») et on va essayer:

  1. de le résoudre en Python
  2. de reconnaître les problèmes similaires ≡ dont le code aura la même structure
  3. on admet que les solutions données sont efficaces (cours Algo et Structure de données S2)

Pour pouvoir faire le point (3.) on évitera certaines opérations Python non vue dans le cadre de ce cours, en particulier celles qui s'écrivent simplement mais cachent des opérations coûteuses.

Les supports de cours seront minimaux: il faudra aussi apprendre le fichier Python associé!

Recherche d'un élément dans un tableau

Appartenance d'un élément

Énoncé :
écrire une fonction appartient(t, e) qui renvoie True si e est dans le tableau t et False sinon.

On écrit la fonction ainsi qu'une fonction de test.

Existence d'un entier pair

Énoncé :
écrire une fonction contient_pair(t) qui renvoie True si t contient un entier pair.

On écrit la fonction ainsi qu'une fonction de test.

Algorithme général

Si on généralise un peu, le code ci-dessous permet de répondre à la question:

∃ x ∊ t, tel que P(x)

P est un prédicat (≡ un test) booléen : x est positif, x est égal à une valeur donnée, …

def exists(t): for x in t: if P(x): #remplacer par le vrai test return True return False

On parcours au pire tout le tableau (quand aucun élément ne vérifie le prédicat et qu'on doit renvoyer False)

Variante : renvoyer l'indice de l'élément tel que…

Recherche de plusieurs éléments dans un tableau ?

Les fonctions précédentes permettent de renvoyer un élément du tableau.

Comment faire si on veut renvoyer toutes les valeurs qui vérifient un prédicat ?

Problème, on ne sait pas, a priori, combien de valeurs on va renvoyer

Ajout d'élément en fin de tableau

On peut ajouter un élément en fin de tableau avec l'opération append

>>> tab = [10, 11, 42] >>> len(tab) 3 >>> tab.append(100) >>> tab [10, 11, 42, 100] >>> len(tab) 4 >>> tab2 = tab >>> tab2.append(18) >>> tab2 [10, 11, 42, 100, 18] >>> tab [10, 11, 42, 100, 18]

Attention au partage !

Exemples d'application

def filtrer(t): res = [] for x in t: if P(x): #remplacer par le prédicat res.append(x) return res

Agrégat d'un tableau

Exemples

Structure générale du code

def agregat(t): accu = ... #valeur initiale for x in t: if test(x): #l'élément courant est utile (optionnel) accu = comb(x, accu) #on le combine return accu

Attention, certaines fonctions suivent ce motif mais ne sont définies que pour des tableaux non vide (ex: moyenne).

Groupements de valeurs

Problème

Exemples:

Solution

On parcourt le tableau avec un dictionnaire auxiliaire où on va calculer l'aggregat pour chaque clé

.

On peut ensuite faire ce qu'on veut avec le dictionnaire (par exemple le renvoyer tel quel ou le filtrer, prendre le maximum etc…)

.