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.