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:
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é!
É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.
É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.
Si on généralise un peu, le code ci-dessous permet de répondre à la question:
où 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)
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
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 !
def filtrer(t):
res = []
for x in t:
if P(x): #remplacer par le prédicat
res.append(x)
return res
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).
Exemples:
[ ('A',1), ('B',1), ('C',1), ('A',1), ('B',1), ('D',1) ]
et pour chaque lettre, on veut la somme des 1.
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…)
.