Le bon enclos⚓︎
On considère une table (une liste de dictionnaires Python) qui contient des enregistrements relatifs à des animaux hébergés dans un refuge.
Les attributs des enregistrements sont :
nom
,espece
,age
,enclos
.
Les valeurs associées à nom
et espece
sont des chaines de caractères, celles associées à age
et enclos
des entiers.
Voici un exemple d'une telle table :
animaux = [ {'nom': 'Medor', 'espece': 'chien', 'age': 5, 'enclos': 2},
{'nom': 'Titine', 'espece': 'chat', 'age': 2, 'enclos': 5},
{'nom': 'Tom', 'espece': 'chat', 'age': 7, 'enclos': 4},
{'nom': 'Belle', 'espece': 'chien', 'age': 6, 'enclos': 3},
{'nom': 'Mirza', 'espece': 'chat', 'age': 6, 'enclos': 5}]
On garantit que chaque enregistrement contient l'ensemble des informations (aucune clé ne manque dans un dictionnaire).
Programmer une fonction selection_enclos
qui :
- prend en paramètres :
- une liste
table_animaux
contenant des enregistrements relatifs à des animaux (comme dans l'exemple ci-dessus), - un numéro d'enclos
num_enclos
;
- une liste
- renvoie une table contenant les enregistrements de
table_animaux
dont l'attributenclos
est égal ànum_enclos
. Dans cette table, les enregistrements seront donnés dans le même ordre que dans la table d'entrée.
Exemples avec la table animaux ci-dessus :
Exemples
>>> selection_enclos(animaux, 5)
[{'nom': 'Titine', 'espece': 'chat', 'age': 2, 'enclos': 5},
{'nom':'Mirza', 'espece':'chat', 'age':6, 'enclos':5}]
>>> selection_enclos(animaux, 2)
[{'nom':'Medor', 'espece':'chien', 'age':5, 'enclos':2}]
>>> selection_enclos(animaux, 7)
[]
def selectionpy-undenclos(tablepy-undanimaux, numpy-undenclos):bksl-nl ...bksl-nlbksl-nlbksl-nl# Testsbksl-nlanimaux = [{'nom': 'Medor', 'espece': 'chien', 'age': 5, 'enclos': 2},bksl-nl {'nom': 'Titine', 'espece': 'chat', 'age': 2, 'enclos': 5},bksl-nl {'nom': 'Tom', 'espece': 'chat', 'age': 7, 'enclos': 4},bksl-nl {'nom': 'Belle', 'espece': 'chien', 'age': 6, 'enclos': 3},bksl-nl {'nom': 'Mirza', 'espece': 'chat', 'age': 6, 'enclos': 5}]bksl-nlassert selectionpy-undenclos(animaux, 5) == [{'nom': 'Titine', 'espece': 'chat', 'age': 2, 'enclos': 5}, {bksl-nl 'nom': 'Mirza', 'espece': 'chat', 'age': 6, 'enclos': 5}]bksl-nlassert selectionpy-undenclos(animaux, 2) == [bksl-nl {'nom': 'Medor', 'espece': 'chien', 'age': 5, 'enclos': 2}]bksl-nlassert selectionpy-undenclos(animaux, 7) == []bksl-nlbksl-nldef selectionpy-undenclos(tablepy-undanimaux, numpy-undenclos):bksl-nl resultat = []bksl-nl for animal in tablepy-undanimaux:bksl-nl if animal['enclos'] == numpy-undenclos:bksl-nl resultat.append(animal)bksl-nl return resultatbksl-nlbksl-nlbksl-nlbksl-nlbksl-nl# Testsbksl-nlanimaux = [{'nom': 'Medor', 'espece': 'chien', 'age': 5, 'enclos': 2},bksl-nl {'nom': 'Titine', 'espece': 'chat', 'age': 2, 'enclos': 5},bksl-nl {'nom': 'Tom', 'espece': 'chat', 'age': 7, 'enclos': 4},bksl-nl {'nom': 'Belle', 'espece': 'chien', 'age': 6, 'enclos': 3},bksl-nl {'nom': 'Mirza', 'espece': 'chat', 'age': 6, 'enclos': 5}]bksl-nlassert selectionpy-undenclos(animaux, 5) == [{'nom': 'Titine', 'espece': 'chat', 'age': 2, 'enclos': 5}, {bksl-nl 'nom': 'Mirza', 'espece': 'chat', 'age': 6, 'enclos': 5}]bksl-nlassert selectionpy-undenclos(animaux, 2) == [bksl-nl {'nom': 'Medor', 'espece': 'chien', 'age': 5, 'enclos': 2}]bksl-nlassert selectionpy-undenclos(animaux, 7) == []bksl-nlbksl-nl
A
Le problème revient à filtrer les éléments d'une liste de dictionnaires selon un critère portant sur les valeurs des dictionnaires.
On crée une liste resultat
qui contiendra les enregistrements souhaités.
On parcourt ensuite la liste des enregistrements avec la variable nommée animal
. Pour chaque animal
on teste son enclos. S'il correspond à celui cherché, on ajoute l'enregistrement à la fin de la liste.
Z