Jusqu'ici, tu as surtout programmé en manipulant des variables, des listes et des fonctions indépendantes les unes des autres : c'est la programmation procédurale. La programmation orientée objet (POO) propose une autre manière d'organiser un programme : elle regroupe des données et les fonctions qui les manipulent au sein d'une même entité, appelée objet.
Une classe est un modèle (un plan, un moule) qui décrit un ensemble d'objets possédant les mêmes attributs (les données qu'ils contiennent) et les mêmes méthodes (les fonctions qui leur sont propres). Un objet est une instance concrète de cette classe : il possède sa propre copie des attributs, avec ses propres valeurs.
Le plan d'une maison correspond à la classe : il définit qu'une maison possède un nombre de pièces, une superficie, une couleur de façade, et des actions possibles (ouvrir la porte, allumer la lumière). Chaque maison réellement construite à partir de ce plan est un objet : la maison de Mamie a 4 pièces et une façade blanche, celle du voisin a 6 pièces et une façade ocre. Même plan (même classe), mais des maisons différentes (des objets différents), chacune avec ses propres valeurs.
En Python, tu utilises ce principe depuis le début sans forcément le remarquer : une chaîne de caractères "Kinshasa" est un objet de la classe str, une liste [1, 2, 3] est un objet de la classe list. Les méthodes .upper() ou .append() que tu connais déjà sont des méthodes définies dans ces classes.
| Terme | Signification |
|---|---|
| Classe | Le modèle général (ex. Eleve) |
| Objet / instance | Un exemplaire concret créé à partir de la classe |
| Attribut | Une donnée propre à l'objet (ex. nom, moyenne) |
| Méthode | Une fonction définie dans la classe, qui agit sur l'objet |
self | Référence vers l'objet lui-même, à l'intérieur d'une méthode |
En Python, une classe se définit avec le mot-clé class. La méthode spéciale __init__, appelée constructeur, est exécutée automatiquement à la création de chaque objet : elle sert à initialiser les attributs.
Quelques points essentiels à retenir :
self : il désigne l'objet sur lequel la méthode est appelée. Python le fournit automatiquement — tu ne l'indiques jamais lors de l'appel (eleve1.a_la_mention(), et non eleve1.a_la_mention(eleve1)).eleve1.nom.eleve2 = Eleve("Brice Ikama", 9).__str__ pour contrôler l'affichage de l'objet avec print().pandas est une bibliothèque Python spécialisée dans la manipulation et l'analyse de données tabulaires. Sa structure centrale est le DataFrame : un tableau à deux dimensions, organisé en lignes et en colonnes, comparable à une feuille de calcul.
La bibliothèque s'importe par convention sous l'alias pd. La méthode .head() affiche les premières lignes du DataFrame (les 5 premières par défaut, ou moins si le tableau est plus petit) — pratique pour vérifier rapidement le contenu d'un grand jeu de données sans tout afficher. pandas propose aussi des opérations statistiques immédiates, comme df["moyenne"].mean() pour calculer une moyenne, ou df.sort_values("moyenne") pour trier les lignes.
matplotlib est la bibliothèque de référence pour représenter des données sous forme de graphiques en Python. Son module pyplot, importé sous l'alias plt, fournit des fonctions simples pour tracer courbes, barres, nuages de points, etc.
Pour représenter une évolution dans le temps plutôt qu'une comparaison entre catégories, on préfère un graphique en ligne avec plt.plot() :
plt.show() est indispensable : c'est cette instruction qui ouvre la fenêtre affichant le graphique construit par les instructions précédentes.
L'un des grands intérêts de la programmation est d'automatiser des tâches longues, répétitives et sources d'erreurs si elles sont réalisées manuellement : renommer des centaines de fichiers, trier des données, générer des documents, etc. Le module os permet d'interagir avec le système de fichiers.
Un professeur souhaite renommer toutes les photos d'identité d'une classe, stockées en vrac dans un dossier, en eleve_001.jpg, eleve_002.jpg, etc.
os.listdir() renvoie la liste des fichiers d'un dossier, enumerate(..., start=1) fournit un compteur, et os.rename() effectue le renommage. Ce même principe — parcourir une liste et appliquer un traitement identique à chaque élément — s'applique à d'innombrables tâches : convertir des fichiers, envoyer des messages en masse, remplir automatiquement des formulaires, etc.
tkinter est le module standard de Python (inclus par défaut, sans installation) pour créer des interfaces graphiques : fenêtres, boutons, champs de texte, étiquettes, etc.
Quelques éléments clés : Tk() crée la fenêtre principale, .pack() place un widget (élément graphique) dans la fenêtre, l'argument command associe une fonction à un bouton (sans les parenthèses, car on transmet la fonction elle-même, pas son résultat), et mainloop() démarre la boucle d'attente des événements (clics, saisies...) : sans cet appel, la fenêtre ne s'affiche pas.
Le web scraping consiste à récupérer automatiquement, par programme, des informations affichées sur des pages web, plutôt que de les copier manuellement. Un script envoie une requête vers une page, récupère son contenu HTML, puis en extrait les données utiles (titres, prix, dates...).
La bibliothèque requests télécharge le contenu de la page, et BeautifulSoup (souvent importée depuis le paquet bs4) permet d'analyser ce contenu HTML pour y repérer précisément les balises recherchées.
Aspects légaux et éthiques. Le web scraping n'est pas sans limites : il faut toujours respecter les conditions d'utilisation du site visité, vérifier le fichier robots.txt qui précise les zones autorisées à l'exploration automatique, respecter le droit d'auteur sur les contenus récupérés, et éviter d'envoyer un trop grand nombre de requêtes en peu de temps (ce qui peut surcharger le serveur, voire être assimilé à une attaque). Scraper un site sans autorisation pour en revendre le contenu, par exemple, est généralement illégal.
SQLite est un système de gestion de base de données léger, stocké dans un simple fichier, directement accessible en Python via le module standard sqlite3 (aucune installation supplémentaire n'est nécessaire).
connect() ouvre (ou crée) le fichier de base de données, cursor() fournit un curseur permettant d'exécuter des requêtes SQL, et execute() transmet ces requêtes. Les ? dans la requête d'insertion sont des paramètres substitués : ils protègent contre les erreurs de syntaxe et les failles d'injection SQL. commit() valide définitivement les modifications, et close() referme proprement la connexion.
Écris une classe Rectangle possédant deux attributs, longueur et largeur, initialisés dans le constructeur, ainsi qu'une méthode aire() qui renvoie l'aire du rectangle. Crée ensuite un objet r1 avec une longueur de 5 et une largeur de 3, et affiche son aire.
self.longueur et self.largeur sont les attributs de l'objet ; ils sont créés dans __init__ puis réutilisés dans la méthode aire() grâce à self.
À partir de la liste de notes notes = [12, 15.5, 8, 17, 10.5], crée un DataFrame pandas à une colonne nommée "note", affiche ses premières lignes avec .head(), puis calcule la moyenne de la classe.
La clé du dictionnaire ("note") devient le nom de la colonne du DataFrame. .mean() calcule directement la moyenne de la colonne, sans écrire de boucle.
Reprends la liste de notes de l'exercice précédent, associée à la liste de prénoms ["Aline", "Brice", "Chris", "Diane", "Eric"], et trace un graphique en ligne représentant ces notes, avec un titre, une étiquette sur l'axe des ordonnées et une grille.
L'argument marker="o" ajoute un point rond à chaque valeur, ce qui facilite la lecture des notes individuelles sur la courbe.
Écris un script qui se connecte (ou crée) une base de données classe.db, crée si nécessaire une table eleves (colonnes id, nom, note), puis insère l'enregistrement ("Diane Loemba", 17) avant de valider et de fermer la connexion.
La clause IF NOT EXISTS évite une erreur si le script est exécuté plusieurs fois : la table n'est créée qu'une seule fois. Il ne faut jamais oublier connexion.commit(), sans quoi l'insertion resterait en attente et ne serait pas enregistrée durablement.
Conçois un mini-projet de gestion des notes d'une classe : définis une classe Eleve (attributs nom et note), crée une liste de 5 objets Eleve, convertis-la en DataFrame pandas, affiche la moyenne de la classe, puis trace un diagramme en barres des notes avec une ligne horizontale représentant la moyenne.
Ce projet combine les trois notions du chapitre : la classe Eleve structure chaque élève, la liste en compréhension [e.nom for e in classe] extrait les attributs pour construire le DataFrame, et plt.axhline() superpose une ligne horizontale au niveau de la moyenne pour la comparer visuellement à chaque note.
10 questions · Correction immédiate
class Voiture: ... def __init__(self, marque): self.marque = marque ... v = Voiture("Toyota") ; print(v.marque)df = pd.DataFrame({"note": [10, 12, 14]}) puis print(df.head()), que fait précisément .head() ?import osfor fichier in os.listdir("dossier"): print(fichier)connexion.commit() ?curseur.execute("INSERT INTO livres (titre) VALUES (?)", ("Roman",))connexion.commit()