149 lines
3.1 KiB
Markdown
149 lines
3.1 KiB
Markdown
## Exercice
|
|
|
|
### Itérer sur les éléments d'un dictionnaire
|
|
|
|
Au zoo de Beauval, il y a 5 éléphants d'Asie, 17 écureuils d'Asie, 7 hippopotames d'Afrique...
|
|
|
|
On représente cet inventaire à l'aide d'un dictionnaire, de la façon suivante:
|
|
|
|
```python
|
|
zoo_Beauval = {
|
|
'elephant' : ('Asie', 5),
|
|
'ecureuil' : ('Asie', 17),
|
|
'panda' : ('Asie', 2),
|
|
'hippopotame' : ('Afrique', 7),
|
|
'girafe' : ('Afrique', 4)
|
|
}
|
|
```
|
|
|
|
De la même manière, on peut représenter le zoo de La Flèche :
|
|
|
|
```python
|
|
zoo_LaFleche = {
|
|
'ours' : ('Europe', 4),
|
|
'tigre' : ('Asie', 7),
|
|
'girafe' : ('Afrique', 11),
|
|
'hippopotame' : ('Afrique', 3)
|
|
}
|
|
```
|
|
|
|
|
|
|
|
#### Question n°1
|
|
|
|
On souhaite créer une fonction *plus_grand_nombre* ( ) qui prend un zoo en paramètre et renvoie le nom de l'animal le plus présent au sein du zoo.
|
|
|
|
Exemples :
|
|
|
|
```python
|
|
>> plus_grand_nombre(zoo_LaFleche)
|
|
>> 'girafe'
|
|
```
|
|
|
|
```python
|
|
>> plus_grand_nombre(zoo_Beauval)
|
|
>> 'ecureuil'
|
|
```
|
|
|
|
On aura besoin d'une boucle utilisant
|
|
|
|
```python
|
|
for (cle, valeur) in dico.items()
|
|
```
|
|
|
|
À votre avis, pourquoi ?
|
|
|
|
|
|
|
|
Écrire la fonction :
|
|
|
|
```python
|
|
def plus_grand_nombre(zoo):
|
|
"""
|
|
:param: zoo est un dictionnaire dont les clés sont des str (noms des animaux)
|
|
:param: les valeurs de ces clés sont des tuples (origine, nombre) avec origine : str et nombre : int
|
|
:return: le nom de l'animal le plus représenté dans le zoo, sous la forme d'une chaîne de caractères
|
|
"""
|
|
|
|
pass
|
|
```
|
|
|
|
|
|
|
|
#### Question n°2
|
|
|
|
On souhaite se doter d'une fonction *nombre_total* ( ) qui prend un zoo ainsi que le nom d'un continent en paramètre, et qui renvoie le nombre d'animaux originaires de ce continent dans le zoo.
|
|
|
|
Exemples :
|
|
|
|
```python
|
|
>> nombre_total(zoo_LaFleche, 'Afrique')
|
|
>> 14
|
|
```
|
|
|
|
```python
|
|
>> nombre_total(zoo_Beauval, 'Asie')
|
|
>> 24
|
|
```
|
|
|
|
On utilisera une boucle
|
|
|
|
```python
|
|
for valeur in dico.values()
|
|
```
|
|
|
|
Pourquoi ?
|
|
|
|
|
|
|
|
Écrire la fonction :
|
|
|
|
```python
|
|
def nombre_total(zoo, continent):
|
|
"""
|
|
:param: zoo est un dictionnaire dont les clés sont des chaines, correspondantes aux noms des animaux
|
|
:param: et dont les valeurs sont des tuples (origine, nombre), origine étant une chaine, nombre un int
|
|
:param: continent est une chaine comprenant le nom d'un continent d'où sont originaires les animaux
|
|
:return: la fonction renvoie le nombre d'animaux originaires de 'continent' dans ce zoo
|
|
"""
|
|
|
|
pass
|
|
```
|
|
|
|
|
|
|
|
#### Question n°3
|
|
|
|
Enfin, on souhaite écrire une fonction nombre, qui prendun zoo ainsi qu'un nom d'animal en paramètre, et qui renvoie le nombre de représentants de cet animal dans le zoo.
|
|
|
|
Exemples :
|
|
|
|
````python
|
|
>> nombre(zoo_LaFleche, 'panda')
|
|
>> 0
|
|
````
|
|
|
|
```python
|
|
>> nombre(zoo_Beauval, 'panda')
|
|
>> 2
|
|
```
|
|
|
|
|
|
|
|
Quel type de boucle va t-on utiliser ici ?
|
|
|
|
Écrire la fonction
|
|
|
|
```python
|
|
def nombre(zoo, animal):
|
|
"""
|
|
:param: zoo est un dictionnaire dont les clés sont des chaines, correspondantes aux noms des animaux
|
|
:param: et dont les valeurs sont des tuples (origine, nombre), origine étant une chaine, nombre un int
|
|
:param: animal est une chaine comprenant le nom d'un animal
|
|
:return: la fonction renvoie le nombre de représentants du paramètre 'animal' dans ce zoo
|
|
"""
|
|
|
|
pass
|
|
```
|
|
|