Niveau 04 — Fonctions

Objectif du niveau

À la fin de ce niveau, tu sais écrire tes propres fonctions : les définir avec def, leur passer des paramètres, récupérer leur résultat avec return, et leur donner des valeurs par défaut. Tu sais décomposer un problème en plusieurs petites fonctions au lieu d'écrire un seul gros script, et tester chaque fonction à la main avant de l'assembler. Tu comprends aussi la portée des variables (scope) : pourquoi une variable créée dans une fonction n'existe pas dehors, et pourquoi c'est une bonne chose.

Prérequis

Durée indicative et avertissement honnête

2 à 3 semaines à raison de 30–60 min par jour.

Deux choses vont résister, autant le savoir. D'abord return vs print : la moitié des débutants écrit des fonctions qui affichent au lieu de renvoyer, et ne comprend pas pourquoi resultat = ma_fonction() vaut None. Ensuite le scope (leçon 04-4) : c'est un des trois concepts vraiment difficiles de Python. Pourquoi cette variable est NameError ici mais pas là ? Pourquoi UnboundLocalError ? Prévois plus de temps et plus d'exercices sur cette leçon — c'est prévu dans son plan, ce n'est pas toi le problème. En revanche, la récompense est énorme : après ce niveau, ton code devient dix fois plus lisible et réutilisable.

Leçons prévues

Chaque leçon suivra le template 17 sections (lessons/TEMPLATE_LECON.md).

TitreNotions couvertesStatut
04-1Pourquoi des fonctions, def et l'appelLe problème du code dupliqué, définir vs appeler, paramètres et arguments, l'ordre d'exécution (définition ≠ exécution), nommer une fonction (verbe, anglais)
04-2return — renvoyer un résultat (≠ print !)return vs print, une fonction sans return renvoie None, return stoppe la fonction, renvoyer plusieurs valeurs (tuple), chaîner des appels
04-3Paramètres avancésValeurs par défaut, arguments nommés (keyword), ordre des paramètres, le piège de la valeur par défaut mutable (def f(lst=[])), passer une liste : mutation visible dehors
04-4Scope — portée des variables ⚠️ difficileVariables locales vs globales, NameError et UnboundLocalError, lecture vs affectation d'une globale, pourquoi éviter global, le scope comme protection
04-5Décomposer un problème et tester à la mainDécouper un programme en fonctions (une fonction = une responsabilité), esquisser les signatures avant le code, tester chaque fonction dans le REPL ou avec des appels d'essai, assembler dans un main()

Pièges et erreurs emblématiques du niveau

Mini-projets du niveau

Fiches détaillées dans /projects.

Critères de sortie

Commit de fin de niveau

git add lessons/level-04-fonctions
git commit -m "exercises: complete level 04 (functions)"