Python arrive en tête des langages les plus utilisés par les développeurs professionnels depuis six ans consécutifs, selon le Stack Overflow Developer Survey 2024. Ce n’est pas un hasard : le langage couvre un spectre très large, du script d’automatisation de deux pages à l’application de machine learning en production. Cet article présente 32 exemples d’applications Python concrètes, organisées par domaine, avec le code de démarrage et la librairie principale pour chacune. Chaque exemple est réalisable, chaque extrait de code est fonctionnel sous Python 3.10 ou supérieur.
Choisir son projet selon son niveau
Avant de vous lancer, voilà une grille de lecture simple. Les projets débutants ne nécessitent aucune librairie externe, seulement la bibliothèque standard Python. Les projets intermédiaires demandent une installation via pip et une compréhension des fonctions et des classes. Les projets avancés impliquent des notions de concurrence, d’API, ou de machine learning.
| Niveau | Prérequis | Domaines couverts dans cet article |
|---|---|---|
| Débutant | Bases Python (variables, boucles, fonctions) | Projets débutants (exemples 1 à 6) |
| Intermédiaire | Pip, classes, gestion des erreurs | Automatisation, web, data (exemples 7 à 22) |
| Avancé | API, concurrence, machine learning | IA, ML, projets sectoriels (exemples 23 à 32) |
6 exemples d’applications Python pour débutants

Ces six projets utilisent uniquement la bibliothèque standard Python. Pas d’installation supplémentaire. Ils couvrent les fondamentaux : conditions, boucles, fonctions, fichiers. Comptez entre 2 et 6 heures par projet selon votre rythme d’apprentissage.
1. Calculatrice en ligne de commande
Ce que c’est : une calculatrice interactive dans le terminal. L’utilisateur saisit deux nombres et une opération, le programme retourne le résultat. La difficulté principale : gérer les erreurs (division par zéro, saisie invalide) proprement.
Librairie : aucune (Python standard) / Niveau : débutant
def calculer(a, b, operateur):
operations = {
"+": lambda x, y: x + y,
"-": lambda x, y: x - y,
"*": lambda x, y: x * y,
"/": lambda x, y: x / y if y != 0 else None
}
if operateur not in operations:
raise ValueError(f"Opérateur non reconnu : {operateur}")
resultat = operations[operateur](a, b)
if resultat is None:
raise ZeroDivisionError("Division par zéro")
return resultat
while True:
try:
a = float(input("Premier nombre : "))
op = input("Opérateur (+, -, *, /) : ")
b = float(input("Second nombre : "))
print(f"Résultat : {calculer(a, b, op)}")
except (ValueError, ZeroDivisionError) as e:
print(f"Erreur : {e}")
except KeyboardInterrupt:
break
2. Générateur de mots de passe sécurisé
Ce que c’est : un script qui génère des mots de passe aléatoires selon des critères définis par l’utilisateur : longueur, présence de chiffres, de symboles, de majuscules. Le module secrets est utilisé à la place de random : contrairement à random, il utilise une source d’entropie cryptographiquement sûre, ce qui le rend adapté à la génération de mots de passe.
Librairie : secrets, string (Python standard) / Niveau : débutant
import secrets
import string
def generer_mot_de_passe(longueur=16, chiffres=True, symboles=True):
alphabet = string.ascii_letters
if chiffres:
alphabet += string.digits
if symboles:
alphabet += string.punctuation
# secrets.choice est cryptographiquement sûr, contrairement à random.choice
mot_de_passe = "".join(secrets.choice(alphabet) for _ in range(longueur))
return mot_de_passe
print(generer_mot_de_passe(longueur=20, symboles=True))
# Exemple de sortie : P$k9#mQ2!vR7&nL4@xW1
3. Application de liste de tâches avec sauvegarde
Ce que c’est : une to-do list en ligne de commande qui sauvegarde les tâches dans un fichier JSON local. À chaque lancement, les tâches précédentes sont rechargées. Ce projet introduit la persistance des données sans base de données.
Librairie : json (Python standard) / Niveau : débutant
import json
import os
FICHIER = "taches.json"
def charger_taches():
if os.path.exists(FICHIER):
with open(FICHIER, "r", encoding="utf-8") as f:
return json.load(f)
return []
def sauvegarder(taches):
with open(FICHIER, "w", encoding="utf-8") as f:
json.dump(taches, f, ensure_ascii=False, indent=2)
taches = charger_taches()
while True:
print(f"\n{len(taches)} tâche(s) en cours.")
commande = input("Commande (ajouter/liste/terminer/quitter) : ").strip()
if commande == "ajouter":
tache = input("Tâche : ")
taches.append({"titre": tache, "fait": False})
sauvegarder(taches)
elif commande == "liste":
for i, t in enumerate(taches):
etat = "✓" if t["fait"] else "○"
print(f" {i + 1}. [{etat}] {t['titre']}")
elif commande == "terminer":
idx = int(input("Numéro : ")) - 1
taches[idx]["fait"] = True
sauvegarder(taches)
elif commande == "quitter":
break
4. Jeu du pendu
Ce que c’est : le classique jeu du pendu en terminal. Le programme pioche un mot au hasard dans une liste, le joueur propose des lettres une par une. Utile pour pratiquer la manipulation de chaînes de caractères et les ensembles (set).
Librairie : random (Python standard) / Niveau : débutant
import random
MOTS = ["python", "application", "algorithme", "variable", "fonction", "bibliotheque"]
MAX_ERREURS = 6
mot = random.choice(MOTS)
trouve = set()
erreurs = 0
while erreurs < MAX_ERREURS:
affichage = " ".join(c if c in trouve else "_" for c in mot)
print(f"\n{affichage} (erreurs : {erreurs}/{MAX_ERREURS})")
if "_" not in affichage:
print("Gagné !")
break
lettre = input("Lettre : ").lower().strip()
if lettre in mot:
trouve.add(lettre)
else:
erreurs += 1
print(f"Raté. Il reste {MAX_ERREURS - erreurs} essai(s).")
else:
print(f"Perdu. Le mot était : {mot}")
5. Convertisseur d’unités
Ce que c’est : un script de conversion entre unités courantes (km/miles, celsius/fahrenheit, kg/livres). L’architecture avec un dictionnaire de fonctions lambda est une bonne introduction aux fonctions de première classe en Python.
Librairie : aucune (Python standard) / Niveau : débutant
conversions = {
"km_en_miles": lambda x: x * 0.621371,
"miles_en_km": lambda x: x * 1.60934,
"celsius_en_fahrenheit": lambda x: (x * 9/5) + 32,
"fahrenheit_en_celsius": lambda x: (x - 32) * 5/9,
"kg_en_livres": lambda x: x * 2.20462,
"livres_en_kg": lambda x: x * 0.453592,
}
print("Conversions disponibles :")
for cle in conversions:
print(f" - {cle}")
choix = input("\nConversion : ")
if choix in conversions:
valeur = float(input("Valeur : "))
print(f"Résultat : {conversions[choix](valeur):.4f}")
else:
print("Conversion non reconnue.")
6. Quiz interactif avec score
Ce que c’est : un quiz en ligne de commande qui pose des questions stockées dans une liste de dictionnaires, affiche le score final et la correction. Un bon projet pour introduire les listes de dictionnaires et la logique de score.
Librairie : random (Python standard) / Niveau : débutant
import random
questions = [
{"question": "Quelle librairie Python sert à l'analyse de données ?", "reponse": "pandas"},
{"question": "Quel mot-clé définit une fonction en Python ?", "reponse": "def"},
{"question": "Quelle extension ont les fichiers Python ?", "reponse": ".py"},
{"question": "Quel framework Python est utilisé pour le web ?", "reponse": "django"},
]
random.shuffle(questions)
score = 0
for i, q in enumerate(questions):
rep = input(f"\nQuestion {i+1}/{len(questions)} : {q['question']}\nVotre réponse : ").strip().lower()
if rep == q["reponse"]:
print("Correct.")
score += 1
else:
print(f"Incorrect. Réponse : {q['reponse']}")
print(f"\nScore final : {score}/{len(questions)}")
6 exemples d’automatisation et de scripts Python
C’est le domaine où Python excelle le plus concrètement pour les non-développeurs. Renommer 500 fichiers, envoyer des emails programmés, extraire des données d’un site web : ce sont des tâches que Python remplace en quelques dizaines de lignes.
7. Renommeur de fichiers en masse
Ce que c’est : un script qui renomme tous les fichiers d’un dossier selon un pattern défini : ajouter un préfixe, numéroter séquentiellement. Utile pour les photographes, les équipes qui gèrent des exports, ou tout workflow impliquant des lots de fichiers.
Librairie : pathlib (Python standard) / Niveau : débutant+
from pathlib import Path
dossier = Path("./photos")
prefixe = "2026_osmova_"
for i, fichier in enumerate(sorted(dossier.iterdir())):
if fichier.is_file():
nouveau_nom = dossier / f"{prefixe}{i+1:03d}{fichier.suffix}"
fichier.rename(nouveau_nom)
print(f"{fichier.name} -> {nouveau_nom.name}")
# Avant : photo1.jpg, image.jpg, shot.jpg
# Après : 2026_osmova_001.jpg, 2026_osmova_002.jpg, 2026_osmova_003.jpg
8. Envoi d’emails automatique
Ce que c’est : un script qui envoie des emails depuis un compte Gmail via SMTP. Depuis mai 2022, Google a supprimé l’authentification par mot de passe simple. Il faut utiliser un mot de passe d’application Google (16 caractères générés dans les paramètres de sécurité).
Librairie : smtplib, email (Python standard) / Niveau : intermédiaire
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
EXPEDITEUR = "votre.email@gmail.com"
MOT_DE_PASSE = "xxxx xxxx xxxx xxxx" # Mot de passe d'application Google
DESTINATAIRE = "client@exemple.com"
message = MIMEMultipart()
message["From"] = EXPEDITEUR
message["To"] = DESTINATAIRE
message["Subject"] = "Rapport hebdomadaire"
corps = "Bonjour,\n\nVeuillez trouver ci-joint le rapport.\n\nCordialement"
message.attach(MIMEText(corps, "plain"))
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as serveur:
serveur.login(EXPEDITEUR, MOT_DE_PASSE)
serveur.sendmail(EXPEDITEUR, DESTINATAIRE, message.as_string())
print("Email envoyé.")
9. Scraper web avec BeautifulSoup
Ce que c’est : un script qui extrait des données d’une page web HTML et les enregistre dans un fichier CSV. L’exemple cible le site de démonstration légal books.toscrape.com. Important : vérifiez toujours le fichier robots.txt et les conditions d’utilisation avant de scraper.
Librairie : requests, beautifulsoup4 / Niveau : intermédiaire
import requests
from bs4 import BeautifulSoup
import csv
URL = "https://books.toscrape.com/" # Site de démonstration légal
reponse = requests.get(URL, timeout=10)
reponse.raise_for_status()
soupe = BeautifulSoup(reponse.text, "html.parser")
livres = soupe.select("article.product_pod")
with open("livres.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["Titre", "Prix"])
for livre in livres:
titre = livre.h3.a["title"]
prix = livre.select_one(".price_color").text.strip()
writer.writerow([titre, prix])
print(f"{titre} - {prix}")
print(f"\n{len(livres)} livres extraits dans livres.csv")
10. Extracteur de données PDF
Ce que c’est : un script qui extrait le texte brut d’un PDF et le sauvegarde dans un fichier texte. Utile pour traiter des factures, des contrats, ou des rapports sans les ouvrir manuellement. PyMuPDF est la librairie la plus rapide et la plus fiable pour cette tâche selon la documentation officielle.
Librairie : PyMuPDF (pip install pymupdf) / Niveau : intermédiaire
import fitz # PyMuPDF : pip install pymupdf
def extraire_texte_pdf(chemin_pdf, chemin_sortie):
document = fitz.open(chemin_pdf)
texte_complet = []
for numero, page in enumerate(document):
texte = page.get_text()
texte_complet.append(f"--- Page {numero + 1} ---\n{texte}")
document.close()
with open(chemin_sortie, "w", encoding="utf-8") as f:
f.write("\n".join(texte_complet))
print(f"{len(document)} page(s) extraite(s) dans {chemin_sortie}")
extraire_texte_pdf("rapport.pdf", "rapport_texte.txt")
11. Notification de bureau automatique
Ce que c’est : un script qui envoie des notifications système à intervalles réguliers. Utile pour les rappels de pauses (technique Pomodoro), les alertes de monitoring, ou les notifications de fin de tâche longue. Fonctionne sur Windows, macOS et Linux.
Librairie : plyer (pip install plyer) / Niveau : débutant+
import time
from plyer import notification
def envoyer_notification(titre, message, duree=10):
notification.notify(title=titre, message=message, timeout=duree)
# Rappel toutes les 25 minutes (technique Pomodoro)
intervalle = 25 * 60
cycle = 1
print("Minuteur Pomodoro lancé. Ctrl+C pour arrêter.")
try:
while True:
time.sleep(intervalle)
envoyer_notification(
titre=f"Pomodoro #{cycle} terminé",
message="Temps de faire une pause de 5 minutes."
)
cycle += 1
except KeyboardInterrupt:
print("Minuteur arrêté.")
12. Suivi de dépenses avec export CSV
Ce que c’est : une application de suivi budgétaire en ligne de commande. L’utilisateur saisit ses dépenses par catégorie, le script calcule les totaux et exporte un rapport CSV. C’est l’exemple type de l’outil interne qu’une petite équipe peut construire en une après-midi.
Librairie : csv, datetime (Python standard) / Niveau : intermédiaire
import csv
from datetime import date
from collections import defaultdict
depenses = []
totaux = defaultdict(float)
print("Suivi de dépenses — saisissez 'fin' pour terminer.")
while True:
description = input("\nDépense (ou 'fin') : ")
if description.lower() == "fin":
break
categorie = input("Catégorie (alimentation/transport/logement/autre) : ")
montant = float(input("Montant (€) : "))
depenses.append({"date": date.today().isoformat(), "description": description,
"categorie": categorie, "montant": montant})
totaux[categorie] += montant
print("\nRécapitulatif par catégorie :")
for cat, total in sorted(totaux.items()):
print(f" {cat} : {total:.2f} €")
print(f" Total : {sum(totaux.values()):.2f} €")
with open("depenses.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["date", "description", "categorie", "montant"])
writer.writeheader()
writer.writerows(depenses)
print("\nExport enregistré dans depenses.csv")
5 exemples d’applications web Python

Python gère le développement côté serveur via deux frameworks principaux : Flask pour les projets légers et les API, Django pour les applications complètes avec base de données, authentification et interface d’administration. Selon le Stack Overflow Developer Survey 2024, Django et Flask figurent parmi les frameworks web les plus utilisés tous langages confondus.
13. API REST avec Flask
Ce que c’est : une API REST minimaliste qui expose des données au format JSON via des routes HTTP (GET, POST). C’est le point de départ de la plupart des applications web Python : une interface que n’importe quel frontend (React, Vue, mobile) peut consommer.
Librairie : flask (pip install flask) / Niveau : intermédiaire
from flask import Flask, jsonify, request
app = Flask(__name__)
produits = [
{"id": 1, "nom": "Clavier mécanique", "prix": 89.99},
{"id": 2, "nom": "Souris ergonomique", "prix": 54.99},
]
@app.route("/produits", methods=["GET"])
def lister_produits():
return jsonify(produits)
@app.route("/produits/<int:produit_id>", methods=["GET"])
def obtenir_produit(produit_id):
produit = next((p for p in produits if p["id"] == produit_id), None)
if produit is None:
return jsonify({"erreur": "Produit non trouvé"}), 404
return jsonify(produit)
@app.route("/produits", methods=["POST"])
def ajouter_produit():
data = request.get_json()
nouveau = {"id": len(produits) + 1, **data}
produits.append(nouveau)
return jsonify(nouveau), 201
if __name__ == "__main__":
app.run(debug=True)
# Accès : http://localhost:5000/produits
14. Tableau de bord avec Streamlit
Ce que c’est : une interface web interactive générée entièrement depuis Python, sans HTML ni CSS. Streamlit transforme un script d’analyse de données en application web en quelques lignes. C’est l’outil privilégié des data scientists pour partager des résultats rapidement.
Librairie : streamlit, pandas, matplotlib / Niveau : intermédiaire
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
st.title("Tableau de bord des ventes")
df = pd.DataFrame({
"Mois": ["Jan", "Fév", "Mar", "Avr", "Mai", "Jun"],
"Ventes": [12500, 18200, 15800, 22100, 19400, 25600],
"Objectif":[15000, 15000, 18000, 20000, 20000, 24000]
})
col1, col2 = st.columns(2)
col1.metric("Ventes totales", f"{df.Ventes.sum():,.0f} €")
col2.metric("Meilleur mois", df.loc[df.Ventes.idxmax(), "Mois"])
fig, ax = plt.subplots()
ax.bar(df["Mois"], df["Ventes"], label="Ventes réelles")
ax.plot(df["Mois"], df["Objectif"], color="red", label="Objectif")
ax.legend()
st.pyplot(fig)
# Lancer avec : streamlit run dashboard.py
15. Bot Discord
Ce que c’est : un bot Discord qui répond à des commandes dans un serveur. Les bots Discord sont utilisés pour automatiser des tâches communautaires : modération, notifications, jeux, sondages. La librairie discord.py est la référence officielle pour Python.
Librairie : discord.py (pip install discord.py) / Niveau : intermédiaire
import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
@bot.event
async def on_ready():
print(f"Bot connecté en tant que {bot.user}")
@bot.command()
async def bonjour(ctx):
await ctx.send(f"Bonjour {ctx.author.mention} !")
@bot.command()
async def info(ctx):
await ctx.send(f"Serveur : {ctx.guild.name} | Membres : {ctx.guild.member_count}")
# TOKEN disponible sur https://discord.com/developers/applications
bot.run("VOTRE_TOKEN_ICI")
16. Application de télémédecine (prototype Django)
Ce que c’est : un prototype d’interface de prise de rendez-vous médical en ligne avec authentification, formulaire patient et confirmation par email. Django est choisi pour sa gestion native des utilisateurs et de l’administration. Ce type d’application nécessite un audit de conformité RGPD avant mise en production.
Librairie : django (pip install django) / Niveau : avancé
# models.py (Django)
from django.db import models
from django.contrib.auth.models import User
class Patient(models.Model):
utilisateur = models.OneToOneField(User, on_delete=models.CASCADE)
date_naissance = models.DateField()
numero_secu = models.CharField(max_length=15, blank=True)
class RendezVous(models.Model):
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
medecin = models.CharField(max_length=100)
date_heure = models.DateTimeField()
motif = models.TextField()
confirme = models.BooleanField(default=False)
class Meta:
ordering = ["date_heure"]
def __str__(self):
return f"{self.patient} - {self.medecin} - {self.date_heure}"
17. Optimiseur d’itinéraires de livraison
Ce que c’est : un script qui calcule l’ordre optimal pour visiter plusieurs adresses de livraison. L’algorithme du voyageur de commerce est résolu par une heuristique du plus proche voisin, suffisante pour des flottes jusqu’à 20 points.
Librairie : scipy, numpy / Niveau : avancé
import numpy as np
from scipy.spatial.distance import cdist
# Coordonnées GPS (latitude, longitude)
points = np.array([
[43.6047, 1.4442], # Toulouse centre (dépôt)
[43.6108, 1.4533], # Livraison 1
[43.5986, 1.4318], # Livraison 2
[43.6215, 1.4401], # Livraison 3
[43.5921, 1.4589], # Livraison 4
])
def plus_proche_voisin(points, depart=0):
n = len(points)
distances = cdist(points, points)
visite = [False] * n
chemin = [depart]
visite[depart] = True
for _ in range(n - 1):
actuel = chemin[-1]
distances[actuel][visite] = np.inf
suivant = np.argmin(distances[actuel])
chemin.append(suivant)
visite[suivant] = True
return chemin
ordre = plus_proche_voisin(points)
print("Ordre optimisé :", " -> ".join(f"Point {i}" for i in ordre))
5 exemples Python en data science et visualisation
Python représente 80 % du marché des projets de data science selon l’enquête annuelle Kaggle 2023. L’écosystème NumPy, Pandas, Matplotlib, scikit-learn forme un ensemble cohérent que vous pouvez apprendre progressivement.
18. Analyse de fichier CSV avec Pandas
Ce que c’est : un script qui charge un fichier CSV de ventes, nettoie les données manquantes, calcule des statistiques par catégorie et génère un rapport. C’est le projet de démarrage pour comprendre Pandas, la librairie de manipulation de données la plus utilisée en Python.
Librairie : pandas (pip install pandas) / Niveau : intermédiaire
import pandas as pd
df = pd.read_csv("ventes.csv", parse_dates=["date"])
print(f"Lignes : {len(df)}, colonnes : {len(df.columns)}")
print(f"Valeurs manquantes :\n{df.isnull().sum()}")
df.dropna(subset=["montant", "categorie"], inplace=True)
analyse = df.groupby("categorie").agg(
total_ventes=("montant", "sum"),
nombre_commandes=("montant", "count"),
panier_moyen=("montant", "mean")
).round(2)
print("\nAnalyse par catégorie :")
print(analyse.sort_values("total_ventes", ascending=False))
df["mois"] = df["date"].dt.to_period("M")
mensuel = df.groupby("mois")["montant"].sum()
print(f"\nMeilleur mois : {mensuel.idxmax()} ({mensuel.max():.2f} €)")
19. Graphiques automatiques avec Matplotlib
Ce que c’est : un script qui génère et sauvegarde automatiquement plusieurs graphiques à partir d’un jeu de données : courbe d’évolution, camembert, histogramme. L’objectif est de produire des visuels prêts à insérer dans un rapport sans manipulation manuelle.
Librairie : matplotlib, pandas / Niveau : intermédiaire
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("ventes.csv", parse_dates=["date"])
df["mois"] = df["date"].dt.to_period("M")
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
fig.suptitle("Rapport de ventes", fontsize=14, fontweight="bold")
df.groupby("mois")["montant"].sum().plot(ax=axes[0], title="Ventes par mois")
axes[0].set_ylabel("€")
df.groupby("categorie")["montant"].sum().plot.pie(
ax=axes[1], autopct="%1.0f%%", title="Par catégorie")
df["montant"].hist(bins=30, ax=axes[2])
axes[2].set_title("Distribution des montants")
axes[2].set_xlabel("€")
plt.tight_layout()
plt.savefig("rapport_ventes.png", dpi=150, bbox_inches="tight")
print("Graphiques sauvegardés dans rapport_ventes.png")
20. Analyse de sentiments
Ce que c’est : un script qui analyse le sentiment (positif, négatif, neutre) d’un ensemble d’avis clients. VADER (Valence Aware Dictionary and sEntiment Reasoner) est un modèle préentraîné pour le texte court, documenté dans une publication AAAI de 2014.
Librairie : vaderSentiment (pip install vaderSentiment) / Niveau : intermédiaire
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
analyser = SentimentIntensityAnalyzer()
avis = [
"Excellent produit, livraison rapide, je recommande vivement !",
"Déçu par la qualité, ne correspond pas à la description.",
"Correct sans plus, ni bon ni mauvais.",
"Service client très réactif, problème résolu en 2h.",
"Emballage abîmé à la réception, produit inutilisable.",
]
print(f"{'Avis':<55} | Sentiment")
print("-" * 70)
for texte in avis:
scores = analyser.polarity_scores(texte)
compound = scores["compound"]
if compound >= 0.05:
sentiment = "Positif"
elif compound <= -0.05:
sentiment = "Négatif"
else:
sentiment = "Neutre"
print(f"{texte[:53]:<55} | {sentiment} ({compound:+.2f})")
21. Prédiction de prix avec scikit-learn
Ce que c’est : un modèle de régression qui prédit le prix d’un bien à partir de ses caractéristiques (surface, pièces, étage). scikit-learn est la librairie de machine learning la plus utilisée en Python pour les tâches de classification et de régression selon les benchmarks publiés sur scikit-learn.org.
Librairie : scikit-learn, pandas / Niveau : avancé
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
df = pd.DataFrame({
"surface": [45, 60, 75, 90, 120, 35, 55, 80, 100, 65],
"pieces": [2, 3, 3, 4, 5, 1, 2, 3, 4, 3],
"etage": [1, 3, 2, 5, 4, 0, 2, 6, 3, 1],
"prix": [180000, 240000, 285000, 360000, 480000,
140000, 220000, 320000, 400000, 260000]
})
X = df[["surface", "pieces", "etage"]]
y = df["prix"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
modele = LinearRegression()
modele.fit(X_train, y_train)
predictions = modele.predict(X_test)
print(f"Erreur absolue moyenne : {mean_absolute_error(y_test, predictions):.0f} €")
print(f"Score R² : {r2_score(y_test, predictions):.2f}")
nouveau = pd.DataFrame([{"surface": 70, "pieces": 3, "etage": 4}])
print(f"Prix estimé : {modele.predict(nouveau)[0]:.0f} €")
22. Visualisation interactive avec Plotly
Ce que c’est : un script qui génère des graphiques interactifs (zoom, filtres, survol) exportables en HTML. La différence avec Matplotlib : Plotly produit des fichiers que vous pouvez envoyer à un client ou intégrer dans une page web sans serveur.
Librairie : plotly (pip install plotly) / Niveau : intermédiaire
import plotly.express as px
import pandas as pd
df = pd.DataFrame({
"Mois": ["Jan", "Fév", "Mar", "Avr", "Mai", "Jun"],
"Ventes": [12500, 18200, 15800, 22100, 19400, 25600],
"Catégorie": ["A", "B", "A", "B", "A", "B"]
})
fig = px.bar(
df, x="Mois", y="Ventes", color="Catégorie",
title="Ventes mensuelles par catégorie",
labels={"Ventes": "Chiffre d'affaires (€)"},
text_auto=True
)
fig.update_layout(bargap=0.2)
fig.write_html("rapport_interactif.html")
print("Rapport interactif généré : rapport_interactif.html")
5 exemples Python en intelligence artificielle et machine learning

Python est le langage de référence pour le machine learning. TensorFlow, PyTorch et scikit-learn sont tous développés en priorité pour Python. Ces cinq exemples couvrent les cas d’usage les plus courants en production.
23. Reconnaissance d’images avec TensorFlow
Ce que c’est : un script qui charge un modèle pré-entraîné MobileNetV2 et classifie n’importe quelle image parmi 1 000 catégories ImageNet. MobileNetV2 est conçu pour fonctionner sur des machines sans GPU, ce qui le rend accessible pour débuter.
Librairie : tensorflow, Pillow / Niveau : avancé
import tensorflow as tf
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import numpy as np
modele = MobileNetV2(weights="imagenet")
def classifier_image(chemin):
img = image.load_img(chemin, target_size=(224, 224))
tableau = image.img_to_array(img)
tableau = np.expand_dims(tableau, axis=0)
tableau = preprocess_input(tableau)
predictions = modele.predict(tableau)
resultats = decode_predictions(predictions, top=3)[0]
print(f"\nClassification de : {chemin}")
for rang, (_, label, confiance) in enumerate(resultats, 1):
print(f" {rang}. {label} ({confiance*100:.1f}%)")
classifier_image("photo.jpg")
24. Génération de texte avec Hugging Face Transformers
Ce que c’est : un script qui utilise un modèle GPT-2 en français pour compléter du texte. La librairie transformers de Hugging Face donne accès à des milliers de modèles pré-entraînés via une interface Python unifiée.
Librairie : transformers, torch / Niveau : avancé
from transformers import pipeline
generateur = pipeline("text-generation", model="dbddv01/gpt2-french-small")
prompt = "Le développement Python permet de"
resultats = generateur(
prompt,
max_new_tokens=80,
num_return_sequences=2,
temperature=0.8,
do_sample=True,
pad_token_id=50256
)
print(f"Prompt : {prompt}\n")
for i, r in enumerate(resultats, 1):
print(f"Variante {i} : {r['generated_text']}\n")
25. Détection d’objets en temps réel avec YOLO
Ce que c’est : un script qui détecte et encadre des objets dans une image ou un flux vidéo. YOLOv8 d’Ultralytics offre la meilleure combinaison vitesse/précision selon les benchmarks publiés sur docs.ultralytics.com.
Librairie : ultralytics (pip install ultralytics) / Niveau : avancé
from ultralytics import YOLO
modele = YOLO("yolov8n.pt") # Modèle nano : 6 Mo, rapide
def detecter_image(chemin):
resultats = modele(chemin)
for r in resultats:
print(f"Objets détectés : {len(r.boxes)}")
for boite in r.boxes:
classe = modele.names[int(boite.cls)]
confiance = float(boite.conf)
print(f" - {classe} ({confiance*100:.0f}%)")
resultats[0].save("detection_resultat.jpg")
print("Image annotée sauvegardée.")
detecter_image("photo.jpg")
26. Système de recommandation par filtrage collaboratif
Ce que c’est : un moteur de recommandation qui suggère des produits en se basant sur les comportements d’utilisateurs similaires. C’est la logique derrière les recommandations Netflix ou Amazon.
Librairie : scikit-learn, pandas, numpy / Niveau : avancé
import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
notes = pd.DataFrame({
"Python Crash Course": [5, 4, 0, 1, 0],
"Flask Web Dev": [4, 0, 5, 0, 3],
"Data Science Python": [0, 5, 4, 0, 4],
"Deep Learning": [1, 0, 3, 5, 0],
"Automate the Boring": [5, 4, 0, 0, 5],
}, index=["Alice", "Bob", "Carole", "David", "Emma"])
def recommander(utilisateur, top_n=2):
sim = pd.DataFrame(cosine_similarity(notes), index=notes.index, columns=notes.index)
poids = sim[utilisateur].drop(utilisateur)
poids = poids / poids.sum()
scores = notes.drop(utilisateur).T.dot(poids)
deja_note = notes.loc[utilisateur][notes.loc[utilisateur] > 0].index
return scores.drop(deja_note).nlargest(top_n)
print("Recommandations pour Alice :")
print(recommander("Alice"))
27. Chatbot avec traitement du langage naturel
Ce que c’est : un chatbot basé sur la reconnaissance d’intention. L’utilisateur pose une question, le script identifie l’intention la plus proche dans une base de données et retourne la réponse correspondante. Cette architecture convient aux FAQ et au support client de premier niveau.
Librairie : scikit-learn / Niveau : avancé
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
base = {
"horaires": {
"questions": ["quels sont vos horaires", "vous êtes ouverts quand"],
"reponse": "Nous sommes ouverts du lundi au vendredi de 9h à 18h."
},
"tarifs": {
"questions": ["combien ça coûte", "quels sont vos tarifs", "prix"],
"reponse": "Nos tarifs démarrent à 1 200 € pour un site vitrine."
},
"contact": {
"questions": ["comment vous contacter", "numéro de téléphone"],
"reponse": "Contactez-nous au 04 11 78 90 73 ou via le formulaire."
}
}
corpus, labels, reponses = [], [], {}
for intention, data in base.items():
for q in data["questions"]:
corpus.append(q)
labels.append(intention)
reponses[intention] = data["reponse"]
vec = TfidfVectorizer()
matrice = vec.fit_transform(corpus)
def repondre(question):
v = vec.transform([question])
sims = cosine_similarity(v, matrice)[0]
best = np.argmax(sims)
if sims[best] < 0.1:
return "Je n'ai pas compris. Pouvez-vous reformuler ?"
return reponses[labels[best]]
while True:
q = input("\nVous : ")
if q.lower() == "quitter":
break
print(f"Bot : {repondre(q)}")
5 exemples de jeux et applications desktop Python
28. Jeu Snake avec Pygame
Ce que c’est : le classique jeu Snake avec fenêtre graphique, gestion des collisions et compteur de score. Pygame est la librairie Python de référence pour le développement de jeux 2D depuis 2000 (pygame.org). Ce projet introduit la boucle de jeu, la gestion des événements clavier et le rendu graphique.
Librairie : pygame (pip install pygame) / Niveau : intermédiaire
import pygame, random, sys
pygame.init()
TAILLE, GRILLE = 20, 20
ecran = pygame.display.set_mode((TAILLE * GRILLE, TAILLE * GRILLE))
horloge = pygame.time.Clock()
serpent = [(10, 10)]
direction = (1, 0)
nourriture = (random.randint(0, GRILLE-1), random.randint(0, GRILLE-1))
score = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != (0, 1): direction = (0, -1)
elif event.key == pygame.K_DOWN and direction != (0, -1): direction = (0, 1)
elif event.key == pygame.K_LEFT and direction != (1, 0): direction = (-1, 0)
elif event.key == pygame.K_RIGHT and direction != (-1, 0): direction = (1, 0)
tete = ((serpent[0][0] + direction[0]) % GRILLE, (serpent[0][1] + direction[1]) % GRILLE)
if tete in serpent:
print(f"Partie terminée. Score : {score}")
sys.exit()
serpent.insert(0, tete)
if tete == nourriture:
score += 1
nourriture = (random.randint(0, GRILLE-1), random.randint(0, GRILLE-1))
else:
serpent.pop()
ecran.fill((20, 20, 20))
for seg in serpent:
pygame.draw.rect(ecran, (0, 200, 80), (seg[0]*TAILLE, seg[1]*TAILLE, TAILLE-1, TAILLE-1))
pygame.draw.rect(ecran, (220, 50, 50), (nourriture[0]*TAILLE, nourriture[1]*TAILLE, TAILLE, TAILLE))
pygame.display.set_caption(f"Snake - Score : {score}")
pygame.display.flip()
horloge.tick(10)
29. Application desktop avec Tkinter
Ce que c’est : une application de gestion de contacts avec interface graphique : ajout, suppression, sauvegarde en JSON. Tkinter est inclus dans Python par défaut et produit des interfaces natives sur Windows, macOS et Linux.
Librairie : tkinter (Python standard) / Niveau : intermédiaire
import tkinter as tk
import json, os
FICHIER = "contacts.json"
contacts = json.load(open(FICHIER)) if os.path.exists(FICHIER) else []
def sauvegarder():
with open(FICHIER, "w") as f: json.dump(contacts, f)
def ajouter():
nom, email = entry_nom.get().strip(), entry_email.get().strip()
if nom and email:
contacts.append({"nom": nom, "email": email})
sauvegarder()
rafraichir()
entry_nom.delete(0, tk.END)
entry_email.delete(0, tk.END)
def rafraichir():
liste.delete(0, tk.END)
for c in contacts:
liste.insert(tk.END, f"{c['nom']} - {c['email']}")
fenetre = tk.Tk()
fenetre.title("Carnet de contacts")
fenetre.geometry("400x500")
tk.Label(fenetre, text="Nom").pack()
entry_nom = tk.Entry(fenetre, width=40); entry_nom.pack(pady=4)
tk.Label(fenetre, text="Email").pack()
entry_email = tk.Entry(fenetre, width=40); entry_email.pack(pady=4)
tk.Button(fenetre, text="Ajouter", command=ajouter).pack(pady=8)
liste = tk.Listbox(fenetre, width=55, height=20); liste.pack(padx=10)
rafraichir()
fenetre.mainloop()
30. Éditeur de texte avec recherche et remplacement
Ce que c’est : un éditeur de texte graphique avec ouverture/sauvegarde de fichiers, recherche et remplacement, et compteur de mots. Environ 50 lignes de code, entièrement en Tkinter.
Librairie : tkinter (Python standard) / Niveau : intermédiaire
import tkinter as tk
from tkinter import filedialog
class Editeur:
def __init__(self, root):
root.title("Éditeur Python")
root.geometry("800x600")
self.texte = tk.Text(root, wrap=tk.WORD, font=("Courier", 12), undo=True)
self.texte.pack(fill=tk.BOTH, expand=True)
self.texte.bind("<KeyRelease>", self.compter_mots)
barre = tk.Menu(root)
fichier = tk.Menu(barre, tearoff=0)
fichier.add_command(label="Ouvrir", command=self.ouvrir)
fichier.add_command(label="Sauvegarder", command=self.sauvegarder)
barre.add_cascade(label="Fichier", menu=fichier)
edition = tk.Menu(barre, tearoff=0)
edition.add_command(label="Rechercher/Remplacer", command=self.rechercher)
barre.add_cascade(label="Édition", menu=edition)
root.config(menu=barre)
self.statut = tk.Label(root, text="0 mot(s)", anchor=tk.W)
self.statut.pack(fill=tk.X)
def ouvrir(self):
p = filedialog.askopenfilename(filetypes=[("Texte", "*.txt")])
if p:
with open(p, "r", encoding="utf-8") as f:
self.texte.delete(1.0, tk.END); self.texte.insert(tk.END, f.read())
def sauvegarder(self):
p = filedialog.asksaveasfilename(defaultextension=".txt")
if p:
with open(p, "w", encoding="utf-8") as f:
f.write(self.texte.get(1.0, tk.END))
def compter_mots(self, event=None):
self.statut.config(text=f"{len(self.texte.get(1.0, tk.END).split())} mot(s)")
def rechercher(self):
w = tk.Toplevel()
tk.Label(w, text="Rechercher :").grid(row=0, column=0)
e_r = tk.Entry(w, width=30); e_r.grid(row=0, column=1)
tk.Label(w, text="Remplacer :").grid(row=1, column=0)
e_m = tk.Entry(w, width=30); e_m.grid(row=1, column=1)
def remplacer():
contenu = self.texte.get(1.0, tk.END)
self.texte.delete(1.0, tk.END)
self.texte.insert(tk.END, contenu.replace(e_r.get(), e_m.get()))
tk.Button(w, text="Remplacer tout", command=remplacer).grid(row=2, columnspan=2)
fenetre = tk.Tk()
Editeur(fenetre)
fenetre.mainloop()
31. Système de gestion de bibliothèque
Ce que c’est : une application complète de gestion d’inventaire de livres avec base de données SQLite locale. Ajout, recherche, emprunts, retours. SQLite est intégré dans Python et ne nécessite aucun serveur.
Librairie : sqlite3 (Python standard) / Niveau : intermédiaire
import sqlite3
conn = sqlite3.connect("bibliotheque.db")
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS livres (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titre TEXT NOT NULL,
auteur TEXT NOT NULL,
isbn TEXT UNIQUE,
disponible INTEGER DEFAULT 1
)""")
conn.commit()
def ajouter_livre(titre, auteur, isbn):
c.execute("INSERT INTO livres (titre, auteur, isbn) VALUES (?, ?, ?)", (titre, auteur, isbn))
conn.commit()
print(f"Ajouté : {titre}")
def emprunter(livre_id):
c.execute("UPDATE livres SET disponible = 0 WHERE id = ? AND disponible = 1", (livre_id,))
if c.rowcount:
conn.commit(); print(f"Livre {livre_id} emprunté.")
else:
print("Livre indisponible ou introuvable.")
def rechercher(terme):
c.execute("SELECT * FROM livres WHERE titre LIKE ? OR auteur LIKE ?",
(f"%{terme}%", f"%{terme}%"))
for row in c.fetchall():
dispo = "Disponible" if row[4] else "Emprunté"
print(f"#{row[0]} - {row[1]} par {row[2]} [{dispo}]")
ajouter_livre("Python Crash Course", "Eric Matthes", "978-1-59327-928-5")
ajouter_livre("Automate the Boring Stuff", "Al Sweigart", "978-1-59327-599-8")
rechercher("python")
32. Bot de trading crypto (simulation)
Ce que c’est : un bot de trading en mode simulation qui récupère les prix en temps réel via l’API publique de Binance et applique une stratégie de croisement de moyennes mobiles. Important : ce script fonctionne uniquement en simulation. Le trading automatisé réel comporte des risques financiers significatifs.
Librairie : requests, pandas / Niveau : avancé
import requests
import pandas as pd
import time
def get_prix(symbole="BTCUSDT", intervalle="1h", limite=50):
url = "https://api.binance.com/api/v3/klines"
params = {"symbol": symbole, "interval": intervalle, "limit": limite}
data = requests.get(url, params=params).json()
df = pd.DataFrame(data, columns=[
"timestamp", "open", "high", "low", "close", "volume",
"close_time", "qav", "num_trades", "tb_base", "tb_quote", "ignore"
])
df["close"] = df["close"].astype(float)
return df
def strategie_mm(df, courte=7, longue=21):
df["mm_c"] = df["close"].rolling(courte).mean()
df["mm_l"] = df["close"].rolling(longue).mean()
d, a = df.iloc[-1], df.iloc[-2]
if a["mm_c"] < a["mm_l"] and d["mm_c"] > d["mm_l"]: return "ACHAT"
if a["mm_c"] > a["mm_l"] and d["mm_c"] < d["mm_l"]: return "VENTE"
return "ATTENTE"
print("Bot trading simulation - BTC/USDT")
while True:
df = get_prix()
signal = strategie_mm(df)
prix = df["close"].iloc[-1]
print(f"Prix : {prix:.2f} $ | Signal : {signal}")
time.sleep(60)
Quel IDE utiliser pour coder en Python en 2026 ?
Deux environnements couvrent 95 % des besoins. Visual Studio Code avec l’extension Python de Microsoft est la solution la plus polyvalente : gratuit, léger, compatible avec tous les projets des exemples ci-dessus. PyCharm Community Edition (gratuit) est plus adapté aux projets Django ou aux projets avec une base de code volumineuse, pour ses outils de refactoring et son débogueur intégré. Atom a été archivé par GitHub en décembre 2022 et n’est plus maintenu.
Python s’utilise-t-il en front-end ou en back-end ?
Python est un langage back-end. Il s’exécute côté serveur, pas dans le navigateur. Pour une application web, Python gère la logique métier, la base de données et les API. Le front-end est assuré par JavaScript, React ou Vue. Streamlit fait exception : il génère une interface web depuis Python sans JavaScript, mais uniquement pour des outils internes ou des tableaux de bord de données.
Comment créer une application Python de A à Z ?
La méthode la plus directe : 1) définissez ce que l’application doit faire (entrée, traitement, sortie) ; 2) choisissez le bon outil selon le type (Flask pour une API, Tkinter pour du desktop, Pygame pour un jeu) ; 3) codez d’abord la fonctionnalité principale sans interface ; 4) ajoutez l’interface et la gestion des erreurs. Les exemples de cet article suivent tous cette progression.
Quelle est la différence entre un script et une application Python ?
Un script est un fichier Python qui exécute une tâche définie de A à Z, sans interaction utilisateur persistante. Une application a un état qui persiste (base de données, fichiers), une interface utilisateur (terminal, graphique, web) et gère des erreurs de manière robuste. Les exemples 1 à 6 de cet article sont des scripts. Les exemples 13 à 32 sont des applications.
Python convient-il aux projets avancés et à la production ?
Oui. Python est utilisé en production par des entreprises comme Instagram (Django), Spotify (data), Dropbox (back-end), la NASA (traitement de données) et Google (machine learning). Les contraintes de performance peuvent être compensées par Cython, des extensions C, ou une architecture asynchrone avec asyncio. Python n’est pas adapté aux applications desktop grand public ni aux jeux hautes performances, où C++ reste la norme.
Si vous avez besoin d’une application web sur mesure en Python ou d’une automatisation de vos processus métier, ces exemples donnent une idée précise de ce que le langage permet. Le passage d’un prototype fonctionnel à une application en production est là où l’expérience fait la différence.



