Skip to content

Formatage de chaînes en Python

Le formatage de chaînes est une technique essentielle en Python qui permet d’insérer des valeurs dynamiques dans du texte. Python offre plusieurs méthodes pour formater des chaînes, chacune avec ses avantages et cas d’usage.

La méthode .format() est une approche classique introduite dans Python 2.6. Elle utilise des accolades {} comme espaces réservés.

nom = "Riyad"
age = 21
message = "Je m'appelle {} et j'ai {} ans".format(nom, age)
print(message)
# Sortie : Je m'appelle Riyad et j'ai 21 ans
valeur = 123.456
message = "La valeur est {:.2f}".format(valeur)
print(message)
# Sortie : La valeur est 123.46

Explication du format :.2f :

  • : indique le début des spécifications de format
  • .2 définit le nombre de décimales
  • f spécifie le type float (nombre à virgule flottante)

Avantages :

  • Compatible avec Python 2.6+
  • Syntaxe claire et explicite
  • Supporte les arguments positionnels et nommés

Inconvénients :

  • Syntaxe plus verbeuse que les f-strings
  • Moins lisible pour les expressions complexes

L’opérateur % est l’ancienne méthode de formatage héritée du langage C. Bien que toujours supportée, elle est considérée comme obsolète.

nom = "Riyad"
age = 21
message = "Je m'appelle %s et j'ai %d ans" % (nom, age)
print(message)
# Sortie : Je m'appelle Riyad et j'ai 21 ans
  • %s : chaîne de caractères (string)
  • %d : entier (digit)
  • %f : nombre à virgule flottante (float)
  • %x : hexadécimal

Note : Cette méthode est déconseillée pour les nouveaux projets. Privilégiez les f-strings ou .format().

Les f-strings, introduites dans Python 3.6, sont la méthode moderne et recommandée pour le formatage de chaînes.

nom = "Riyad"
age = 21
message = f"Je m'appelle {nom} et j'ai {age} ans"
print(message)
# Sortie : Je m'appelle Riyad et j'ai 21 ans

Les f-strings permettent d’évaluer des expressions directement :

largeur = 5
hauteur = 10
message = f"L'aire du rectangle est {largeur * hauteur}"
print(message)
# Sortie : L'aire du rectangle est 50

Vous pouvez appeler des méthodes et fonctions directement dans les f-strings :

nom = "Riyad"
message = f"Bonjour {nom.upper()}"
print(message)
# Sortie : Bonjour RIYAD

Les f-strings gèrent automatiquement la conversion de types :

age = 21
message = f"J'ai {age} ans"
print(message)
# Sortie : J'ai 21 ans
pi = 3.14159
message = f"Le nombre pi arrondi à deux décimales est {pi:.2f}"
print(message)
# Sortie : Le nombre pi arrondi à deux décimales est 3.14
nombre = 1234567890
message = f"Le nombre avec des séparateurs de milliers est {nombre:,}"
print(message)
# Sortie : Le nombre avec des séparateurs de milliers est 1,234,567,890
numero = 52
message = f"Le numéro avec zéros de remplissage est {numero:04}"
print(message)
# Sortie : Le numéro avec zéros de remplissage est 0052

Explication : 04 signifie une largeur minimale de 4 caractères, remplie avec des zéros à gauche.

proportion = 0.855
message = f"Le pourcentage est {proportion:.1%}"
print(message)
# Sortie : Le pourcentage est 85.5%

Explication : Le spécificateur % multiplie la valeur par 100 et ajoute le symbole %.

for i in range(1, 6):
message = f"Le nombre est : {i:>10}"
print(message)
# Sortie :
# Le nombre est : 1
# Le nombre est : 2
# Le nombre est : 3
# Le nombre est : 4
# Le nombre est : 5

Options d’alignement :

  • < : alignement à gauche
  • > : alignement à droite
  • ^ : centré
from datetime import datetime
maintenant = datetime.now()
print(maintenant)
# Sortie : 2025-01-15 14:30:45.123456 (exemple)
message = f"Nous sommes le {maintenant:%d/%m/%Y}"
print(message)
# Sortie : Nous sommes le 15/01/2025
message = f"La date et l'heure actuelles sont {maintenant:%d/%m/%Y %H:%M:%S}"
print(message)
# Sortie : La date et l'heure actuelles sont 15/01/2025 14:30:45
message = f"Aujourd'hui, c'est {maintenant:%A %d %B %Y}"
print(message)
# Sortie : Aujourd'hui, c'est lundi 15 janvier 2025

Directives courantes :

  • %d : jour du mois (01-31)
  • %m : mois en nombre (01-12)
  • %Y : année complète (2025)
  • %H : heure (00-23)
  • %M : minutes (00-59)
  • %S : secondes (00-59)
  • %A : nom complet du jour
  • %B : nom complet du mois
from datetime import timedelta
dans_une_semaine = maintenant + timedelta(days=7)
message = f"Dans une semaine, nous serons le {dans_une_semaine:%A %d %B %Y}"
print(message)
# Sortie : Dans une semaine, nous serons le lundi 22 janvier 2025
from datetime import timezone
utc = maintenant.astimezone(timezone.utc)
message = f"L'heure actuelle en UTC est {utc:%Y-%m-%d %H:%M:%S %Z}"
print(message)
# Sortie : L'heure actuelle en UTC est 2025-01-15 13:30:45 UTC
MéthodePythonLisibilitéPerformanceRecommandation
%2.x+FaibleBonne❌ Obsolète
.format()2.6+MoyenneBonne⚠️ Acceptable
f-strings3.6+ExcellenteExcellente✅ Recommandée
  • Lisibilité : Le code est plus clair et plus proche du langage naturel
  • Performance : Plus rapides à l’exécution que les autres méthodes
  • Expressivité : Permettent d’évaluer des expressions complexes directement
  • Concision : Syntaxe plus courte et intuitive
  • Débogage : Facilite l’identification des variables utilisées
  • Compatibilité : Nécessitent Python 3.6 ou supérieur
  • Chaînes dynamiques : Ne peuvent pas être utilisées pour des templates chargés depuis des fichiers ou bases de données
  • Traduction : Plus difficiles à internationaliser (i18n) comparées aux templates .format()

9. Compatibilité avec les versions antérieures

Section titled “9. Compatibilité avec les versions antérieures”

Si vous devez supporter Python < 3.6, utilisez .format() :

# Au lieu de :
message = f"Bonjour {nom}, vous avez {age} ans"
# Utilisez :
message = "Bonjour {}, vous avez {} ans".format(nom, age)
# Ou avec des noms :
message = "Bonjour {nom}, vous avez {age} ans".format(nom=nom, age=age)

Cette évaluation rapide (3 minutes) va vous permettre de vérifier votre compréhension du sujet traité dans ce guide.

Instructions :

  • 🕒 Temps limité : 3 minutes
  • 🎯 Seuil de réussite : 80%
  • 💡 Les réponses seront expliquées à la fin

À vous de jouer ! 🚀



Exercice 1 : Présentation personnelle

Énoncé : Créez des variables pour votre nom, âge et ville, puis utilisez une f-string pour créer une phrase de présentation.

Exemple d’exécution :

nom = "Riyad"
age = 21
ville = "Cotonou"
# Créer un message avec ces informations
Voir la solution
nom = "Riyad"
age = 21
ville = "Cotonou"
message = f"Je m'appelle {nom}, j'ai {age} ans et j'habite à {ville}."
print(message)

Résultat attendu :

Je m'appelle Riyad, j'ai 21 ans et j'habite à Cotonou.

Exercice 2 : Calcul dans une f-string

Énoncé : Créez des variables pour le prix unitaire et la quantité d’un produit. Utilisez une f-string pour afficher le prix total (avec calcul directement dans la f-string).

Exemple d’exécution :

prix_unitaire = 15.99
quantite = 3
# Afficher le prix total
Voir la solution
prix_unitaire = 15.99
quantite = 3
message = f"Prix total : {prix_unitaire * quantite}€"
print(message)
# Avec formatage à 2 décimales
message = f"Prix total : {prix_unitaire * quantite:.2f}€"
print(message)

Résultat attendu :

Prix total : 47.97€
Prix total : 47.97€

Exercice 3 : Formatage de nombres décimaux

Énoncé : Créez une variable contenant le nombre pi (3.14159265359). Affichez-le avec 2, 4 et 6 décimales en utilisant des f-strings.

Voir la solution
pi = 3.14159265359
print(f"Pi avec 2 décimales : {pi:.2f}")
print(f"Pi avec 4 décimales : {pi:.4f}")
print(f"Pi avec 6 décimales : {pi:.6f}")

Résultat attendu :

Pi avec 2 décimales : 3.14
Pi avec 4 décimales : 3.1416
Pi avec 6 décimales : 3.141593

Exercice 4 : Séparateurs de milliers

Énoncé : Affichez un grand nombre (par exemple 1234567890) avec des séparateurs de milliers en utilisant une f-string.

Voir la solution
nombre = 1234567890
print(f"Nombre formaté : {nombre:,}")
# Avec des décimales
prix = 1234567.89
print(f"Prix : {prix:,.2f}€")

Résultat attendu :

Nombre formaté : 1,234,567,890
Prix : 1,234,567.89€

Exercice 5 : Zéros de remplissage

Énoncé : Créez un programme qui affiche des numéros de 1 à 10 avec des zéros de remplissage pour avoir toujours 3 chiffres (001, 002, …, 010).

Voir la solution
for i in range(1, 11):
print(f"Numéro : {i:03}")

Résultat attendu :

Numéro : 001
Numéro : 002
Numéro : 003
Numéro : 004
Numéro : 005
Numéro : 006
Numéro : 007
Numéro : 008
Numéro : 009
Numéro : 010

Exercice 6 : Pourcentages

Énoncé : Calculez et affichez le taux de réussite d’un examen. Sur 150 étudiants, 127 ont réussi. Affichez le pourcentage avec 1 décimale.

Voir la solution
reussis = 127
total = 150
taux = reussis / total
print(f"Taux de réussite : {taux:.1%}")

Résultat attendu :

Taux de réussite : 84.7%

Exercice 7 : Alignement de texte

Énoncé : Créez un tableau de produits avec leurs prix alignés. Utilisez l’alignement à gauche pour les noms (largeur 20) et à droite pour les prix (largeur 10).

Voir la solution
produits = [
("Pommes", 2.50),
("Bananes", 1.80),
("Oranges", 3.20),
("Fraises", 4.50)
]
print(f"{'Produit':<20} {'Prix':>10}")
print("-" * 30)
for nom, prix in produits:
print(f"{nom:<20} {prix:>10.2f}€")

Résultat attendu :

Produit Prix
------------------------------
Pommes 2.50€
Bananes 1.80€
Oranges 3.20€
Fraises 4.50€

Exercice 8 : Formatage de dates

Énoncé : Créez un programme qui affiche la date actuelle dans différents formats :

  • Format court : JJ/MM/AAAA
  • Format long : Jour Mois Année
  • Format avec heure : JJ/MM/AAAA HH:MM:SS
Voir la solution
from datetime import datetime
maintenant = datetime.now()
print(f"Format court : {maintenant:%d/%m/%Y}")
print(f"Format long : {maintenant:%A %d %B %Y}")
print(f"Avec heure : {maintenant:%d/%m/%Y %H:%M:%S}")

Résultat attendu :

Format court : 31/12/2025
Format long : mercredi 31 décembre 2025
Avec heure : 31/12/2025 21:30:45

Exercice 9 : Méthodes de chaînes dans f-strings

Énoncé : Créez une variable avec un nom en minuscules. Utilisez des f-strings pour afficher ce nom en majuscules, en titre (première lettre en majuscule) et en comptant le nombre de caractères.

Voir la solution
nom = "riyad kouadio"
print(f"Majuscules : {nom.upper()}")
print(f"Titre : {nom.title()}")
print(f"Nombre de caractères : {len(nom)}")
print(f"Sans espaces : {nom.replace(' ', '')}")

Résultat attendu :

Majuscules : RIYAD KOUADIO
Titre : Riyad Kouadio
Nombre de caractères : 13
Sans espaces : riyadkouadio

Exercice 10 : Facture formatée

Énoncé : Créez un programme qui génère une facture formatée pour 3 articles avec leur nom, quantité, prix unitaire et prix total.

Voir la solution
articles = [
("Clavier", 2, 25.99),
("Souris", 3, 15.50),
("Écran", 1, 299.99)
]
print("=" * 60)
print(f"{'FACTURE':^60}")
print("=" * 60)
print(f"{'Article':<20} {'Qté':>5} {'P.U.':>10} {'Total':>15}")
print("-" * 60)
total_general = 0
for nom, qte, prix in articles:
total = qte * prix
total_general += total
print(f"{nom:<20} {qte:>5} {prix:>10.2f}{total:>14.2f}€")
print("-" * 60)
print(f"{'TOTAL':>51} {total_general:>14.2f}€")
print("=" * 60)

Résultat attendu :

============================================================
FACTURE
============================================================
Article Qté P.U. Total
------------------------------------------------------------
Clavier 2 25.99€ 51.98€
Souris 3 15.50€ 46.50€
Écran 1 299.99€ 299.99€
------------------------------------------------------------
TOTAL 398.47€
============================================================

Exercice 11 : Conversion avec format()

Énoncé : Reprenez l’exercice 1 mais utilisez la méthode .format() au lieu des f-strings.

Voir la solution
nom = "Riyad"
age = 21
ville = "Cotonou"
# Avec positions
message = "Je m'appelle {}, j'ai {} ans et j'habite à {}.".format(nom, age, ville)
print(message)
# Avec noms
message = "Je m'appelle {n}, j'ai {a} ans et j'habite à {v}.".format(n=nom, a=age, v=ville)
print(message)
# Avec indices
message = "Je m'appelle {0}, j'ai {1} ans et j'habite à {2}.".format(nom, age, ville)
print(message)

Résultat attendu :

Je m'appelle Riyad, j'ai 21 ans et j'habite à Cotonou.
Je m'appelle Riyad, j'ai 21 ans et j'habite à Cotonou.
Je m'appelle Riyad, j'ai 21 ans et j'habite à Cotonou.

Exercice 12 : Tableau de multiplication

Énoncé : Créez un programme qui affiche un tableau de multiplication de 1 à 10 pour un nombre donné, bien formaté avec alignement.

Voir la solution
nombre = 7
print(f"Table de multiplication de {nombre}")
print("=" * 25)
for i in range(1, 11):
resultat = nombre * i
print(f"{nombre:>3} × {i:<2} = {resultat:>3}")

Résultat attendu :

Table de multiplication de 7
=========================
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70

Les f-strings sont la méthode moderne et recommandée pour le formatage de chaînes en Python. Elles offrent une syntaxe claire, des performances optimales et une grande flexibilité. Pour les nouveaux projets utilisant Python 3.6+, privilégiez toujours les f-strings, sauf cas spécifiques nécessitant des templates dynamiques.


  1. F-strings (Python 3.6+) : La méthode recommandée

    • Syntaxe : f"texte {variable}"
    • Permet d’évaluer des expressions
    • Meilleure performance et lisibilité
  2. Méthode .format() (Python 2.6+) : Alternative acceptable

    • Syntaxe : "texte {}".format(variable)
    • Compatible avec les versions plus anciennes
    • Bonne pour les templates dynamiques
  3. Opérateur % (Python 2.x+) : Obsolète

    • Syntaxe : "texte %s" % variable
    • Déconseillé pour les nouveaux projets
BesoinFormatExemple
Décimales:.2f{3.14159:.2f} → 3.14
Séparateurs:,{1234567:,} → 1,234,567
Zéros:04{42:04} → 0042
Pourcentage:.1%{0.855:.1%} → 85.5%
Alignement gauche:<10{'test':<10} → “test “
Alignement droite:>10{'test':>10} → ” test”
Centré:^10{'test':^10} → ” test “
DirectiveSignificationExemple
%dJour (01-31)15
%mMois (01-12)01
%YAnnée complète2025
%HHeure (00-23)14
%MMinutes (00-59)30
%SSecondes (00-59)45
%AJour completLundi
%BMois completJanvier



À propos de l'auteur

Riyad ODJOUADEExpert en cybersécurité & infrastructure

Je partage des guides techniques pratiques sur la cybersécurité, l'administration système et le développement web. Tous les contenus sont basés sur des expérimentations réelles.