Skip to main content
Niveau : Débutant

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ù n est 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"
  • 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é

  1. Créez un nouveau fichier Python nommé receipt_generator.py.

  2. Déclarez les variables suivantes au début de votre script :

    product_name = "Laptop"
    quantity = 2
    unit_price = 1200.50
  3. 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.
  4. 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.
  5. 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 de product_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.