# Examen 3 - 2023

*Auteurs : Rémy Corriveau, adapté par Dalicia.*

{% hint style="warning" %}
Veuillez noter que cet examen a été légèrement ajusté pour des raisons pratiques.
{% endhint %}

## Contenu

* Boucles imbriquées.
* Listes à deux dimensions.
* Modules : utilisation de modules random et datetime.
* Recherche dans la documentation officielle de Python.

## Durée

2 heures.

## Code source à compléter

{% file src="<https://700524925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn5YnWU89G98lz0ROIcGu%2Fuploads%2FVmPqMA3Ds30r3RPW7hrH%2Fechange_cadeaux.zip?alt=media&token=fd987789-f143-462c-a8ab-d609439426b3>" %}

{% file src="<https://700524925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fn5YnWU89G98lz0ROIcGu%2Fuploads%2F9o0x4yJevFZKpKjcs5sZ%2Ftrace_execution.txt?alt=media&token=f0d20df2-9238-4911-a00c-d9eb10f2b2de>" %}

## Échange de cadeaux                                                                    &#x20;

Vous devez créer un programme Python pour gérer un échange de cadeau en milieu de travail. L’application devra permettre d’ajouter des participations à l’échange et, lorsque la personne administrant l’échange le jugera bon, il ou elle pourra générer la pige. Il doit être possible de voir qui a pigé qui ainsi que la liste de cadeaux si la date de déballage de cadeaux le permet.

### Exigences

* Utiliser le programme fourni et le compléter.
* Utiliser le format de la structure de données fournie dans le programme.
* Créer plusieurs fonctions pertinentes avec passage de paramètres et valeurs de retour (lorsque nécessaire).

### Ajout d’une participation

L’ajout d’une participation à l’échange de cadeaux requiert l’ajout du prénom, l’ajout de plusieurs cadeaux, ainsi que la date à partir de laquelle le déballage de ces cadeaux est permise. Cette date doit être entrée au format *"JJ-MM-AA HH:MM"*.

Vous trouverez dans le programme fourni le format de la structure de données souhaitée.

### Affichage des détails des participations

Cette fonction est partiellement créée pour vous. Vous devez la compléter de façon à afficher les noms des participants de l’échange ainsi que leurs cadeaux et leurs dates de déballages. Un exemple d’affichage se trouve dans le *Docstring* de cette fonction et dans l’exemple d’exécution.

### Simulation de la pige

Le programme doit simuler la pige de cadeaux suivante :

1. Chaque participant (destinataire des cadeaux) doit mélanger un sac contenant les prénoms des autres participants écrits dans des bouts de papiers.
2. Une fois le mélange effectué, le destinataire des cadeaux choisit aléatoirement un papier du sac. Il recevra alors tous les cadeaux du participant qu’il a pigé.
3. Le nom du participant donateur du cadeau est mentionné (pour le ou la remercier) mais les cadeaux sont déballés uniquement si la date de déballage est arrivée.

#### Précisions

* Une personne reçoit tous les cadeaux d’un.e seul.e et unique participant.e qu’il ou elle a pigé.
* Les cadeaux d’un.e participant.e (donateur) sont donnés à un.e seul.e et unique participant.e (destinataire).
* Une personne ne peut pas s’offrir ses cadeaux à elle-même.
* Les cadeaux reçus par une personne ne peuvent pas être déballés si la date de déballage n’est pas arrivée.

### Tests unitaires

* Créez le(s) test(s) unitaire(s) pour la fonction *obtenir\_prenoms\_participants*.
* Plan de tests :&#x20;
  * 3 données de tests variées permettant de valider les bons résultats.
  * 4 Cas limites ~~et exceptions~~ :&#x20;
    * Vous devez inclure le test suivant : (\[\[123]], None).
    * Ajoutez 3 autres cas limites (~~incluant les exceptions~~).
* Vérifications (assert) :  3 vérifications différentes et pertinentes.

## Annexe : exemple d'exécution

```python
Bienvenue dans l'application de gestion d'échange de cadeaux!

Combien de participations voulez-vous ajouter à l'échange de cadeaux ? 2
Ajout du participant 1/2
Veuillez entrer le prénom du participant : Louis
Entrez les cadeaux que le participant souhaite offrir. 
Si vous voulez arrêter l'ajout de cadeaux, appuyez sur 'Entrée' sans rien écrire.
Veuillez entrer un cadeau à offrir : stylo
Veuillez entrer un autre cadeau à offrir : carnet
Veuillez entrer un autre cadeau à offrir : 
Veuillez entrer la date à laquelle les cadeaux peuvent être déballés (format JJ-MM-AA HH:MM): 25-12-24 10:00
Ajout du participant 2/2
Veuillez entrer le prénom du participant : Elena
Entrez les cadeaux que le participant souhaite offrir. 
Si vous voulez arrêter l'ajout de cadeaux, appuyez sur 'Entrée' sans rien écrire.
Veuillez entrer un cadeau à offrir : Chocolat
Veuillez entrer un autre cadeau à offrir : Livre
Veuillez entrer un autre cadeau à offrir : 
Veuillez entrer la date à laquelle les cadeaux peuvent être déballés (format JJ-MM-AA HH:MM): 01-11-24 15:00
Voici la liste des participations : 
Participant : Rabia
	Cadeaux : bas, tasse, livre
	Date de déballage : lun. 20 nov. 2023 à partir de 21:00
Participant : Franck
	Cadeaux : certificat, casquette
	Date de déballage : sam. 23 déc. 2023 à partir de 11:30
Participant : Camilla
	Cadeaux : chocolats, orange, charbon
	Date de déballage : jeu. 23 nov. 2023 à partir de 10:45
Participant : Louis
	Cadeaux : stylo, carnet
	Date de déballage : mer. 25 déc. 2024 à partir de 10:00
Participant : Elena
	Cadeaux : Chocolat, Livre
	Date de déballage : ven. 01 nov. 2024 à partir de 15:00
Échange de cadeaux aléatoire (la pige) :
Rabia s'est fait offrir les cadeaux de Franck : ['certificat', 'casquette']
Franck s'est fait offrir les cadeaux de Rabia : ['bas', 'tasse', 'livre']
Camilla s'est fait offrir les cadeaux de Louis, mais ne peut pas encore les déballer :(.
Louis s'est fait offrir les cadeaux de Elena : ['Chocolat', 'Livre']
Elena s'est fait offrir les cadeaux de Camilla : ['chocolats', 'orange', 'charbon']
```
