Formatage de chaînes en Python
Formatage de chaînes en Python
Section titled “Formatage de chaînes en Python”Introduction
Section titled “Introduction”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.
1. Méthode .format()
Section titled “1. Méthode .format()”La méthode .format() est une approche classique introduite dans Python 2.6. Elle utilise des accolades {} comme espaces réservés.
Utilisation basique
Section titled “Utilisation basique”nom = "Riyad"age = 21message = "Je m'appelle {} et j'ai {} ans".format(nom, age)print(message)# Sortie : Je m'appelle Riyad et j'ai 21 ansFormatage des nombres
Section titled “Formatage des nombres”valeur = 123.456message = "La valeur est {:.2f}".format(valeur)print(message)# Sortie : La valeur est 123.46Explication du format :.2f :
:indique le début des spécifications de format.2définit le nombre de décimalesfspécifie le type float (nombre à virgule flottante)
Avantages et inconvénients
Section titled “Avantages et inconvénients”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
2. Formatage avec l’opérateur %
Section titled “2. Formatage avec l’opérateur %”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 = 21message = "Je m'appelle %s et j'ai %d ans" % (nom, age)print(message)# Sortie : Je m'appelle Riyad et j'ai 21 ansSpécificateurs de format courants
Section titled “Spécificateurs de format courants”%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().
3. F-strings (Formatted String Literals)
Section titled “3. F-strings (Formatted String Literals)”Les f-strings, introduites dans Python 3.6, sont la méthode moderne et recommandée pour le formatage de chaînes.
Syntaxe de base
Section titled “Syntaxe de base”nom = "Riyad"age = 21message = f"Je m'appelle {nom} et j'ai {age} ans"print(message)# Sortie : Je m'appelle Riyad et j'ai 21 ansExpressions dans les f-strings
Section titled “Expressions dans les f-strings”Les f-strings permettent d’évaluer des expressions directement :
largeur = 5hauteur = 10message = f"L'aire du rectangle est {largeur * hauteur}"print(message)# Sortie : L'aire du rectangle est 50Appels de fonctions
Section titled “Appels de fonctions”Vous pouvez appeler des méthodes et fonctions directement dans les f-strings :
nom = "Riyad"message = f"Bonjour {nom.upper()}"print(message)# Sortie : Bonjour RIYADMélange de types
Section titled “Mélange de types”Les f-strings gèrent automatiquement la conversion de types :
age = 21message = f"J'ai {age} ans"print(message)# Sortie : J'ai 21 ans4. Formatage avancé avec les f-strings
Section titled “4. Formatage avancé avec les f-strings”Nombres décimaux
Section titled “Nombres décimaux”pi = 3.14159message = f"Le nombre pi arrondi à deux décimales est {pi:.2f}"print(message)# Sortie : Le nombre pi arrondi à deux décimales est 3.14Séparateurs de milliers
Section titled “Séparateurs de milliers”nombre = 1234567890message = 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,890Zéros de remplissage
Section titled “Zéros de remplissage”numero = 52message = f"Le numéro avec zéros de remplissage est {numero:04}"print(message)# Sortie : Le numéro avec zéros de remplissage est 0052Explication : 04 signifie une largeur minimale de 4 caractères, remplie avec des zéros à gauche.
Pourcentages
Section titled “Pourcentages”proportion = 0.855message = 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 %.
Alignement et largeur
Section titled “Alignement et largeur”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 : 5Options d’alignement :
<: alignement à gauche>: alignement à droite^: centré
5. Formatage des dates et heures
Section titled “5. Formatage des dates et heures”Import et utilisation de base
Section titled “Import et utilisation de base”from datetime import datetime
maintenant = datetime.now()print(maintenant)# Sortie : 2025-01-15 14:30:45.123456 (exemple)Formatage simple
Section titled “Formatage simple”message = f"Nous sommes le {maintenant:%d/%m/%Y}"print(message)# Sortie : Nous sommes le 15/01/2025Date et heure complètes
Section titled “Date et heure complètes”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:45Formats personnalisés
Section titled “Formats personnalisés”message = f"Aujourd'hui, c'est {maintenant:%A %d %B %Y}"print(message)# Sortie : Aujourd'hui, c'est lundi 15 janvier 2025Directives 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
Manipulation avec timedelta
Section titled “Manipulation avec timedelta”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 2025Conversion de fuseaux horaires
Section titled “Conversion de fuseaux horaires”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 UTC6. Comparaison des méthodes
Section titled “6. Comparaison des méthodes”| Méthode | Python | Lisibilité | Performance | Recommandation |
|---|---|---|---|---|
% | 2.x+ | Faible | Bonne | ❌ Obsolète |
.format() | 2.6+ | Moyenne | Bonne | ⚠️ Acceptable |
| f-strings | 3.6+ | Excellente | Excellente | ✅ Recommandée |
7. Avantages des f-strings
Section titled “7. Avantages des f-strings”- 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
8. Limites des f-strings
Section titled “8. Limites des f-strings”- 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)📋 Évaluation des connaissances
Section titled “📋 Évaluation des connaissances”À quoi sert cette évaluation ?
Section titled “À quoi sert cette évaluation ?”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 ! 🚀
📝 Exercices pratiques
Section titled “📝 Exercices pratiques”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 = 21ville = "Cotonou"# Créer un message avec ces informationsVoir la solution
nom = "Riyad"age = 21ville = "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.99quantite = 3# Afficher le prix totalVoir la solution
prix_unitaire = 15.99quantite = 3message = f"Prix total : {prix_unitaire * quantite}€"print(message)
# Avec formatage à 2 décimalesmessage = 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.14Pi avec 4 décimales : 3.1416Pi avec 6 décimales : 3.141593Exercice 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 = 1234567890print(f"Nombre formaté : {nombre:,}")
# Avec des décimalesprix = 1234567.89print(f"Prix : {prix:,.2f}€")Résultat attendu :
Nombre formaté : 1,234,567,890Prix : 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 : 001Numéro : 002Numéro : 003Numéro : 004Numéro : 005Numéro : 006Numéro : 007Numéro : 008Numéro : 009Numéro : 010Exercice 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 = 127total = 150taux = 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/2025Format long : mercredi 31 décembre 2025Avec heure : 31/12/2025 21:30:45Exercice 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 KOUADIOTitre : Riyad KouadioNombre de caractères : 13Sans espaces : riyadkouadioExercice 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 = 0for 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 = 21ville = "Cotonou"
# Avec positionsmessage = "Je m'appelle {}, j'ai {} ans et j'habite à {}.".format(nom, age, ville)print(message)
# Avec nomsmessage = "Je m'appelle {n}, j'ai {a} ans et j'habite à {v}.".format(n=nom, a=age, v=ville)print(message)
# Avec indicesmessage = "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 = 70Conclusion
Section titled “Conclusion”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.
🎓 Récapitulatif
Section titled “🎓 Récapitulatif”Points clés à retenir :
Section titled “Points clés à retenir :”-
F-strings (Python 3.6+) : La méthode recommandée
- Syntaxe :
f"texte {variable}" - Permet d’évaluer des expressions
- Meilleure performance et lisibilité
- Syntaxe :
-
Méthode
.format()(Python 2.6+) : Alternative acceptable- Syntaxe :
"texte {}".format(variable) - Compatible avec les versions plus anciennes
- Bonne pour les templates dynamiques
- Syntaxe :
-
Opérateur
%(Python 2.x+) : Obsolète- Syntaxe :
"texte %s" % variable - Déconseillé pour les nouveaux projets
- Syntaxe :
Formatages essentiels :
Section titled “Formatages essentiels :”| Besoin | Format | Exemple |
|---|---|---|
| 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 “ |
Dates et heures :
Section titled “Dates et heures :”| Directive | Signification | Exemple |
|---|---|---|
%d | Jour (01-31) | 15 |
%m | Mois (01-12) | 01 |
%Y | Année complète | 2025 |
%H | Heure (00-23) | 14 |
%M | Minutes (00-59) | 30 |
%S | Secondes (00-59) | 45 |
%A | Jour complet | Lundi |
%B | Mois complet | Janvier |
📚 Ressources supplémentaires
Section titled “📚 Ressources supplémentaires”- Documentation officielle Python - Format String Syntax
- PEP 498 - Literal String Interpolation
- Documentation datetime