Apprenez en lisant dans l'ordre

Exercices de récap de la syntaxe Python — Combiner flux de contrôle, fonctions et exceptions

Trois exercices qui rassemblent ce que tu as appris dans la syntaxe Python — flux de contrôle, fonctions, compréhensions, gestion d'exceptions et décorateurs — sous forme de problèmes de révision.

Problème 1 : filtrer et transformer avec une compréhension

Combine un filtre if à l'intérieur d'une compréhension de liste avec l'opérateur de puissance `. Choisis uniquement les éléments qui correspondent à une condition et transforme-les en autre chose** — c'est l'usage typique des compréhensions.

Les 3 étapes d'une compréhension
range(1, 16)1 à 15if n % 3 == 0or n % 5 == 03 / 5 / 6 / 9 / 10 / 12 / 15n ** 2élever chaque élément au carré[9, 25, 36, 81,100, 144, 225]filtrer avec if** 2en liste
Construis une nouvelle liste en trois étapes : itérer → filtrer → transformer.

Parmi les nombres de 1 à 15, extrais les multiples de 3 ou de 5, puis rassemble leurs carrés dans une liste et affiche-la.

Une compréhension de liste sur une seule ligne suffit.

Éditeur Python

Exécuter le code pour voir le résultat

Problème 2 : construire une fonction de division sûre avec try / except

Écris safe_divide(a, b) pour qu'elle ne plante pas sur une division par zéro. Cela combine def pour définir une fonction, try / except pour attraper une exception, et l'utilisation de return pour renvoyer des valeurs différentes selon ce qui s'est passé.

Comment try / except aiguille l'appel
safe_divide(a, b)appeltry:return a / bSuccès5.0except:print + return NoneEn cas d'erreurNonesuccèsdiviseur zéro
En cas de succès, la valeur est retournée depuis l'intérieur du try. En cas d'erreur, le contrôle saute au bloc except correspondant.

Écris une fonction safe_divide qui prend deux nombres a et b. Normalement elle doit retourner a / b, mais ne laisse pas une division par zéro faire planter le programme — quand cela arrive, affiche "Division par zéro non autorisée" et retourne None à la place.

Appelle safe_divide(10, 2) et safe_divide(10, 0) à la suite et affiche chaque valeur de retour avec print() pour vérifier.

Éditeur Python

Exécuter le code pour voir le résultat

Problème 3 : modifier la valeur de retour d'une fonction avec un décorateur

Construis un décorateur @double qui double la valeur retournée par la fonction enveloppée — sans toucher au corps de la fonction. Cela t'oblige à écrire le motif décorateur lui-même : une fonction qui prend une fonction et retourne une nouvelle fonction.

Comment un décorateur est branché
def add(a, b):return a + b@double= double(add)wrapper(*args)= add(*args) * 2add(3, 5) → 16(8 doublé)envelopperretourne wrapperappel
Un décorateur est une fonction qui prend une fonction et en retourne une nouvelle. @double est équivalent à add = double(add).

Écris un décorateur double qui double la valeur de retour de toute fonction à laquelle il est appliqué.

Applique ensuite double à une simple fonction add(a, b) qui retourne a + b, appelle add(3, 5), et affiche le résultat avec print(). Si ton décorateur est correctement branché, le résultat doit différer d'une simple somme.

Éditeur Python

Exécuter le code pour voir le résultat

Bravo d'avoir tenu jusqu'ici

Cela conclut la syntaxe Python. Tu as couvert le flux de contrôle avec les conditions, les boucles et les exceptions, les définitions de fonctions avec def / lambda, les compréhensions, les fonctions d'ordre supérieur, les décorateurs et les générateurs — à peu près tous les outils dont tu as besoin pour piloter un programme. Tu peux désormais écrire toi-même des fonctions qui prennent des valeurs, les transforment et renvoient un résultat.

Le chapitre suivant, Programmation orientée objet en Python, consiste à définir tes propres types : écrire des class, mettre en place des constructeurs avec __init__, l'héritage, le polymorphisme, l'encapsulation, les méthodes spéciales comme __add__, les gestionnaires de contexte avec with et les annotations de type. C'est ainsi que tu regroupes données et comportement dans une seule conception.