sujet Test 1 : code
- François Brucker
Vous avez 15min pour faire le test.
Rendu
On vous rappelle que toute fonction (hors du programme principal) doit être testée.
Type de rendu
Vous devrez rendre le dossier d'un projet vscode (vous pouvez le compresser si nécessaire). Commencez donc par créer un projet dans un dossier que vous appellerez test1
.
Éléments de notation
- 3 fichiers dans un projet :
- le programme principal
main.py
, - les fonctions utilisées
fonctions.py
, - les tests des fonctions
test_fonctions.py
.
- le programme principal
- Du joli code :
- 0 warning,
- le code doit être passé par black.
- Bons noms :
- de fichiers,
- de variables.
- Tests unitaires : toute fonction non testée ne sera pas corrigée.
1. Création du programme principal
Créer le fichier main.py
qui va contenir le programme principal. Celui-ci consistera à demander à l'utilisateur une chaine de caractères et un caractère et l'on cherchera à savoir combien de fois apparait le caractère dans la chaîne. Nous allons répondre à cette question en 3 questions.
Créer dans le fichier main.py
le code permettant d'exécuter les 4 étapes de l'algorithme suivant :
- Demander à l'utilisateur une chaîne de caractères que l'on nommera
chaine_entrée
(en utilisant la fonctioninput([prompt: str]) -> str
) - Demander à l'utilisateur un caractère que l'on nommera
caractère_entrée
(vous ne ferez aucune vérification de type) - Afficher à l'écran le plus petit indice (ou -1) de
chaine_entrée
valantcaractère_entrée
(vous pourrez utiliser la méthodefind
des chaines de caractères) - Retournez à l'étape 1. de cet algorithme à part si
chaîne_entrée
valait"sortie"
2. Prochain indice
On veut savoir si le caractère caractère_entrée
apparait plusieurs fois dans la chaine chaine_entrée
. Comme on connait déjà le premier indice où il apparait, on cherche s'il apparait aussi plus tard.
Fonction donne_prochain_indice(chaine:str, indice:int) -> int
Créer la fonction donne_prochain_indice(chaine:str, indice:int) -> int
qui rend :
- Le plus petit indice $j$ strictement plus grand que le paramètre
indice
tel quechaine[j] == chaine[indice]
, None
si cet indice n'existe pas.
Tests de donne_prochain_indice(chaine:str, indice:int) -> int
Vous pourrez tester que :
donne_prochain_indice("bxaaxaaaxax", 4)
rende 8donne_prochain_indice("bxaaxaaaxax", 0)
rendeNone
Ajout de question 2 au programme principal
On ajoute notre fonction au programme principal :
Dans l'étape 3. de l'algorithme du programme principal, utilisez la fonction que vous venez de coder pour ajouter un affichage qui indique si caractère_entrée
apparait plusieurs fois dans chaine_entrée
ou pas.
L'étape 3. du programme principal sera alors constitué de deux actions :
- Afficher à l'écran le plus petit indice (ou -1) de
chaine_entrée
valantcaractère_entrée
(vous pourrez utiliser la méthodefind
des chaines de caractères) (question 1) - Afficher si
caractère_entrée
est présent plus d'une fois danschaine_entrée
(question 2)
3. Compte
On veut finalement savoir combien de fois apparaît caractère_entrée
dans la chaîne chaine_entrée
. Comme on connait sa première position grace à la question 1 et qu'on peut connaitre la suivante grace à la question 2, on va terminer le boulot et compter combien de fois apparaît caractère_entrée
dans chaine_entrée
.
Fonction compte_caractère(chaine: str, indice: int) -> int
Créer la fonction compte_caractère(chaine: str, indice: int) -> int
qui rend le nombre de fois où le caractère chaine[indice]
est présent dans le paramètre chaine
Tests de compte_caractère(chaine: str, indice: int) -> int
Vous pourrez tester avec :
- Un caractère non présent dans la chaine
- Un caractère présent plusieurs fois dans la chaine
Ajout de question 3 au programme principal
Dans l'étape 3. de l'algorithme du programme principal, utilisez la fonction que vous venez de coder pour ajouter un affichage qui indique le nombre de fois où caractère_entrée
apparait dans chaine_entrée
.
L'étape 3. du programme principal sera alors constitué de trois actions :
- Afficher à l'écran le plus petit indice (ou -1) de
chaine_entrée
valantcaractère_entrée
(vous pourrez utiliser la méthodefind
des chaines de caractères) (question 1) - Afficher à l'écran si
caractère_entrée
est présent plus d'une fois danschaine_entrée
(question 2) - Afficher à l'écran le nombre de fois où
caractère_entrée
apparait danschaine_entrée
(question 3)
4. Maximum
Cerise sur le gateau, on cherche à savoir si caractère_entrée
est le caractère qui apparait le plus de fois dans chaine_entrée
.
Fonction donne_max_doublon(chaine: str) -> str
Créer la fonction donne_max_doublon(chaine: str) -> str
qui rend le caractère de chaine
apparaissant le plus de fois.
Créer la fonction donne_max_doublon(chaine: str) -> str
qui rend le caractère de chaine
apparaissant le plus de fois.
Tests
Vous pourrez tester avec une chaine admettant plusieurs caractères répétés un nombre différent de fois.
Ajout de question 4 au programme principal
Dans l'étape 3. de l'algorithme du programme principal, utilisez la fonction que vous venez de coder pour ajouter un affichage qui le nombre maximum de répétition d'un caractère, et affichez un message de victoire si caractère_entrée
réalise ce maximum.
L'étape 3. du programme principal sera alors constitué de quatre actions :
- Afficher à l'écran le plus petit indice (ou -1) de
chaine_entrée
valantcaractère_entrée
(vous pourrez utiliser la méthodefind
des chaines de caractères) (question 1) - Afficher à l'écran si
caractère_entrée
est présent plus d'une fois danschaine_entrée
(question 2) - Afficher à l'écran le nombre de fois où
caractère_entrée
apparait danschaine_entrée
(question 3) - Afficher à l'écran le nombre maximum de répétition d'un caractère, et affichez un message de victoire si
caractère_entrée
réalise ce maximum. (question 4)