Module 3Programmer en Python
Chapitre 8 sur 11
Manipuler les données en Python
Fonctions et lambda, listes, tuples, sets, dictionnaires, fichiers CSV et JSON, bibliothèques standards.
- ≈ 130 min
- 4 leçons
- 8 vidéos
- 4 exercices
Module 3Programmer en Python
Chapitre 8 sur 11
Fonctions et lambda, listes, tuples, sets, dictionnaires, fichiers CSV et JSON, bibliothèques standards.
Objectifs
Avec ce chapitre, tu sauras…
math, random, re, datetime.C'est le chapitre le plus long du module (40 heures dans le programme officiel). Il transforme les notions algorithmiques des chapitres 5 et 6 (sous-programmes, tableaux) en outils Python, beaucoup plus puissants, et y ajoute les fichiers et les bibliothèques.
Leçon 1
def saluer(prenom, salutation="Bonjour"): # salutation a une valeur par défaut
"""Affiche une salutation.""" # docstring : la documentation de la fonction
print(f"{salutation} {prenom} !")
def moyenne(notes):
"""Renvoie la moyenne d'une liste de notes."""
return sum(notes) / len(notes)
saluer("Anas") # Bonjour Anas !
saluer("Sara", "Salam") # Salam Sara !
saluer(salutation="Hi", prenom="Ali") # arguments nommés
m = moyenne([12, 15, 9]) # 12.0Tableau: Le vocabulaire
| Terme | Sens |
|---|---|
def | définit une fonction |
| paramètre | variable de la définition (paramètre formel du chapitre 5) |
| argument | valeur passée à l'appel (paramètre effectif) |
| valeur par défaut | def f(x, n=2) : n vaut 2 si on ne le donne pas |
return | renvoie une valeur et termine la fonction ; sans return, la fonction renvoie None (c'est une « procédure ») |
| docstring | chaîne entre """ juste sous def, utilisée par help() et par Sphinx (chapitre 10) |
Vidéo · À regarder
FRPython - Cours complet pour débutants (2026)
SimpleTech par Sergio · YouTube
Vidéo · À regarder
FRCours Python Complet pour Débutants - 10h de Formation de A à Z
Sébastien Daviot - Expertise Data · YouTube
Leçon 2
Liste list | Tuple tuple | Ensemble set | Dictionnaire dict | |
|---|---|---|---|---|
| écriture | [1, 2, 3] | (1, 2, 3) | {1, 2, 3} | {"nom": "Ali", "age": 20} |
| ordonné ? | oui | oui | non | oui (ordre d'insertion, Python 3.7+) |
Leçon 3
| Mode | Rôle | Si le fichier n'existe pas |
|---|---|---|
"r" | lecture (mode par défaut) | erreur |
"w" | écriture : écrase le contenu | il est créé |
"a" | ajout à la fin | il est créé |
"x" | création |
Leçon 4
| Module | Rôle | Fonctions utiles |
|---|---|---|
math | mathématiques | sqrt, ceil, floor, fabs, exp, log, cos, sin, tan, isnan, pi, e |
random | nombres pseudo-aléatoires | random, uniform, randint, choice, shuffle |
re | expressions régulières | match, search, findall, sub |
1Une fonction sans return renvoie…
2Quelle collection n'est pas modifiable ?
3{1, 2, 2, 3} contient…
4Pour ajouter un élément à la fin d'une liste :
5Le mode "a" d'open()…
6json.loads() transforme…
L'essentiel du chapitre
def nom(param, defaut=val): … return ; docstring """…""" ; lambda x: expression.[ ] modifiable · tuple ( ) non modifiable · set { } sans doublons ni ordre · dict {clé: valeur}.l2 = l1 ne copie pas : l1.copy().with open(nom, mode, encoding="utf-8") as f: ; modes r, w, a, x ; read, readline, write.csv.reader, DictReader, writer, DictWriter ; JSON : dumps/loads (texte), dump/load (fichier).math, random, re, json, csv, datetime, os.| modifiable ? | oui | non | ajout/suppression oui | oui |
| doublons ? | oui | oui | non | clés uniques |
| accès | par indice l[0] | par indice t[0] | pas d'indice | par clé d["nom"] |
| usage typique | tableau dynamique | données fixes (coordonnées) | éliminer les doublons, tests d'appartenance | fiche, association clé → valeur |
| Méthode | Rôle |
|---|---|
append(x), insert(i, x), extend(l) | ajouter |
pop(), pop(i), remove(x), del l[i], clear() | supprimer |
index(x), count(x) | rechercher, compter |
sort(), reverse(), sorted(l) | trier, inverser |
copy() | copier (sinon l2 = l1 désigne la même liste) |
| Méthode | Rôle |
|---|---|
d[cle], d.get(cle, defaut) | lire (sans erreur avec get) |
d.keys(), d.values(), d.items() | clés, valeurs, couples |
d.update(autre) | fusionner |
d.pop(cle), del d[cle], d.clear() | supprimer |
d.copy() | copier |
Vidéo · À regarder
FRPython - Cours complet pour débutants (2026)
SimpleTech par Sergio · YouTube
Vidéo · À regarder
FRPython - Cours complet pour débutants (2026)
SimpleTech par Sergio · YouTube
Vidéo · À regarder
FRCours Python Complet pour Débutants - 10h de Formation de A à Z
Sébastien Daviot - Expertise Data · YouTube
| il est créé (erreur s'il existe déjà) |
| Fonction | Rôle |
|---|---|
json.dumps(obj) / json.loads(texte) | objet Python ↔ texte JSON |
json.dump(obj, f) / json.load(f) | objet Python ↔ fichier JSON |
Vidéo · À regarder
FRPython - Cours complet pour débutants (2026)
SimpleTech par Sergio · YouTube
Vidéo · À regarder
FRCours Python Complet pour Débutants - 10h de Formation de A à Z
Sébastien Daviot - Expertise Data · YouTube
json |
| format JSON |
dumps, loads, dump, load |
csv | format CSV | reader, writer, DictReader, DictWriter |
datetime | dates et heures | date.today(), datetime.now(), strftime |
os | système de fichiers | remove, path.exists, listdir |
Vidéo · À regarder
FRCours Python Complet pour Débutants - 10h de Formation de A à Z
Sébastien Daviot - Expertise Data · YouTube
Python ne distingue pas var et valeur comme le pseudo-code. Les nombres, chaînes et tuples (non modifiables) se comportent comme un passage par valeur. Une liste ou un dictionnaire passé à une fonction peut être modifié par elle, comme un passage par adresse. Pour renvoyer plusieurs résultats, une fonction renvoie un tuple : return mini, maxi.
Les fonctions lambda
ajoute_dix = lambda x: x + 10
print(ajoute_dix(5)) # 15
multiplie = lambda a, b: a * b
print(multiplie(6, 7)) # 42
def multiplicateur(n):
return lambda x: x * n # une fonction qui fabrique une fonction
double = multiplicateur(2)
print(double(11)) # 22
etudiants = [("Sara", 15), ("Ali", 12), ("Nora", 17)]
etudiants.sort(key=lambda e: e[1]) # trier par note : usage le plus courantUne fonction lambda est une fonction anonyme (sans nom), définie avec le mot-clé lambda. Elle peut avoir n arguments mais une seule expression, dont la valeur est renvoyée automatiquement. On l'utilise pour de petites fonctions passées à sort(), map(), filter().
Les fonctions, modules et packages en Python.
La partie « Les fonctions » du cours de Sébastien Daviot.
Tableau: Comparaison
Tableau: Les modes d'ouverture
Python fournit une très riche bibliothèque standard : des modules prêts à l'emploi, installés avec Python, qu'on charge avec import.
import math
print(math.sqrt(16), math.ceil(2.1), math.floor(2.9)) # 4.0 3 2
print(math.fabs(-5), math.pi, math.e)
print(math.exp(1), math.log(math.e), math.cos(0))
import random
print(random.random()) # réel dans [0.0, 1.0[
print(random.uniform(10, 50)) # réel entre 10 et 50
print(random.randint(1, 6)) # entier entre 1 et 6 inclus (un dé)
print(random.choice(["pile", "face"]))
import re
email = "anas@exemple.ma"
print(bool(re.match(r"^[\w.-]+@[\w-]+\.[a-z]{2,}$", email))) # True : format valide
from datetime import date, datetime
aujourd_hui = date.today()
print(aujourd_hui.year, datetime.now().strftime("%d/%m/%Y %H:%M"))Tableau: Les modules à connaître
Écris le jeu : l'ordinateur choisit un entier entre 1 et 100 avec random ; le joueur propose des nombres ; le programme répond « plus grand » ou « plus petit » jusqu'à ce qu'il trouve, puis affiche le nombre d'essais.
Écris : (a) une fonction est_premier(n) qui renvoie True si n est premier ; (b) une fonction stats(liste) qui renvoie le minimum, le maximum et la moyenne d'une liste ; (c) une lambda qui renvoie le carré d'un nombre, puis utilise-la avec map() sur la liste [1, 2, 3, 4].
Avec un dictionnaire {nom: liste de notes} : ajoute trois étudiants avec trois notes chacun, affiche la moyenne de chacun, puis le nom de l'étudiant qui a la meilleure moyenne.
Les listes (tableaux dynamiques)
fruits = ["pomme", "banane", "orange"]
fruits[1] = "datte" # modifier
fruits.append("figue") # ajouter à la fin
fruits.insert(0, "kiwi") # insérer à la position 0
fruits.extend(["mangue", "raisin"]) # fusionner une autre liste
dernier = fruits.pop() # supprimer et renvoyer le dernier
del fruits[0] # supprimer par indice
fruits.remove("datte") # supprimer par valeur
print(len(fruits), "pomme" in fruits)
for f in fruits: # parcourir
print(f)
for i, f in enumerate(fruits): # avec l'indice
print(i, f)
fruits.sort() # trier sur place
carres = [x ** 2 for x in range(5)] # liste en compréhension : [0, 1, 4, 9, 16]l2 = l1 ne crée pas une nouvelle liste : l1 et l2 désignent le même objet, et modifier l'une modifie l'autre. Pour copier : l2 = l1.copy() ou l2 = list(l1).
Les tuples (tableaux statiques)
point = (3, 4)
x, y = point # déballage
print(point[0], len(point), 4 in point)
l = list(point) # convertir en liste pour modifier
l[0] = 10
point = tuple(l)
fusion = (1, 2) + (3, 4) # (1, 2, 3, 4)
print(fusion.count(2), fusion.index(3))Les ensembles (set)
villes = {"Rabat", "Fès", "Rabat", "Tanger"} # le doublon disparaît
villes.add("Agadir")
villes.update(["Oujda", "Safi"])
villes.remove("Safi") # erreur si absent ; discard() ne fait pas d'erreur
print("Fès" in villes)
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b, a & b, a - b) # union {1,2,3,4}, intersection {2,3}, différence {1}Les dictionnaires
etudiant = {"nom": "El Amrani", "prenom": "Anas", "age": 20}
etudiant["age"] = 21 # modifier
etudiant["ville"] = "Casablanca" # ajouter
print(etudiant["nom"], etudiant.get("tel", "inconnu"))
print("age" in etudiant, len(etudiant))
for cle, valeur in etudiant.items(): # parcourir clés et valeurs
print(cle, ":", valeur)
del etudiant["ville"] # supprimer
copie = etudiant.copy()
# compter les mots d'une phrase
compteur = {}
for mot in "le chat et le chien".split():
compteur[mot] = compteur.get(mot, 0) + 1
print(compteur) # {'le': 2, 'chat': 1, 'et': 1, 'chien': 1}Les listes en Python.
Les dictionnaires en Python.
La partie « Les dictionnaires » du cours de Sébastien Daviot.
with open("notes.txt", "w", encoding="utf-8") as f: # with ferme le fichier automatiquement
f.write("Anas;15\n")
f.write("Sara;17\n")
with open("notes.txt", "a", encoding="utf-8") as f:
f.write("Ali;12\n")
with open("notes.txt", "r", encoding="utf-8") as f:
contenu = f.read() # tout le fichier
# f.read(5) : les 5 premiers caractères ; f.readline() : une ligne
with open("notes.txt", encoding="utf-8") as f:
for ligne in f: # ligne par ligne
nom, note = ligne.strip().split(";")
print(nom, int(note))
import os
if os.path.exists("notes.txt"):
os.remove("notes.txt") # supprimer un fichierUn fichier ouvert doit être fermé (f.close()), sinon des données peuvent être perdues. L'instruction with open(...) as f: le ferme automatiquement à la fin du bloc, même en cas d'erreur : c'est la méthode recommandée.
Le format CSV
Un fichier CSV (Comma-Separated Values) stocke un tableau dans un fichier texte : une ligne par enregistrement, des colonnes séparées par un séparateur (virgule, point-virgule…). Les champs qui contiennent le séparateur ou des guillemets sont entourés de guillemets, et les guillemets internes sont doublés.
Nom;Prénom;Age
"Dubois";"Marie";29
"Duval";"Julien ""Paul""";47
Jacquet;Bernard;51
Martin;"Lucie;Clara";14import csv
with open("eleves.csv", newline="", encoding="utf-8") as f:
lecteur = csv.reader(f, delimiter=";")
for ligne in lecteur:
print(ligne) # ['Duval', 'Julien "Paul"', '47']
with open("eleves.csv", newline="", encoding="utf-8") as f:
for ligne in csv.DictReader(f, delimiter=";"):
print(ligne["Nom"], ligne["Age"]) # un dictionnaire par ligne
produits = [
{"reference": "F452CP", "quantite": 41, "produit": "cahier", "prixUnitaire": 1.6},
{"reference": "D857BL", "quantite": 18, "produit": "stylo bleu", "prixUnitaire": 0.95},
]
with open("commande.csv", "w", newline="", encoding="utf-8") as f:
ecrivain = csv.DictWriter(f, fieldnames=["reference", "quantite", "produit", "prixUnitaire"], delimiter=";")
ecrivain.writeheader()
ecrivain.writerows(produits)Le format JSON
JSON (JavaScript Object Notation) stocke des données structurées : des associations clé → valeur (comme les dictionnaires) et des listes. Une valeur peut être un objet, une liste, un nombre, une chaîne, un booléen ou null.
import json
villes = {
"Dijon": {"nomDepartement": "Côte d'Or", "codePostal": 21000,
"population": {"2006": 151504, "2011": 151672, "2014": 153668}},
"Troyes": {"nomDepartement": "Aube", "codePostal": 10000,
"population": {"2006": 61344, "2011": 60013, "2014": 60750}},
}
texte = json.dumps(villes, sort_keys=True, indent=2) # dictionnaire → texte JSON
donnees = json.loads(texte) # texte JSON → dictionnaire
with open("villes.json", "w", encoding="utf-8") as f:
json.dump(villes, f, ensure_ascii=False, indent=2) # directement dans un fichier
with open("villes.json", encoding="utf-8") as f:
donnees = json.load(f)
print(donnees["Troyes"]["population"]["2014"]) # 60750Lire et écrire des fichiers en Python.
La partie « Ouverture et manipulation de documents » du cours de Sébastien Daviot : plus d'une heure sur les fichiers.
La partie « Les packages » du cours de Sébastien Daviot : importer et utiliser des modules.
Écris un programme qui lit eleves.csv (exemple de la section 3) avec DictReader, ne garde que les élèves majeurs (âge ≥ 18), et enregistre le résultat dans majeurs.json.