Python est un langage de programmation interprété, haut niveau et généraliste. Créé par Guido van Rossum en 1991, il est particulièrement apprécié pour sa syntaxe claire et sa lisibilité.
Traditionnellement, le premier programme affiche "Hello World!". En Python, cela s'écrit simplement :
print("Hello World!")
Pour exécuter un script Python,
enregistrez votre code dans un fichier
avec l'extension .py puis
lancez python
nom_du_fichier.py dans votre
terminal.
Python est généralement préinstallé. Vous pouvez vérifier la version avec :
python3 --version
Si besoin, installez avec votre gestionnaire de paquets :
# macOS avec Homebrew
brew install python
# Debian/Ubuntu
sudo apt update && sudo apt install python3
Il est recommandé d'utiliser des environnements virtuels pour isoler vos projets :
# Créer un environnement
python -m venv mon_env
# Activer (Windows)
mon_env\Scripts\activate
# Activer (macOS/Linux)
source mon_env/bin/activate
Si vous ne souhaitez rien installer, utilisez Replit pour coder directement dans votre navigateur : Replit – Python 3
En Python, les variables sont créées lorsqu'on leur assigne une valeur. Pas besoin de déclarer le type explicitement.
# Déclaration de variables
nom = "Valentin"
age = 23
taille = 1.70
est_etudiant = True
Les noms de variables peuvent contenir
des lettres, chiffres et underscores,
mais ne peuvent pas commencer par un
chiffre. Python est sensible à la casse
(age et Age
sont différentes).
| Type | Description | Exemple |
|---|---|---|
| int | Nombre entier | 42 |
| float | Nombre à virgule flottante | 3.14 |
| str | Chaîne de caractères | "Bonjour" |
| bool | Booléen (True/False) | True |
| NoneType | Absence de valeur | None |
Vous pouvez convertir entre différents
types avec les fonctions int(),
float(), str(), etc.
# Conversion de types
nombre = "123"
nombre_entier = int(nombre) # Convertit en entier
nombre_flottant = float(nombre) # Convertit en flottant
texte = str(42) # Convertit en chaîne de caractères
Attention aux conversions impossibles !
int("abc") provoquera une
erreur. Vous apprendrez à gérer ces
erreurs plus tard dans le cours.
La fonction input() permet
de récupérer une entrée utilisateur. Elle retourne
toujours une chaîne de caractères.
# Demander le nom de l'utilisateur
nom = input("Quel est votre nom ? ")
print(f"Bonjour, {nom} !")
# Demander un nombre (nécessite une conversion)
age = int(input("Quel est votre age ? ")
print(f"L'année prochaine vous aurez {age + 1} ans.")
Créez un programme qui demande deux nombres à l'utilisateur et affiche leur somme.
# Solution
nombre1 = float(input("Entrez le premier nombre : "))
nombre2 = float(input("Entrez le deuxième nombre : "))
somme = nombre1 + nombre2
print(f"La somme est {somme}")
Python supporte les opérations mathématiques de base :
| Opérateur | Description | Exemple |
|---|---|---|
| + | Addition | 5
+ 3 → 8
|
| - | Soustraction | 5
- 3 → 2
|
| * | Multiplication | 5
* 3 → 15
|
| / | Division | 5
/ 2 → 2.5
|
| // | Division entière | 5
// 2 → 2
|
| % | Modulo (reste) | 5
% 2 → 1
|
| ** | Exponentiation | 5
** 2 → 25
|
Les opérations sont évaluées selon cet ordre de priorité :
() Parenthèses** Exponentiation*, /, //,
%
+, -# Exemple de priorité
resultat = 5 + 3 * 2 # → 11 (pas 16)
resultat = (5 + 3) * 2 # → 16
Ces opérateurs retournent
True or False :
| Opérateur | Description | Exemple |
|---|---|---|
| == | Égal à | 5
== 5 → True
|
| != | Différent de | 5
!= 3 → True
|
| > | Plus grand que | 5
> 3 → True
|
| < | Plus petit que | 5
< 3 → False
|
| >= | Plus grand ou égal | 5
>= 5 → True
|
| <= | Plus petit ou égal | 5
<= 3 → False
|
# Exemples de comparaison
age = 18
majeur = age >= 18 # → True
print(majeur)
Permettent de combiner plusieurs conditions :
| Opérateur | Description | Exemple |
|---|---|---|
| and | ET logique | True
and False → False
|
| or | OU logique | True
or False → True
|
| not | NON logique | not
True → False
|
# Exemples d'opérateurs logiques
age = 20
permis = True
if age >= 18 and permis:
print("Vous pouvez conduire")
else:
print("Vous ne pouvez pas conduire")
Écrivez un programme qui demande l'âge et le salaire d'une personne, puis affiche "Éligible" si la personne a plus de 25 ans et gagne plus de 30000€, sinon affiche "Non éligible".
# Solution
age = int(input("Quel est votre âge ? "))
salaire = float(input("Quel est votre salaire annuel ? "))
if age > 25 and salaire > 30000:
print("Éligible")
else:
print("Non éligible")
La structure if permet
d'exécuter un bloc de code seulement si une
condition est vraie.
# Syntaxe de base
if condition:
# Code à exécuter si condition est True
print("La condition est vraie")
# Exemple pratique
age = 20
if age >= 18:
print("Vous êtes majeur")
En Python, l'indentation est cruciale.
Le bloc de code qui suit le
if doit être indenté
(généralement de 4 espaces). Cette
indentation définit la portée du bloc
conditionnel.
L'instruction else permet
d'exécuter un bloc alternatif si la condition est
fausse.
# Syntaxe if...else
if condition:
# Code si condition vraie
else:
# Code si condition fausse
# Exemple pratique
age = 16
if age >= 18:
print("Vous êtes majeur")
else:
print("Vous êtes mineur")
Pour tester plusieurs conditions, on
utilise elif (contraction de
"else if").
# Syntaxe if...elif...else
if condition1:
# Code si condition1 vraie
elif condition2:
# Code si condition2 vraie
else:
# Code si aucune condition vraie
# Exemple pratique
note = 14
if note >= 16:
print("Très bien")
elif note >= 14:
print("Bien")
elif note >= 12:
print("Assez bien")
else:
print("Insuffisant")
Les conditions sont évaluées dans l'ordre. Dès qu'une condition est vraie, son bloc est exécuté et les autres conditions sont ignorées. L'ordre des tests est donc important.
Il est possible d'imbriquer des conditions à l'intérieur d'autres conditions.
# Exemple de conditions imbriquées
age = 20
permis = True
if age >= 18:
if permis:
print("Vous pouvez conduire")
else:
print("Vous avez l'âge mais pas le permis")
else:
print("Vous êtes trop jeune")
Attention à l'indentation dans les conditions imbriquées ! Chaque niveau d'imbrication nécessite une indentation supplémentaire.
Python permet une syntaxe condensée pour les conditions simples :
# Syntaxe de l'opérateur ternaire
valeur = valeur_si_vrai if condition else valeur_si_faux
# Exemple pratique
age = 20
statut = "majeur" if age >= 18 else "mineur"
print(statut) # Affiche "majeur"
Écrivez un programme qui demande un nombre à l'utilisateur et affiche :
# Solution
nombre = float(input("Entrez un nombre : "))
if nombre > 0:
print("Positif")
elif nombre < 0:
print("Négatif")
else:
print("Zéro")
La boucle while répète un
bloc de code tant qu'une condition est vraie.
# Syntaxe de while
while condition:
# Code à répéter
print("La condition est vraie")
# Exemple pratique - compte à rebours
compteur = 5
while compteur > 0:
print(compteur)
compteur -= 1 # équivalent à compteur = compteur - 1
print("Décollage !")
Attention aux boucles infinies ! Si la condition ne devient jamais fausse, la boucle ne s'arrêtera jamais. Assurez-vous que la condition finira par être fausse.
La boucle for permet
d'itérer sur une séquence (liste, chaîne de
caractères, etc.).
# Syntaxe de for
for element in sequence:
# Code à exécuter pour chaque élément
print(element)
# Exemple pratique - itération sur une liste
fruits = ["pomme", "banane", "orange"]
for fruit in fruits:
print(fruit)
# Exemple pratique - itération sur une chaîne
mot = "Python"
for lettre in mot:
print(lettre)
range() génère une séquence
de nombres, utile pour les boucles.
# Syntaxe de range
range(début, fin, pas) # fin est exclue
# Exemples
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
for i in range(0, 10, 2): # 0, 2, 4, 6, 8
print(i)
Interrompt complètement la boucle.
# Exemple de break
for i in range(10):
if i == 5:
break
print(i) # Affiche 0, 1, 2, 3, 4
Passe à l'itération suivante de la boucle.
# Exemple de continue
for i in range(5):
if i == 2:
continue
print(i) # Affiche 0, 1, 3, 4
Il est possible d'imbriquer des boucles à l'intérieur d'autres boucles.
# Exemple de boucles imbriquées
for i in range(3): # Boucle externe
for j in range(2): # Boucle interne
print(f"i={i}, j={j}")
# Table de multiplication
for i in range(1, 11):
for j in range(1, 11):
print(f"{i} x {j} = {i*j}")
print() # Ligne vide entre les tables
En Python, on peut utiliser
else avec les boucles. Le bloc
else is exécuté si la boucle se termine
normalement (sans break).
# Exemple de else avec for
for i in range(5):
print(i)
else:
print("Boucle terminée normalement")
# Exemple avec break
for i in range(5):
if i == 3:
break
print(i)
else:
print("Ce message ne s'affichera pas")
Écrivez un programme qui :
Un nombre premier est un nombre divisible uniquement par 1 et par lui-même.
# Solution
nombre = int(input("Entrez un nombre entier positif : "))
print(f"Nombres premiers inférieurs à {nombre}:")
for n in range(2, nombre):
est_premier = True
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
est_premier = False
break
if est_premier:
print(n, end=" ")
Une fonction est un bloc de code réutilisable qui effectue une tâche spécifique.
# Syntaxe de base
def nom_de_la_fonction(paramètres):
"""Docstring (description de la fonction)"""
# Corps de la fonction
return résultat # Optionnel
# Exemple simple
def saluer(nom):
"""Affiche un message de salutation"""
print(f"Bonjour, {nom} !")
# Appel de la fonction
saluer("Valentin") # Affiche "Bonjour, Valentin !"
Les docstrings (entre triples
guillemets) sont des descriptions des
fonctions. Elles sont accessibles avec
help(nom_de_la_fonction) et
sont essentielles pour documenter votre
code.
Une fonction peut retourner une valeur
avec return. Si aucun
return n'est spécifié, la fonction
retourne None.
# Fonction avec retour
def carre(x):
"""Retourne le carré d'un nombre"""
return x ** 2
resultat = carre(4) # resultat = 16
# Fonction sans return explicite
def afficher_carre(x):
"""Affiche le carré d'un nombre"""
print(x ** 2)
resultat = afficher_carre(4) # Affiche 16, resultat = None
# Retour multiple
def operations(x, y):
"""Retourne plusieurs résultats"""
return x + y, x - y, x * y, x / y
somme, difference, produit, quotient = operations(10, 2)
Les arguments sont assignés aux paramètres dans l'ordre.
def soustraire(a, b):
return a - b
resultat = soustraire(5, 3) # a=5, b=3 → 2
Permettent de spécifier les arguments par nom, indépendamment de l'ordre.
resultat = soustraire(b=3, a=5) # Même résultat que précédemment
Les paramètres peuvent avoir des valeurs par défaut.
def saluer(nom, message="Bonjour"):
print(f"{message}, {nom} !")
saluer("Valentin") # "Bonjour, Valentin !"
saluer("Bob", "Salut") # "Salut, Bob !"
Les paramètres sans valeur par défaut doivent toujours précéder ceux avec valeur par défaut dans la définition de la fonction.
Les variables définies dans une fonction
sont locales à cette fonction. Pour modifier une
variable globale, utilisez le mot-clé
global.
# Variable globale
compteur = 0
def incrementer():
global compteur # Référence à la variable globale
compteur += 1
incrementer()
print(compteur) # 1
# Variable locale
def test():
variable_locale = 10
print(variable_locale)
test()
print(variable_locale) # Erreur: variable_locale n'est pas définie
Les fonctions lambda sont des petites
fonctions anonymes définies avec le mot-clé
lambda.
# Syntaxe
lambda arguments: expression
# Exemple
carre = lambda x: x ** 2
print(carre(4)) # 16
# Utilisation courante avec map()
nombres = [1, 2, 3, 4]
carres = list(map(lambda x: x**2, nombres)) # [1, 4, 9, 16]
Écrivez une fonction
calculatrice qui :
None
# Solution
def calculatrice(a, b, operation):
"""Effectue une opération de base sur deux nombres"""
if operation == '+':
return a + b
elif operation == '-':
return a - b
elif operation == '*':
return a * b
elif operation == '/':
if b == 0:
return None
return a / b
else:
return None
# Exemples d'utilisation
print(calculatrice(10, 5, '+')) # 15
print(calculatrice(10, 0, '/')) # None
Créez un programme qui demande deux nombres et une opération (+, -, *, /) à l'utilisateur, puis affiche le résultat.
input() pour demander
les nombres et l'opération
# Solution
nombre1 = float(input("Entrez le premier nombre : "))
nombre2 = float(input("Entrez le deuxième nombre : "))
operation = input("Entrez l'opération (+, -, *, /) : ")
if operation == '+':
resultat = nombre1 + nombre2
elif operation == '-':
resultat = nombre1 - nombre2
elif operation == '*':
resultat = nombre1 * nombre2
elif operation == '/':
if nombre2 == 0:
print("Erreur : division par zéro")
resultat = None
else:
resultat = nombre1 / nombre2
else:
print("Opération non reconnue")
resultat = None
if resultat is not None:
print(f"Résultat : {resultat}")
Créez un jeu où l'ordinateur choisit un nombre aléatoire entre 1 et 100, et l'utilisateur doit le deviner.
import random puis
random.randint(1, 100) pour
générer le nombre aléatoire
# Solution
import random
nombre_a_deviner = random.randint(1, 100)
tentatives = 0
print("J'ai choisi un nombre entre 1 and 100. Devinez lequel !")
while True:
tentative = int(input("Votre proposition : "))
tentatives += 1
if tentative < nombre_a_deviner:
print("Trop petit !")
elif tentative > nombre_a_deviner:
print("Trop grand !")
else:
print(f"Bravo ! Vous avez trouvé en {tentatives} tentatives.")
break
Écrivez un programme qui affiche les nombres de 1 à 100 avec les règles suivantes :
for pour
parcourir les nombres de 1 à 100
# Solution
for i in range(1, 101):
if i % 15 == 0: # Multiple de 3 et 5
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
Créez un programme qui affiche la table de multiplication d'un nombre choisi par l'utilisateur.
# Solution de base
nombre = int(input("Entrez un nombre : "))
print(f"Table de multiplication de {nombre} :")
for i in range(1, 11):
print(f"{nombre} x {i} = {nombre * i}")
# Solution bonus
nombre = int(input("Entrez un nombre : "))
debut = int(input("Début de la table : "))
fin = int(input("Fin de la table : "))
print(f"Table de multiplication de {nombre} ({debut} à {fin}) :")
for i in range(debut, fin + 1):
print(f"{nombre} x {i} = {nombre * i}")
Les listes et les tuples sont des structures de
données fondamentales en Python pour stocker des collections d'éléments.
La principale différence est que les listes sont modifiables (mutables) tandis
que les tuples sont immuables. Choisissez un tuple lorsque vos données ne doivent pas
changer.
[élément1, élément2, ...](élément1, élément2, ...)dict# Création d'une liste
fruits = ["pomme", "banane", "cerise"]
# Accès par index (0-based)
print(fruits[0]) # 'pomme'
print(fruits[-1]) # 'cerise' (dernier élément)
Extraire un sous-ensemble :
# Syntaxe : liste[début:fin:pas]
print(fruits[0:2]) # ['pomme', 'banane']
print(fruits[::2]) # ['pomme', 'cerise'] (tous les 2)
append(x) : ajoute x à la fininsert(i, x) : insère x à l'index iremove(x) : supprime la première occurrence de xpop([i]) : retire et renvoie l'élément à l'index i (dernier par
défaut)
sort() et sorted() : trireverse() : inverse l'ordre# Exemple complet
nombres = [3, 1, 4, 1, 5]
nombres.append(9)
nombres.insert(2, 2)
nombres.remove(1)
nombres.sort()
print(nombres) # [1, 2, 3, 4, 5, 9]
Construire une nouvelle liste de façon concise :
# Carrés des nombres de 1 à 5
carres = [x**2 for x in range(1, 6)]
print(carres) # [1, 4, 9, 16, 25]
# Filtrer
pairs = [x for x in range(1, 11) if x % 2 == 0]
print(pairs) # [2, 4, 6, 8, 10]
# Création d'un tuple
coordonnees = (10.0, 20.0)
# Accès
x, y = coordonnees # Unpacking
print(x, y) # 10.0 20.0
dicta, b = b, a# Exemple : fonction retournant plusieurs valeurs
def operations(a, b):
return a+b, a-b, a*b, (a/b if b else None)
somme, diff, prod, quot = operations(8, 2)
print(somme, diff, prod, quot) # 10 6 16 4.0
Écrivez un programme qui :
# Solution
data = input("Entrez des nombres séparés par des espaces: ")
nombres = list(map(int, data.split()))
carres_pairs = [x**2 for x in nombres if x % 2 == 0]
print(f"Carrés pairs: {carres_pairs}")
Un dictionnaire est une collection non ordonnée de paires clé → valeur.
# Création
mon_dict = {
"nom": "Valentin",
"age": 23,
"skills": ["Python", "C"]
}
# Accès sécurisé
print(mon_dict["nom"]) # Valentin
print(mon_dict.get("age")) # 23
print(mon_dict.get("ville", "Inconnue")) # Inconnue
Préférez get() pour éviter l'exception KeyError si la clé
n'existe pas.
# Ajout ou mise à jour
mon_dict["ville"] = "Paris" # ajout
mon_dict["age"] = 26 # mise à jour
# Suppression
del mon_dict["skills"] # sans retour
ancien_age = mon_dict.pop("age") # récupère et supprime
pop() renvoie la valeur associée à la clé supprimée.
# Parcours complet
for cle, val in mon_dict.items():
print(f"{cle} → {val}")
# Liste des clés et des valeurs
cles = list(mon_dict.keys())
vals = list(mon_dict.values())
# Fusion (Python 3.9+)
d2 = {"pays": "France"}
fusion = mon_dict | d2
La fusion avec | ne modifie pas les originaux ; elle crée un nouveau dict.
Écrivez un programme qui compte la fréquence de chaque mot dans une liste de chaînes, et affiche les 3 mots les plus fréquents.
# Écriture (mode "w" écrase)
with open("notes.txt", "w", encoding="utf-8") as f:
f.write("Ligne 1\nLigne 2\n")
# Lecture complète
with open("notes.txt", "r", encoding="utf-8") as f:
contenu = f.read()
print(contenu)
# Lecture ligne par ligne
with open("notes.txt", "r", encoding="utf-8") as f:
for ligne in f:
print(ligne.strip())
Toujours fermer le fichier (avec with) pour s'assurer que les tampons sont
vidés.
"a" → append : ajoute sans écraser"x" → crée le fichier, échoue s'il existe"b" → mode binaire (ex. "rb", "wb")"+" → lecture et écriture simultanées (ex. "r+")
Écrivez un script qui lit un fichier CSV (séparateur ",") et calcule la moyenne de
la deuxième colonne.
try:
x = int(input("Entrez un entier : "))
y = 10 / x
except ValueError:
print("Ce n'est pas un entier valide.")
except ZeroDivisionError:
print("Division par zéro interdite.")
else:
print("Résultat :", y)
finally:
print("Fin du traitement.")
On peut aussi lever soi-même une exception :
def factorial(n):
if n < 0:
raise ValueError("n doit être ≥ 0")
return 1 if n == 0 else n * factorial(n-1)
import math
from datetime import datetime
print(math.sqrt(16)) # 4.0
print(datetime.now()) # date et heure courantes
Créez un fichier mon_module.py :
# mon_module.py
def saluer(nom):
return f"Bonjour, {nom} !"
Puis dans votre script :
from mon_module import saluer
print(saluer("Valentin"))
# Installer un paquet
pip install requests
# Lister les paquets installés
pip list
# Mettre à jour un paquet
pip install --upgrade requests
Écrivez un programme qui lit un fichier texte et affiche :
Utilisez requests pour interroger
l'API publique JSONPlaceholder
(https://jsonplaceholder.typicode.com/posts)
et afficher les titres des 5 premiers posts.
class Personne:
def __init__(self, nom, age):
self.nom = nom
self.age = age
def se_presenter(self):
return f"Je m'appelle {self.nom} et j'ai {self.age} ans."
# Utilisation
p = Personne("Valentin", 23)
print(p.se_presenter())
class Étudiant(Personne):
def __init__(self, nom, age, ecole):
super().__init__(nom, age)
self.ecole = ecole
def se_presenter(self):
base = super().se_presenter()
return base + f" Je suis à {self.ecole}."
def chronometre(fonction):
import time
def wrapper(*args, **kwargs):
début = time.time()
résultat = fonction(*args, **kwargs)
print("Temps:", time.time() - début)
return résultat
return wrapper
@chronometre
def calcul_lourd(n):
somme = 0
for i in range(n):
somme += i**2
return somme
calcul_lourd(1000000)
from typing import List, Optional
def moyenne(valeurs: List[float]) -> Optional[float]:
if not valeurs:
return None
return sum(valeurs) / len(valeurs)
print(moyenne([1.0, 2.5, 3.5]))
import requests
# GET
r = requests.get("https://api.github.com")
print(r.status_code, r.headers["Content-Type"])
# POST (exemple JSONPlaceholder)
data = {"title": "foo", "body": "bar", "userId": 1}
r2 = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
print(r2.json())
import socket
with socket.socket() as s:
s.bind(("localhost", 5000))
s.listen()
conn, addr = s.accept()
with conn:
print("Connecté par", addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
Créez un serveur qui gère plusieurs clients
simultanément en utilisant
threading.Thread.
Écrivez un générateur qui produit une suite de Fibonacci indéfiniment, puis affichez les 20 premiers termes.