Skip to content

Commit 752c77d

Browse files
committed
chore: Ajout TP 1 sur les fonctions python
1 parent 280167e commit 752c77d

File tree

2 files changed

+299
-0
lines changed

2 files changed

+299
-0
lines changed

01-Fonctions/README.md

Lines changed: 298 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,298 @@
1+
# 01 - Fonctions Python 🐍
2+
3+
Bienvenue dans ce deuxième chapitre de la formation **Python pour
4+
administrateurs systèmes**.
5+
6+
Ce TP te guide **pas à pas** pour maîtriser les fonctions Python : de la
7+
définition la plus simple jusqu’à la récursion, en passant par les paramètres
8+
avancés et les lambdas.
9+
10+
---
11+
12+
## 🎯 Objectifs pédagogiques
13+
14+
* Définir et appeler une fonction
15+
* Manipuler les paramètres (positionnels, nommés, valeurs par défaut)
16+
* Retourner des valeurs et documenter son code
17+
* Utiliser `*args` et `**kwargs`
18+
* Créer des lambdas et des fonctions imbriquées (closures)
19+
* Ajouter des annotations de type et des docstrings claires
20+
* Comprendre la récursivité
21+
* Valider ses compétences grâce à un challenge automatisé
22+
23+
---
24+
25+
## 📘 Préparation
26+
27+
1. Lis la doc : 🔗 [**Fonctions
28+
en Python**](https://blog.stephane-robert.info/docs/developper/programmation/python/fonctions/)
29+
30+
---
31+
32+
## 🗂️ Créer l’arborescence du TP
33+
34+
Place-toi dans le dossier du TP :
35+
36+
```bash
37+
cd 02-Fonctions
38+
```
39+
40+
Tu travailles désormais dans ce dossier.
41+
42+
---
43+
44+
## 🛠️ Étapes pas‑à‑pas
45+
46+
### Étape 1 – Créer `salutations.py` et afficher un message
47+
48+
1. **Crée** le fichier :
49+
50+
```bash
51+
touch salutations.py
52+
```
53+
54+
2. **Ouvre**‑le dans ton éditeur préféré (VS Code, nano, vim…) :
55+
56+
```bash
57+
code salutations.py
58+
```
59+
60+
3. **Écris** le code suivant :
61+
62+
```python
63+
#!/usr/bin/env python3
64+
65+
def saluer():
66+
"""Affiche un message de bienvenue."""
67+
print("Bonjour ! Bienvenue dans les fonctions.")
68+
69+
if __name__ == "__main__":
70+
saluer()
71+
```
72+
73+
Ici `if __name__ == "__main__":` permet d’exécuter la fonction `saluer()`
74+
uniquement si le script est lancé directement, pas s’il est importé.
75+
76+
Rends le script exécutable :
77+
78+
```bash
79+
chmod +x salutations.py
80+
```
81+
82+
4. **Exécute** :
83+
84+
```bash
85+
./salutations.py
86+
```
87+
88+
Tu dois voir : `Bonjour ! Bienvenue dans les fonctions.`
89+
90+
---
91+
92+
### Étape 2 – Ajouter des paramètres et une valeur par défaut
93+
94+
1. **Modifie la fonction** `saluer()` dans `salutations.py` avec ce contenu :
95+
96+
```python
97+
#!/usr/bin/env python3
98+
99+
def saluer_personne(nom: str, titre: str = "cher visiteur") -> None:
100+
"""Salue la personne avec un titre optionnel."""
101+
print(f"Bonjour, {titre} {nom} !")
102+
103+
if __name__ == "__main__":
104+
saluer_personne("Alice") # Appel sans titre
105+
saluer_personne("Bob", titre="Dr") # Appel avec titre
106+
```
107+
108+
2. **Teste** depuis le terminal :
109+
110+
```bash
111+
./salutations.py
112+
```
113+
114+
---
115+
116+
### Étape 3 – Valeur de retour et annotations de type
117+
118+
1. **Crée** le fichier :
119+
120+
```bash
121+
touch calculs.py
122+
```
123+
124+
2. **Ajoute** une fonction d’addition :
125+
126+
```python
127+
#!/usr/bin/env python3
128+
129+
def additionner(a: float, b: float) -> float:
130+
"""Retourne la somme de deux nombres."""
131+
return a + b
132+
133+
if __name__ == "__main__":
134+
print(additionner(2, 3))
135+
```
136+
137+
Rends le script exécutable :
138+
139+
```bash
140+
chmod +x calculs.py
141+
```
142+
143+
3. **Exécute** :
144+
145+
```bash
146+
./calculs.py
147+
```
148+
149+
Tu dois voir : `5.0`
150+
151+
---
152+
153+
### Étape 4 – `*args` et `**kwargs`
154+
155+
Dans `calculs.py`, ajopute les fonctions suivantes :
156+
157+
```python
158+
def somme(*nombres: float) -> float:
159+
"""Additionne un nombre arbitraire d’arguments."""
160+
return sum(nombres)
161+
162+
def afficher_infos(**infos) -> None:
163+
"""Affiche les paires clé / valeur fournies."""
164+
for cle, valeur in infos.items():
165+
print(f"{cle} : {valeur}")
166+
167+
168+
if __name__ == "__main__":
169+
print(additionner(2, 3))
170+
print(somme(1, 2, 3, 4))
171+
afficher_infos(nom="Alice", age=30, ville="Paris")
172+
173+
```
174+
175+
Teste :
176+
177+
```bash
178+
./calculs.py
179+
```
180+
181+
---
182+
183+
### Étape 5 – Les lambdas
184+
185+
1. **Crée** le fichier :
186+
187+
```bash
188+
touch lambdas.py
189+
```
190+
191+
2. **Ajoute** :
192+
193+
```python
194+
#!/usr/bin/env python3
195+
multiplication = lambda x, y: x * y
196+
197+
if __name__ == "__main__":
198+
print(multiplication(3, 4)) # 12
199+
```
200+
201+
3. **Teste le** :
202+
203+
```bash
204+
python3 lambdas.py
205+
```
206+
207+
---
208+
209+
### Étape 6 – Fonctions imbriquées (closures)
210+
211+
1. **Crée** le fichier :
212+
213+
```bash
214+
touch closures.py
215+
```
216+
217+
2. **Ajoute** :
218+
219+
```python
220+
#!/usr/bin/env python3
221+
222+
def create_multiplier(facteur: float) -> callable:
223+
"""Retourne une fonction qui multiplie par un facteur donné."""
224+
def multiplier(x: float) -> float:
225+
return x * facteur
226+
return multiplier
227+
228+
if __name__ == "__main__":
229+
double = create_multiplier(2)
230+
print(double(5)) # 10
231+
```
232+
233+
3. **Teste le** :
234+
235+
```bash
236+
python3 closures.py
237+
```
238+
239+
---
240+
241+
### Étape 7 – Récursivité
242+
243+
1. **Réouvre** `calculs.py` et ajoute :
244+
245+
```python
246+
247+
def factorielle(n: int) -> int:
248+
"""Calcule n! récursivement."""
249+
if n == 0:
250+
return 1
251+
return n * factorielle(n - 1)
252+
253+
if __name__ == "__main__":
254+
print(additionner(2, 3))
255+
print(somme(1, 2, 3, 4))
256+
afficher_infos(nom="Alice", age=30, ville="Paris")
257+
print(factorielle(5)) # 120
258+
```
259+
260+
Ici, `factorielle(0)` retourne 1, et pour `n > 0`, elle appelle
261+
récursivement `factorielle(n - 1)`.
262+
263+
2. **Teste** :
264+
265+
```bash
266+
./calculs.py
267+
```
268+
269+
---
270+
271+
## ✅ Récapitulatif
272+
273+
Tu as appris à :
274+
275+
* Définir et appeler des fonctions
276+
* Utiliser des paramètres positionnels et nommés
277+
* Gérer les valeurs par défaut
278+
* Retourner des valeurs et documenter avec des annotations de type
279+
* Utiliser `*args` et `**kwargs`
280+
* Créer des fonctions anonymes (lambdas) et imbriquées (closures)
281+
* Comprendre la récursivité
282+
283+
---
284+
285+
## 🏁 Challenge final – Calcul du prix d’un repas
286+
287+
Vous êtes prêt pour le [challenge final](challenge/README.md) ! 🎉
288+
289+
---
290+
291+
## 🧰 Suite du parcours
292+
293+
Passe au TP suivant [`03-Collections`](../03-Collections) pour explorer listes,
294+
tuples et dictionnaires.
295+
296+
---
297+
298+
📚 Bon apprentissage et bonne automatisation ! 🚀

01-Fonctions/challenge/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
En cours de développement

0 commit comments

Comments
 (0)