Développement web

32 exemples d’applications Python projets concrets avec code

32 exemples d’applications Python projets concrets avec code

    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.

    NiveauPrérequisDomaines couverts dans cet article
    DébutantBases Python (variables, boucles, fonctions)Projets débutants (exemples 1 à 6)
    IntermédiairePip, classes, gestion des erreursAutomatisation, web, data (exemples 7 à 22)
    AvancéAPI, concurrence, machine learningIA, ML, projets sectoriels (exemples 23 à 32)

    6 exemples d’applications Python pour débutants

    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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+

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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+

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    développement web avec Python Flask et Django

    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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é

    osmova.com
    Python
    # 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é

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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é

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    exemples applications Python 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é

    osmova.com
    Python
    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é

    osmova.com
    Python
    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é

    osmova.com
    Python
    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é

    osmova.com
    Python
    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é

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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

    osmova.com
    Python
    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é

    osmova.com
    Python
    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.

    Continuez votre lecture

    Articles sur le même sujet : Application web sur mesure

    Comment-financer-la-creation-dune-application-Conseils-et-astuces
    Développement web

    Comment financer la création d’une application : Conseils et astuces

    creer-une-application-web-5
    Développement web

    Comment créer une application Web ? Un guide complet

    Créer une application web : étapes, coûts et choix technologiques