Informations

Auteur(s) Pierre Dupont
Date limite 01/09/2026 16:00:00
Limite de soumission Pas de limite

Se connecter

[Examen Blanc] Tâche 3 : Trouver la k-ième occurrence d'un élément dans une liste

On vous demande d'écrire le corps de la fonction find_in_list en respectant les spécifications de cette fonction.

def find_in_list(l, e, k):
    """
    pre: `l` est une `List`
    pre: `e` est un élément éventuellement présent dans la liste `l` et différent de `None`
    pre: `k` est un entier tel que `k` > 0
    post: renvoie la sous-liste de `l` débutant à la `k`-ième occurrence de `e` dans `l`.
          Si `e` apparaît moins de `k` fois dans la liste `l`, renvoie une `List` vide.
    """
Notez que votre code Python (sous-question 4) ne sera évalué que lorsque vous aurez correctement répondu aux exemples de validation proposés.
Ces exercices de validation ont pour but d'assurer que vous avez correctement compris les spécifications de la fonction find_in_list.
Ils sont d'ailleurs utilisés pour l'évaluation de votre implémentation.
Vous êtes invités à répondre à ces trois questions de validation et à cliquer sur submit avant toute modification du corps de la fonction find_in_list (sous-question 4).

Attention : Pour les 3 questions de validation ci-dessous, le format de la réponse, lorsqu'il s'agit d'une liste, sera, par exemple : [2[4[5[]]]]
Il s'agit donc d'une représentation sous la forme d'une chaîne de caractères du TAD (récursif) que constitue une List. Dans l'exemple, cette liste a donc pour tête (= head) l'élément 2
et pour fin de liste (= tail), la liste représentée par [4[5[]]]. Une telle représentation est produite par la méthode __str__ dans l'implémentation de List qui
vous est fournie (voir ci-dessous).
Un cas particulier est une liste vide représentée simplement par [].

Question 1: Test de validation 1
Pour vérifier que vous avez bien compris la question, voici un premier exemple.
Déterminez quel serait le résultat de la méthode find_in_list(l, e, k) pour l'instance suivante:
  • l = [1[2[3[]]]]
  • e = 1
  • k = 1

Attention : votre réponse ne doit contenir ni espace, ni virgule, ni point.

Question 2: Test de validation 2
Pour vérifier que vous avez bien compris la question, voici un second exemple.
Déterminez quel serait le résultat de la méthode find_in_list(l, e, k) pour l'instance suivante:
  • l = [2[3[4[3[2[5[3[]]]]]]]]
  • e = 3
  • k = 2

Attention : votre réponse ne doit contenir ni espace, ni virgule, ni point.

Question 3: Test de validation 3
Pour vérifier que vous avez bien compris la question, voici une troisième exemple.
Déterminez quel serait le résultat de la méthode find_in_list(l, e, k) pour l'instance suivante:
  • l = [-2[3[5[]]]]
  • e = 0
  • k = 1

Attention : votre réponse ne doit contenir ni espace, ni virgule, ni point.

Question 4: Trouver la k-ième occurrence d'un élément dans une liste
Ecrivez le corps de la fonction find_in_list(l, e, k) en respectant les spécifications de cette fonction.
Copiez-collez uniquement le corps de votre fonction en lieu et place du mot clé pass ci-dessous.
Attention : votre implémentation doit être récursive.

Pour répondre à cette sous-question, vous avez besoin d'une implémentation de List.
Une implémentation, telle que vue en cours, vous est fournie en suivant ce lien et a été directement importée pour vous.
Dès lors, dans le code de la fonction find_in_list, vous pouvez faire directement appel aux méthodes de la classe List.

Les tests de votre implémentation sont faits en supposant les préconditions vérifiées.

Il est important de tester votre implémentation avant de soumettre votre réponse. Vous pouvez effectuer ces tests
via un IDE comme Thonny ou accéder à une console de test sur Inginious.


def find_in_list(l, e, k):
    """
    pre: `l` est une `List`
    pre: `e` est un élément éventuellement présent dans la liste `l` et différent de `None`
    pre: `k` est un entier tel que `k` > 0
    post: renvoie la sous-liste de `l` débutant à la `k`-ième occurrence de `e` dans `l`.
          Si `e` apparaît moins de `k` fois dans la liste `l`, renvoie une `List` vide.
    """