sujet Test 1 : code

Auteur :
  • 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

  1. 3 fichiers dans un projet :
    • le programme principal main.py,
    • les fonctions utilisées fonctions.py,
    • les tests des fonctions test_fonctions.py.
  2. Du joli code :
    • 0 warning,
    • le code doit être passé par black.
  3. Bons noms :
    • de fichiers,
    • de variables.
  4. 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 :

  1. Demander à l'utilisateur une chaîne de caractères que l'on nommera chaine_entrée (en utilisant la fonction input([prompt: str]) -> str)
  2. Demander à l'utilisateur un caractère que l'on nommera caractère_entrée (vous ne ferez aucune vérification de type)
  3. Afficher à l'écran le plus petit indice (ou -1) de chaine_entrée valant caractère_entrée (vous pourrez utiliser la méthode find des chaines de caractères)
  4. 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 que chaine[j] == chaine[indice],
  • None si cet indice n'existe pas.

Tests de donne_prochain_indice(chaine:str, indice:int) -> int

Vous pourrez tester que :

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 valant caractère_entrée (vous pourrez utiliser la méthode find des chaines de caractères) (question 1)
  • Afficher si caractère_entrée est présent plus d'une fois dans chaine_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 :

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 valant caractère_entrée (vous pourrez utiliser la méthode find des chaines de caractères) (question 1)
  • Afficher à l'écran si caractère_entrée est présent plus d'une fois dans chaine_entrée (question 2)
  • Afficher à l'écran le nombre de fois où caractère_entrée apparait dans chaine_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 valant caractère_entrée (vous pourrez utiliser la méthode find des chaines de caractères) (question 1)
  • Afficher à l'écran si caractère_entrée est présent plus d'une fois dans chaine_entrée (question 2)
  • Afficher à l'écran le nombre de fois où caractère_entrée apparait dans chaine_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)