NSI (terminale) · Chapitre 16 · Exercice de TD
De l'impératif au fonctionnel
Calculabilité, décidabilité et paradigmes de programmation · niveau 3 (difficile)
É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.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.