Ce TD est noté.

Exercice 1. Lecture de codes, écriture de documentation (4pts)

Proposez un nom de fonction et une documentation (incluant des doctest et la complexité) pour les fonctions suivantes:

def f1(a, n):
    if n == 0:
        return 1
    return a * f1(a, n-1)
def f2(L):
    a = 0
    for e in L:
        a += e
    return a/len(L)

Exercice 2. replace (6pts)

La fonction replace des chaînes de caractères prend en argument trois chaînes de caractères u, p et r et remplace toutes les occurrence de p dans u par r.

Par exemple:

replace("J'aime les pâtes à la carbonara", "carbonara", "bolognese")

Retourne la chaîne "J'aime les pâtes à la bolognese".

Attention, il faut substituer toutes les occurrences du mot. Par exemple:

replace("J'aime les pâtes à la carbonara, la carbonara c'est ma vie.", "carbonara", "bolognese")

retourne la chaîne "J'aime les pâtes à la bolognese, la bolognese c'est ma vie".

"J'aime les pâtes à la carbonara".replace("carbonara", "bolognese")

pour obtenir le même résultat.

  1. Écrire une version impérative de replace. (2pts)

  2. Écrire une version récursive de replace. (2pts)

  3. Proposez une analyse de complexité d’une de vos implémentations. (2pts)

Exercice 3. Confidentiel (10pts)

  1. Écrire une fonction confidentiel qui prend en argument (2pts):

et qui retourne une chaine v où pour toutes chaines w de L, ses occurrences dans u sont remplacées par une chaine contenant uniquement le symbole # de même taille len(w).

Par exemple:

confidentiel("James Bond a envoyé une lettre à son contact Igor Paluczenko", ["James Bond", "Igor Paluscenko"])

Retourne "########## a envoyé une lettre à son contact ###############"

  1. Écrire une fonction confidentiel2 qui fait la même chose mais cache les chaînes y compris si elles sont écrites avec des lettres minuscules ou majuscules. (4pts)

Par exemple:

confidentiel("james bONd a envoyé une lettre à son contact Igor palusCzenko", ["James Bond", "Igor Paluscenko"])

Retourne "########## a envoyé une lettre à son contact ###############"

  1. Proposez une analyse de complexité de votre fonction confidentiel2, en justifiant. (4pts)