Aller au contenu

TD⚓︎

Exercice 1

En utilisant la fonction filtre_liste définie ci-dessous, proposer une fonction:

  1. commence_par_a(txt) renvoyant True si la chaine txt commence par a et False sinon. Exemple ci-dessous:
    >>> filtre_liste(commence_par_a, ['allemand', 'anglais', 'francais'])
    ['allemand', 'anglais']
    
  2. contient_roi(txt) renvoyant True si la chaine txt contient la chaine roi et False sinon. Exemple ci-dessous:
    >>> filtre_liste(contient_roi, ['roi des francs', 'roi du Maroc', 'prince de Galles'])
    ['roi des francs', 'roi du Maroc']
    
  3. contient(chaine) renvoyant une fonction de paramètre txt qui renvoie True si la chaine txt contient la chaine chaine et False sinon.
    >>> filtre_liste(contient('Maroc'), ['roi des francs', 'roi du Maroc', 'prince de Galles'])
    ['roi du Maroc']
    
def filtre_liste(op, liste):
lst = []
for elem in liste:
    if op(elem):
        lst.append(elem)
return lst
  1. def commence_par_a(txt):
        return txt[0] == "a"
    
  2. def contient_roi(txt):
        return 'roi' in txt
    
  3. def contient(chaine):
        def contient_interne(txt):
            return chaine in txt
        return contient_interne
    

Exercice 2

Compléter la fonction applique_fonction_sur_liste(fonction, liste) renvoyant une liste où chaque élément correspond à l'élément de la liste liste sur lequel on a appliqué la fonction fonction.

Exemple :

def  oppose(a):
    return -a
>>> applique_fonction_sur_liste(oppose, [1, 2, 3, 4, -5])
[-1, -2, -3, -4, 5]

À compléter:

def applique_fonction_sur_liste(fonction, liste):
    liste_retour = ...
    for elem in ... :
        liste_retour.append(...)
    return ...
def applique_fonction_sur_liste(fonction, liste):
    liste_retour = []
    for elem in liste :
        liste_retour.append(fonction(elem))
    return liste_retour

Exercice 3

Écrire la fonction reduire_liste(fonction, liste) renvoyant une valeur où l'on applique successivement la fonction fonction (à deux paramètres) sur la valeur précédente avec l'élément suivant de la liste liste (non vide).

Exemple :

def  concat(a, b):
    return a + " " + b
>>> reduire_liste(concat, ["bonjour", 'les', 'NSI'])
'bonjour les NSI'
def reduire_liste(fonction, liste):
    retour = liste[0]
    for i in range(1, len(liste))
        retour = fonction(retour, liste[i])
    return retour

Exercice 4

En utilisant les lambda fonctions :

  1. Créer une fonction superieur_a_0 renvoyant True si l'unique parametre d'entrée en positif et False sinon.
  2. Créer une fonction difference renvoyant la différence entre le premier et le deuxième paramètre.
  3. Créer une fonction milieu renvoyant la valeur au milieu du premier et du deuxième paramètre.
  4. Créer une fonction initiale renvoyant les initiales (premières lettres) du premier et du deuxième paramètre séparées par un point.
superieur_a_0 = lambda x : x >= 0
difference = lambda x, y : y - x
milieu = lambda x, y : (x + y) / 2
initiale = lambda chaine : chaine[0]

Exercice 5

Refaire les exercices 1, 2 et 3 en utilisant filter, map et reduce et les lambda fonctions.

# Ex 1
filter(lambda chaine : chaine[0] == a, ['allemand', 'anglais', 'francais'])
filter(lambda chaine : "roi" in chaine, ['roi des francs', 'roi du Maroc', 'prince de Galles'])
# Ex 2
map(lambda x : -x, [1, 2, 3, 4, -5])
# Ex 3
reduce(lambda x, y : x + y, ["bonjour", 'les', 'NSI'])