Adloun

De l'impératif au fonctionnel

Exercice de TD · niveau 3 (difficile) · NSI (terminale), chapitre 16 — Calculabilité, décidabilité et paradigmes de programmation

Énoncé

De l'impératif au fonctionnel.

La fonction suivante calcule la moyenne des notes supérieures ou égales à . La réécrire dans le style fonctionnel, sans boucle ni variable modifiée, à l'aide de filter et reduce. Elle doit renvoyer None si aucune note n'atteint .


def moyenne_admis_imperatif(notes):
    somme = 0
    nb = 0
    for note in notes:
        if note >= 10:
            somme = somme + note
            nb = nb + 1
    if nb == 0:
        return None
    return round(somme / nb, 2)

Corrigé


from functools import reduce

def moyenne_admis_fonctionnel(notes):
    admis = list(filter(lambda n: n >= 10, notes))
    if admis == []:
        return None
    return round(reduce(lambda x, y: x + y, admis) / len(admis), 2)

NOTES = [12, 7, 15, 9, 18, 10, 4]
print(moyenne_admis_imperatif(NOTES))    # 13.75
print(moyenne_admis_fonctionnel(NOTES))  # 13.75
print(moyenne_admis_imperatif([3, 5]))   # None
print(moyenne_admis_fonctionnel([3, 5])) # None

Les deux fonctions sont interchangeables. La version fonctionnelle sépare nettement les deux opérations — sélectionner, puis replier — là où la version impérative les entrelace dans une même boucle.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.