Sujet n° 1 : Cycle menstruel
Cette situation d’évaluation comporte ce document ainsi que des fichiers de codes et de données présents sur l’ordinateur à la disposition du candidat. Le candidat doit restituer ce document avant de sortir de la salle d'examen. Le candidat doit agir en autonomie et faire preuve d’initiative tout au long de l’épreuve.
En cas de difficulté, le candidat peut solliciter l’examinateur afin de lui permettre de continuer la tâche. Des moments privilégiés pour solliciter l’examinateur sont indiqués dans le document sous la forme d’appels professeur.
L’examinateur peut intervenir à tout moment, s’il le juge utile.
Le cycle menstruel désigne l’ensemble des transformations physiologiques cycliques qui se répètent en moyenne tous les 28 jours chez une femme, de la puberté à la ménopause. Il est constitué d’une succession de deux phases séparées par l’ovulation. Avant l’ovulation, on définit la phase folliculaire, après l’ovulation, on définit la phase lutéale. Par convention, le cycle menstruel commence le premier jour des règles. L’ovulation se réalise toujours 14 jours avant le début des menstruations. Le schéma ci-dessous résume ce cycle.
Ce sujet propose ainsi de concevoir une application permettant de calculer et de prédire les différentes étapes du cycle menstruel à partir des dates fournies préalablement. On suppose un cycle régulier de 28 jours et on distingue les quatre phases suivantes, d’une façon simplifiée :
| Phases d’un cycle menstruel | |||
| Phase | Numéro | Jours du cycle | Description |
| Règles | 1 | 1 à 5 | Écoulement menstruel |
| Phase folliculaire | 2 | 6 à 13 | Développement d’un follicule dans l’ovaire |
| Ovulation | 3 | 14 | Libération de l’ovocyte 1 |
| Phase lutérale | 4 | 15 à 28 | Développement de la muqueuse utérine |
Dans ce sujet, une date se représente par le tuple d’entiers (jour, mois, annee), et l’on suppose toujours qu’elle est correctement formée et correspond à une date valide du calendrier grégorien. Par exemple, la date 7 septembre 2025 peut être représentée par le tuple (7, 9, 2025).
Une année est dite bissextile lorsqu’elle comporte 366 jours au lieu de 365. Une année est bissextile si elle est divisible par 4 à l’exception des années divisibles par 100 sauf si ce sont des multiples de 400.
Par exemple :
- • 2024 est une année bissextile car elle est divisible par 4 et pas par 100 ;
- • 2100 n’est pas une année bissextile car elle est divisible par 4 et par 100 mais pas par 400 ;
- • 2000 est une année bissextile car elle est divisible par 4, par 100 et par 400.
1. Écrire en Python une fonction nommée est_bissextile qui prend en paramètre un entier correspondant à une année et qui renvoie un booléen indiquant si elle est bissextile, en appliquant la règle donnée ci-dessus.
| Appel 1 | Appeler le professeur en cas de difficulté de compréhension du codage. |
2. Écrire en Python une fonction nommée determiner_phase qui prend en paramètre un entier (compris entre 1 et 28 inclus) qui correspond au jour d’un cycle et qui renvoie un entier correspondant au numéro de la phase associée. À l’aide d’une assertion, on garantira que l’entier donné en argument est compris entre 1 et 28 inclus.
| Appel 2 | Appeler le professeur pour lui présenter votre fonction et son fonctionnement ou en cas de difficultés. |
3. La fonction ajouter_jours, dont le code est déjà fourni, prend en paramètres une date et un entier représentant un nombre de jours. Elle renvoie la nouvelle date obtenue après ajout de ces jours.
Compléter la fonction test_ajouter_jours en ajoutant au moins trois autres tests pertinents. Pour chaque test ajouté, une brève justification doit être donnée afin d’expliquer pourquoi ce cas est important à vérifier.
Dans le but d'ajouter l’ensemble des dates de début de règles sur un agenda en ligne pour une année donnée, on souhaite créer un fichier au format iCalendar. La structure d’un tel fichier pour un calendrier est la suivante :
BEGIN:VCALENDAR
VERSION:2.0
PRODID: le nom du calendrier
une suite d’événements
END :VCALENDAR
Chaque événement d’une journée est lui-même décrit par une entrée de la forme suivante :
BEGIN :VEVENT
DTSTART: la date JJ/MM/AAAA écrite sous la forme AAAAMMJJ
SUMMARY : la description de l’événement
END :VEVENT
On complète les nombres strictement inférieurs à 10 par un 0 pour s’assurer que la valeur de DTSTART soit toujours de longueur 8. Ainsi, la date du 3 juillet 2026 s’écrit sous la forme DTSTART : 20260703.
4. La fonction calendrier_cycles, présente dans le fichier fourni, prend en paramètre une date correspondant au premier jour des dernières règles et renvoie la liste chronologique des dates de début de règles qui se présentent dans les 100 jours suivant cette date, date incluse, au format iCalendar sous la forme d’une chaîne de caractères.
Observer avec la fonction test_calendrier_cycles que le calendrier renvoyé par la fonction calendrier_cycles n’est pas dans un format valide.
Identifier le problème dans la fonction calendrier_cycles, proposer une démarche de résolution et la mettre en oeuvre.
| Appel 3 | Appeler le professeur pour lui présenter votre démarche ou en cas de difficultés. |
Description du dossier
Le dossier fourni au candidat sur l’ordinateur comporte les éléments suivants :
- • Une version PDF de l’énoncé ;
- • Un code source de départ
cycle_menstruel.py.
Préparation de l’environnement
Pour faire fonctionner le code fourni dans le dossier, les bibliothèques suivantes doivent être présentes : ics.