🐍 Programmation Python

Python — De zéro à projets réels

Le langage n°1 pour débuter, créer des jeux, automatiser des trucs et construire de l'IA.
Tout ce qu'il faut pour devenir dangereux avec un clavier.

🧠 Pourquoi Python ?

Python est le langage le plus populaire au monde (source : TIOBE, Stack Overflow). Et pour une bonne raison :

🎓

Facile à lire

La syntaxe ressemble presque à de l'anglais. Pas de ; partout, pas d'accolades — juste de l'indentation propre.

🤖

IA & Data Science

TensorFlow, PyTorch, pandas, NumPy… Toute l'intelligence artificielle moderne tourne sur Python.

🌐

Web & APIs

Django, Flask, FastAPI — des millions de sites et services backend sont construits en Python.

🎮

Jeux & Automatisation

Pygame pour les jeux 2D, scripts pour automatiser tes tâches répétitives, bots Discord…

💡

Fun fact : Python est utilisé par la NASA, Google, Instagram, Spotify et Discord. Des entreprises qui recrutent à fond des devs Python.

⚙️ Installation

Avant de coder, il te faut les bons outils. Rien de compliqué :

📥 1. Installer Python

Va sur python.org et télécharge la dernière version (3.12+). Sur l'installeur Windows, coche "Add Python to PATH" — c'est crucial.

# Vérifie que Python est installé :
$ python --version
Python 3.12.4

# Ou sur certains systèmes :
$ python3 --version
Python 3.12.4

📝 2. Un bon éditeur : VS Code

Télécharge Visual Studio Code et installe l'extension Python de Microsoft. Tu auras l'autocomplétion, le débogage, et un terminal intégré.

📦 3. pip — Le gestionnaire de paquets

pip est installé automatiquement avec Python. C'est comme un app store pour les librairies Python.

# Installer un paquet :
$ pip install requests

# Voir les paquets installés :
$ pip list

# Mettre à jour pip :
$ pip install --upgrade pip

Astuce : Tu peux aussi utiliser IDLE, l'éditeur fourni avec Python. C'est basique mais parfait pour tester des trucs rapidement. Lance-le depuis le menu Démarrer.

🔤 Les bases

Variables & Types

En Python, pas besoin de déclarer le type — le langage le devine tout seul :

# Les types de base nom = "Alex" # str — chaîne de caractères age = 15 # int — nombre entier taille = 1.75 # float — nombre décimal est_dev = True # bool — vrai ou faux # Collections skills = ["Python", "HTML", "Arduino"] # list — liste ordonnée profil = {"nom": "Alex", "level": 42} # dict — clé:valeur

f-strings — Formater du texte

Les f-strings sont la façon moderne (et stylée) d'insérer des variables dans du texte :

nom = "Alex" xp = 1337 print(f"Joueur : {nom}, XP : {xp}") # → Joueur : Alex, XP : 1337 # Tu peux même mettre des calculs dedans : print(f"Level : {xp // 100}") # → Level : 13

input() — Lire une entrée utilisateur

pseudo = input("Ton pseudo : ") age = int(input("Ton âge : ")) # input() renvoie toujours un str ! print(f"Bienvenue {pseudo}, tu as {age} ans.")
⚠️

Attention : input() renvoie toujours une chaîne de caractères (str). Pour un nombre, il faut convertir avec int() ou float().

🔀 Contrôle de flux

if / elif / else — Les conditions

hp = 30 if hp <= 0: print("💀 Game Over") elif hp < 20: print("⚠️ Santé critique !") elif hp < 50: print("🟡 Attention, soigne-toi") else: print("💚 Pleine forme")

for — Boucle sur une séquence

# Parcourir une liste for skill in ["Python", "C++", "Rust"]: print(f"🔧 {skill}") # range() pour compter for i in range(5): # 0, 1, 2, 3, 4 print(f"Tour {i}") # range(start, stop, step) for i in range(0, 20, 5): # 0, 5, 10, 15 print(i)

while — Boucle tant que…

tentatives = 3 while tentatives > 0: reponse = input("Mot de passe : ") if reponse == "s3cr3t": print("✅ Accès accordé !") break # Sort de la boucle tentatives -= 1 print(f"❌ Reste {tentatives} essai(s)") else: print("🔒 Compte bloqué")
🧠

Le saviez-tu ? Le bloc else après un while ou for s'exécute seulement si la boucle n'a pas été interrompue par break. C'est une feature unique de Python.

Fonctions

Une fonction, c'est un bloc de code réutilisable. Tu l'écris une fois, tu l'appelles autant de fois que tu veux.

def calculer_degats(attaque, defense): """Calcule les dégâts infligés à un ennemi.""" degats = max(0, attaque - defense) return degats # Utilisation : dmg = calculer_degats(25, 10) print(f"🗡️ Tu infliges {dmg} dégâts !") # → 15

Paramètres par défaut

def saluer(nom, titre="Aventurier"): return f"Bienvenue, {titre} {nom} !" print(saluer("Alex")) # → Bienvenue, Aventurier Alex ! print(saluer("Alex", "Maître")) # → Bienvenue, Maître Alex !

Lambda — Fonctions en une ligne

# Fonction classique vs lambda : def doubler(x): return x * 2 doubler_lambda = lambda x: x * 2 # Utile pour trier : joueurs = [{"nom": "A", "xp": 300}, {"nom": "B", "xp": 150}] joueurs.sort(key=lambda j: j["xp"], reverse=True) # → Trié par XP décroissant
📝

Docstrings : La chaîne entre """triple guillemets""" juste après def est une docstring. Elle décrit ce que fait la fonction. C'est une bonne habitude à prendre dès maintenant — ton futur toi te remerciera.

📦 Listes & Dictionnaires

Listes — Les bases avancées

inventaire = ["épée", "bouclier", "potion", "arc", "flèche"] # Slicing — extraire des morceaux print(inventaire[1:3]) # → ['bouclier', 'potion'] print(inventaire[-2:]) # → ['arc', 'flèche'] print(inventaire[::2]) # → ['épée', 'potion', 'flèche'] # Méthodes utiles inventaire.append("bombe") # Ajouter à la fin inventaire.insert(0, "casque") # Insérer à une position inventaire.remove("potion") # Supprimer par valeur dernier = inventaire.pop() # Retirer le dernier

List Comprehension — Du code compact et puissant

# Au lieu de : carres = [] for n in range(10): carres.append(n ** 2) # Tu peux écrire : carres = [n ** 2 for n in range(10)] # → [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # Avec un filtre : pairs = [n for n in range(20) if n % 2 == 0] # → [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Dictionnaires — Clé → Valeur

perso = { "nom": "Shadow", "classe": "Assassin", "hp": 80, "skills": ["furtivité", "poison"] } # Accéder print(perso["nom"]) # → Shadow print(perso.get("mana", 0)) # → 0 (pas de crash si clé absente) # Modifier / Ajouter perso["hp"] -= 20 perso["arme"] = "dague" # Nouvelle clé # Parcourir for cle, valeur in perso.items(): print(f"{cle} : {valeur}")
🔥

Pattern utile : Compter des occurrences avec un dict : compteur[mot] = compteur.get(mot, 0) + 1 Ou mieux : utilise from collections import Counter.

🏗️ Classes — Programmation Orientée Objet

La POO, c'est organiser ton code comme un jeu vidéo : des objets avec des propriétés et des actions. Au lieu d'avoir des variables partout, tu les regroupes dans des classes.

class Personnage: """Un personnage de jeu RPG.""" def __init__(self, nom, classe, hp=100, attaque=10): self.nom = nom self.classe = classe self.hp = hp self.hp_max = hp self.attaque = attaque self.inventaire = [] def est_vivant(self): return self.hp > 0 def attaquer(self, cible): degats = self.attaque cible.hp -= degats print(f"⚔️ {self.nom} → {cible.nom} : -{degats} HP") def soigner(self, montant=20): self.hp = min(self.hp + montant, self.hp_max) print(f"💚 {self.nom} : {self.hp}/{self.hp_max} HP") def __str__(self): return f"{self.nom} ({self.classe}) — {self.hp}/{self.hp_max} HP"

Héritage — Créer des sous-classes

class Mage(Personnage): """Un mage avec du mana.""" def __init__(self, nom, mana=50): super().__init__(nom, classe="Mage", hp=70, attaque=8) self.mana = mana def boule_de_feu(self, cible): if self.mana >= 15: self.mana -= 15 degats = 25 cible.hp -= degats print(f"🔥 {self.nom} lance Boule de Feu → {cible.nom} : -{degats} HP") else: print("❌ Pas assez de mana !") # Utilisation : hero = Mage("Gandalf") goblin = Personnage("Goblin", "Monstre", hp=40, attaque=5) hero.boule_de_feu(goblin) print(goblin) # → Goblin (Monstre) — 15/40 HP
💡

self, c'est quoi ? C'est une référence à l'objet lui-même. Quand tu écris self.hp, tu dis "le HP de cet objet-ci". C'est comme this en JavaScript, mais explicite.

🎮 Projet : Mini RPG dans le terminal

On combine tout ce qu'on a appris pour créer un jeu de combat au tour par tour avec inventaire. Copie ce code et lance-le !

import random

class Combattant:
    def __init__(self, nom, hp, attaque):
        self.nom = nom
        self.hp = hp
        self.hp_max = hp
        self.attaque = attaque
        self.potions = 2

    def est_vivant(self):
        return self.hp > 0

    def frapper(self, cible):
        degats = random.randint(self.attaque - 3, self.attaque + 5)
        degats = max(1, degats)
        cible.hp -= degats
        print(f"⚔️  {self.nom} frappe {cible.nom} → -{degats} HP")

    def boire_potion(self):
        if self.potions > 0:
            soin = random.randint(15, 30)
            self.hp = min(self.hp + soin, self.hp_max)
            self.potions -= 1
            print(f"🧪 {self.nom} boit une potion → +{soin} HP ({self.potions} restantes)")
        else:
            print("❌ Plus de potions !")

    def statut(self):
        barre = "█" * (self.hp * 20 // self.hp_max)
        vide = "░" * (20 - len(barre))
        print(f"  {self.nom}: [{barre}{vide}] {self.hp}/{self.hp_max} HP")

# --- Création ---
print("🎮 === MINI RPG TERMINAL === 🎮\n")
nom = input("Ton nom de guerrier : ")
hero = Combattant(nom, hp=100, attaque=15)

monstres = [
    Combattant("Goblin", hp=40, attaque=8),
    Combattant("Squelette", hp=60, attaque=12),
    Combattant("Dragon", hp=120, attaque=20),
]

for monstre in monstres:
    print(f"\n🐉 Un {monstre.nom} apparaît !")
    while hero.est_vivant() and monstre.est_vivant():
        print("\n--- Statut ---")
        hero.statut()
        monstre.statut()
        print(f"\n[1] ⚔️  Attaquer  [2] 🧪 Potion ({hero.potions})")

        choix = input("→ ")
        if choix == "1":
            hero.frapper(monstre)
        elif choix == "2":
            hero.boire_potion()
        else:
            print("❓ Choix invalide, tu perds ton tour !")

        if monstre.est_vivant():
            monstre.frapper(hero)

    if not hero.est_vivant():
        print("\n💀 Game Over...")
        break
    else:
        print(f"\n🏆 {monstre.nom} vaincu !")
        hero.potions += 1
        hero.hp = min(hero.hp + 20, hero.hp_max)
        print(f"💊 +1 potion, +20 HP → {hero.hp}/{hero.hp_max} HP")

if hero.est_vivant():
    print(f"\n🎉 VICTOIRE ! {hero.nom} a terrassé tous les monstres !")
🚀

Pour aller plus loin : Ajoute un système de magie (mana + sorts), un magasin entre les combats, ou des types d'armes avec des dégâts différents. C'est TON jeu, modifie-le !

🌦️ Projet : API Météo en temps réel

On va récupérer la météo d'une ville en temps réel avec l'API gratuite OpenWeatherMap. Tu vas apprendre à faire des requêtes HTTP et parser du JSON — des skills essentiels pour un dev.

📋 Préparation

1. Crée un compte gratuit sur openweathermap.org
2. Récupère ta clé API (onglet "API keys")
3. Installe la librairie requests :

$ pip install requests

🔧 Le code

import requests

API_KEY = "ta_cle_api_ici"  # ← Remplace !
BASE_URL = "https://api.openweathermap.org/data/2.5/weather"

def meteo(ville):
    """Récupère la météo d'une ville."""
    params = {
        "q": ville,
        "appid": API_KEY,
        "units": "metric",      # Celsius
        "lang": "fr"            # Description en français
    }

    reponse = requests.get(BASE_URL, params=params)

    if reponse.status_code != 200:
        print(f"❌ Erreur : ville '{ville}' introuvable")
        return

    data = reponse.json()

    # Extraire les infos utiles
    nom = data["name"]
    temp = data["main"]["temp"]
    ressenti = data["main"]["feels_like"]
    description = data["weather"][0]["description"]
    humidite = data["main"]["humidity"]
    vent = data["wind"]["speed"]

    print(f"\n🌍 Météo à {nom}")
    print(f"🌡️  Température : {temp}°C (ressenti {ressenti}°C)")
    print(f"☁️  Conditions : {description}")
    print(f"💧 Humidité : {humidite}%")
    print(f"💨 Vent : {vent} m/s")

# Lancer
ville = input("🏙️  Ville : ")
meteo(ville)
🔑

Important : Ne partage jamais ta clé API publiquement (sur GitHub par exemple). En vrai projet, on la met dans un fichier .env et on utilise python-dotenv pour la charger.

📊 Comprendre le JSON

L'API renvoie un gros objet JSON. Voici la structure simplifiée :

# reponse.json() donne un dict Python : { "name": "Paris", "main": { "temp": 18.5, "feels_like": 17.2, "humidity": 65 }, "weather": [{"description": "nuageux"}], "wind": {"speed": 3.5} } # C'est un dict imbriqué : data["main"]["temp"] → 18.5

🤖 Projet : Bot Discord

Crée un bot qui répond à des commandes sur ton serveur Discord. C'est le projet le plus cool pour impressionner tes potes.

📋 Setup

1. Va sur Discord Developer Portal
2. Crée une application → Bot → copie le Token
3. Invite le bot sur ton serveur (OAuth2 → URL Generator → scope: bot, permissions: Send Messages)
4. Installe discord.py :

$ pip install discord.py

🔧 Le code du bot

import discord
from discord.ext import commands
import random

# Crée le bot avec un préfixe de commande
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
    """Quand le bot se connecte."""
    print(f"✅ Connecté en tant que {bot.user}")

@bot.command()
async def ping(ctx):
    """Répond pong avec la latence."""
    latence = round(bot.latency * 1000)
    await ctx.send(f"🏓 Pong ! Latence : {latence}ms")

@bot.command()
async def roll(ctx, faces: int = 6):
    """Lance un dé."""
    resultat = random.randint(1, faces)
    await ctx.send(f"🎲 Tu as lancé un d{faces} → **{resultat}**")

@bot.command()
async def say(ctx, *, message):
    """Le bot répète ton message."""
    await ctx.message.delete()
    await ctx.send(message)

@bot.command()
async def meteo_fake(ctx, ville: str = "Paris"):
    """Météo bidon (pour s'entraîner)."""
    temp = random.randint(-5, 35)
    conditions = random.choice(["☀️ Soleil", "🌧️ Pluie", "⛈️ Orage", "❄️ Neige", "🌤️ Nuageux"])
    await ctx.send(f"🌍 **Météo à {ville}**\n🌡️ {temp}°C — {conditions}")

# Lance le bot (remplace TON_TOKEN)
bot.run("TON_TOKEN_ICI")
⚠️

Sécurité : Ton token Discord est comme un mot de passe. Ne le mets JAMAIS dans du code partagé. Utilise une variable d'environnement : import os; bot.run(os.getenv("DISCORD_TOKEN"))

💡

Combine tes projets ! Ajoute la vraie API météo (projet précédent) à ton bot Discord. Quand quelqu'un tape !meteo Paris, le bot appelle l'API et renvoie la vraie météo. Un vrai projet full-stack !

🚀 Aller plus loin

Tu maîtrises les bases et tu as 3 projets qui tournent. Voici les prochaines étapes pour monter en level :

🎮

Pygame — Jeux 2D

Crée de vrais jeux avec des graphismes : sprites, collisions, sons, niveaux. pip install pygame et c'est parti. Commence par un Space Invaders ou un Flappy Bird.

Jeux
🌐

Flask — Sites web

Construis ton propre site avec un backend Python. API REST, pages dynamiques, base de données. pip install flask — en 10 lignes t'as un serveur web.

Web
📊

pandas — Data Science

Analyse des données comme un pro. Charge des fichiers CSV, fais des graphiques, trouve des tendances. C'est ce que font les data scientists chez Netflix ou Spotify.

Data
🧠

Machine Learning

Entraîne un modèle à reconnaître des images, prédire des prix, ou jouer à un jeu. scikit-learn pour débuter, puis PyTorch pour le deep learning. C'est le futur.

IA

📚 Ressources recommandées

# Sites pour pratiquer "https://www.codingame.com" # Coding challenges gamifiés "https://exercism.org/python" # Exercices avec mentoring "https://projecteuler.net" # Maths + Programmation "https://realpython.com" # Tutos avancés (anglais) # Chaînes YouTube FR "Graven" # Tutos Python clairs "Docstring" # Python avancé en français
🎯

Le secret pour progresser : Code tous les jours, même 20 minutes. Construis des trucs qui t'intéressent. Lis du code d'autres devs sur GitHub. Et quand tu bloques — Google, Stack Overflow, et ChatGPT sont tes meilleurs amis.

← Retour au Labo Tech