En Python, le formatage des chaînes de caractères permet d'intégrer des variables ou des expressions dans du texte de manière dynamique. Trois approches principales existent pour effectuer cette opération, chacune avec ses avantages et sa syntaxe propre.
Imaginons un scénario où nous voulons générer une phrase personnalisée à partir de données utilisateur. Voici comment collecter ces données :
prenom = input("Entrez votre prénom : ")
ville = input("Entrez votre ville : ")
age_utilisateur = int(input("Entrez votre âge : "))
activite = input("Entrez votre activité préférée : ")
Première méthode : l'opérateur % (foramtage traditionnel)
Cette méthode utilise des spécificateurs de format comme %s pour les chaînes et %d pour les entiers. Les valeurs sont passées dans un tuple après le symbole %.
message1 = "Bonjour %s, vous résidez à %s. Vous avez %d ans et appréciez %s." % (prenom, ville, age_utilisateur, activite)
print(message1)
Les valeurs sont insérées dans l'ordre des spécificateurs. Si le nombre de valeurs ne correspond pas, une exception TypeError est levée. Pour un seul élément, le tuple peut être omis :
salut = "Salut %s" % prenom
Deuxième méthode : la méthode .format()
Introduite pour améliorer la lisibilité, cette méthode utilise des accolades {} comme espaces réservés. Les arguments sont passés à la méthode format().
message2 = "Bonjour {}, vous habitez à {}. Vous avez {} ans et aimez {}.".format(prenom, ville, age_utilisateur, activite)
print(message2)
Des options de formatage avancées sont disponibles à l'intérieur des accolades, telles que l'alignement, la précision numérique ou la conversion de casse :
{:<20}: alignement à gauche sur 20 caractères.{:.2f}: nombre flottant avec deux décimales.{!r}: représentation de l'objet viarepr().
prix = 49.99
detail = "Coût : {0:>10.2f} €".format(prix)
print(detail)
Troisième méthode : les f-strings (formatage littéral)
Disponibles à partir de Python 3.6, les f-strings offrent une syntaxe concise en préfixent la chaîne avec f et en insérant directement les expressions entre accolades.
message3 = f"Bonjour {prenom}, résidant à {ville}. Vous avez {age_utilisateur} ans et votre passe-temps est {activite}."
print(message3)
Cette méthode permet d'intégrer des appels de fonctions, des calculs ou des conditions simples directement dans la chaîne :
solde = 1500.5
rapport = f"Montant : {solde * 1.05:.2f} € après taxe."
print(rapport)
statut = f"{prenom} est {'majeur' if age_utilisateur >= 18 else 'mineur'}."
print(statut)
Les accolades littérales s'échappent en les doublant : f"Utiliser des accolades : {{ texte }}".
Comparaison et bonnes pratiques
Le choix de la méthode dépend du contexte et de la version de Python. Les f-strings sont généralement privilégiées pour leur performance et leur clarté dans les versions récentes. La méthode .format() reste utile pour des formats complexes ou une compatibilité avec des versions antérieures. L'opérateur % est conservé pour des raisons historiques, mais son usage est découragé dans le nouveau code.
# Exemple combiné avec des types variés
data = {"nom": "Alice", "score": 87.5}
resume = f"{data['nom'].upper()} : {data['score']:.1f}/100"
print(resume)