Chapitre 5 : Formatage avec les f-strings
Interpolation, Formatage de Nombres, Alignement
1. Quoi : Les f-strings
Introduites en Python 3.6, les f-strings (ou formatted string literals) sont une manière moderne, lisible et performante de formater des chaînes de caractères. Elles permettent d'intégrer directement des expressions Python à l'intérieur d'une chaîne.
La syntaxe est simple : il suffit de préfixer la chaîne par la lettre f (ou F) et de placer les variables ou expressions entre accolades {}.
name = "Alice"
age = 30
# La f-string remplace {name} et {age} par leurs valeurs
greeting = f"Hello, my name is {name} and I am {age} years old."
print(greeting)
# Affiche : "Hello, my name is Alice and I am 30 years old."
2. Pourquoi : Les avantages des f-strings
Avant les f-strings, les développeurs Python utilisaient principalement la méthode .format() ou l'opérateur %.
- Ancienne méthode (
.format()) :greeting = "Hello, my name is {} and I am {} years old.".format(name, age) - Très ancienne méthode (
%) :greeting = "Hello, my name is %s and I am %d years old." % (name, age)
Les f-strings sont aujourd'hui la méthode recommandée pour plusieurs raisons :
- Lisibilité : Les variables sont directement insérées là où elles apparaissent dans la chaîne, ce qui rend le code beaucoup plus facile à lire.
- Performance : Elles sont généralement plus rapides que les autres méthodes de formatage.
- Puissance : On peut mettre presque n'importe quelle expression Python valide à l'intérieur des accolades.
3. Comment : Utilisation avancée des f-strings
A. Exécution d'expressions
Vous pouvez faire plus que simplement insérer des variables.
price = 19.99
tax_rate = 0.20
# Calcul directement dans la f-string
total_price_message = f"Total price with tax: {price * (1 + tax_rate)}"
print(total_price_message) # Affiche : "Total price with tax: 23.988"
# Appel de fonctions ou de méthodes
name = " Bob "
message = f"Welcome, {name.strip().title()}!"
print(message) # Affiche : "Welcome, Bob!"
B. Options de formatage
Les f-strings permettent de contrôler précisément l'affichage des valeurs, notamment pour les nombres. On ajoute un deux-points : suivi d'un spécificateur de format.
-
Formatage des nombres à virgule flottante (
float) :- Spécifiez le nombre de décimales avec
.nf, oùnest le nombre de chiffres après la virgule.
pi = 3.14159265
message = f"The value of pi is approximately {pi:.2f}"
print(message) # Affiche : "The value of pi is approximately 3.14" - Spécifiez le nombre de décimales avec
-
Remplissage et alignement :
- Alignez le texte à l'intérieur d'un espace donné.
text = "hello"
# Aligne à gauche sur 10 caractères
left_aligned = f"'{text:<10}'" # Résultat : "'hello '"
# Aligne à droite sur 10 caractères
right_aligned = f"'{text:>10}'" # Résultat : "' hello'"
# Centre sur 10 caractères
centered = f"'{text:^10}'" # Résultat : "' hello '"
# Centre et remplit avec un caractère
filled_centered = f"'{text:*^10}'" # Résultat : "'**hello***'"
C. Débogage rapide (Python 3.8+)
C'est une fonctionnalité extrêmement pratique pour le débogage. En ajoutant un signe égal = à la fin de l'expression, la f-string affichera à la fois l'expression et sa valeur.
user = "admin"
is_logged_in = True
# La syntaxe {variable=} est un raccourci pour f"variable={variable}"
print(f"{user=} {is_logged_in=}")
# Affiche : user='admin' is_logged_in=True
4. Bonnes Pratiques
- ✅ Bon : Utilisez les f-strings comme méthode de formatage par défaut dans tout nouveau code Python (version 3.6+).
- ✅ Bon : Profitez de la possibilité d'appeler des méthodes (comme
.strip()) directement dans les accolades pour garder le code concis. - ❌ Mauvais : Évitez de mettre une logique métier trop complexe à l'intérieur d'une f-string. Si le calcul est long, faites-le d'abord dans une variable, puis insérez la variable dans la chaîne pour une meilleure lisibilité.
Ressources Externes :
Exercices :
Exercice 5 - Génération d'un Reçu Formaté
Objectif
Cet exercice a pour but de vous faire utiliser les f-strings pour créer une chaîne de caractères formatée qui ressemble à un reçu de caisse, en utilisant des calculs et des options de formatage.
Énoncé
-
Créez un nouveau fichier Python nommé
receipt_generator.py. -
Déclarez les variables suivantes au début de votre script :
product_name = "Laptop"
quantity = 2
unit_price = 1200.50 -
Effectuez le calcul suivant et stockez le résultat dans une variable
total_price:- Calculez le prix total en multipliant la quantité par le prix unitaire.
-
Générez le reçu :
- En utilisant une seule f-string multi-lignes (
f"""..."""), créez une chaîne de caractères qui ressemble au reçu ci-dessous. - Contraintes de formatage :
- Le prix unitaire et le prix total doivent être affichés avec deux décimales.
- Les noms des champs (
Product,Quantity, etc.) doivent être alignés à gauche sur 10 caractères. - Les valeurs correspondantes doivent être alignées à droite sur 15 caractères.
- En utilisant une seule f-string multi-lignes (
-
Affichez le reçu en utilisant
print().
Résultat Attendu
La sortie de votre script doit être exactement la suivante :
***************************
* STORE RECEIPT *
***************************
Product : Laptop
Quantity : 2
Unit Price: 1200.50
---------------------------
Total : 2401.00
Cliquez ici pour voir un exemple de code de solution
# receipt_generator.py
# 1. Variables
product_name = "Laptop"
quantity = 2
unit_price = 1200.50
# 2. Calcul
total_price = quantity * unit_price
# 3. Génération du reçu avec une f-string multi-lignes
receipt = f"""
***************************
* STORE RECEIPT *
***************************
{'Product':<10}: {product_name:>15}
{'Quantity':<10}: {quantity:>15}
{'Unit Price':<10}: {unit_price:>15.2f}
---------------------------
{'Total':<10}: {total_price:>15.2f}
"""
# 4. Affichage
print(receipt)
Explication des options de formatage :
{'Product':<10}: Aligne le mot "Product" à gauche (<) sur un total de 10 caractères.{product_name:>15}: Aligne la valeur deproduct_nameà droite (>) sur un total de 15 caractères.{unit_price:>15.2f}: Combine les options :>: Aligne à droite.15: Sur 15 caractères au total..2f: Formate le nombre flottant (f) pour n'avoir que 2 chiffres après la virgule.