Accès rapide :
La vidéo
Un mécanisme de formatage hérité du langage C
Formater des valeurs entières
Formater des valeurs flottantes
Formater des chaînes de caractères
Les chaînes formatées multi-lignes
Travaux pratiques
L'énoncé
La correction
Cette vidéo vous présente les principales possibilités de formatage de données dans une chaîne de caractères en utilisant l'opérateur %
.
Le langage Python vous offre une autre manière de formater vos chaînes de caractères. Cette autre façon de procéder est en fait inspirée du langage de programmation C et plus précisément de ses fonctions printf et sprintf.
Pour exploiter cette possibilité, il faut utiliser l'opérateur %
sur une chaîne de caractères qui correspondra au format. Les valeurs à
injecter seront passées en opérande de droite. Voici un premier exemple d'utilisation.
>>> num = 3 >>> den = 2 >>> s = "[%d/%d]" % (num, den) >>> print(s) [3/2] >>>
%
sont stockées dans un tuple
.
Nous reviendrons sur ce type de données, plus tard dans ce tuto Python.
%d
indique qu'on attend, à cette position, un entier exprimé en base décimale (en base 10).
Aujourd'hui, il est plutôt conseillé d'utiliser les chaînes formatées que nous avons étudiées dans le chapitre précédent.
Cependant, il n'est pas rare de trouver dans des vieux scripts l'utilisation de cet opérateur %
de formatage.
Comme il y a quelques différences entre les deux approches, et notamment sur l'alignement des textes, je voulais aussi vous présenter cette syntaxe
historique.
Le tableau ci-dessous présente quelques formats possibles pour afficher vos valeurs entières.
Dans les exemples qui suivent, num
sera initialisé 10 et den
à 3.
Le format | Description | Exemple d'utilisation | Résultat |
---|---|---|---|
%d | Indique qu'on veut formater un entier en base décimale (base 10). | "[%d/%d]" % (num, den) |
[10/3] |
%3d |
Indique qu'on veut formater un entier en base décimale (base 10) sur 3 caractères. | "[%3d/%3d]" % (num, den) |
[ 10/ 3] |
%03d |
Indique qu'on veut formater un entier en base décimale (base 10) sur 3 caractères et si la valeur est inférieure à 100 alors on remplit la chaîne avec des 0. | "[%03d/%03d]" % (num, den) |
[010/003] |
%o |
Indique qu'on veut formater un entier en base octale (base 8). | "[%o/%o]" % (num, den) |
[12/3] |
%3o |
Indique qu'on veut formater un entier en base octale (base 8) sur 3 caractères. | "[%3o/%3o]" % (num, den) |
[ 12/ 3] |
%03o |
Indique qu'on veut formater un entier en base octale (base 8) sur 3 caractères et si la valeur est inférieure à cette taille alors on remplit la chaîne avec des 0. | "[%03o/%03o]" % (num, den) |
[012/003] |
%x |
Indique qu'on veut formater un entier en base hexadécimale (base 16), avec les chiffres de a à z en minuscules. |
"[%x/%x]" % (num, den) |
[a/3] |
%3x |
Indique qu'on veut formater un entier en base hexadécimale (base 16) sur 3 caractères, avec les chiffres de a à z en minuscules. |
"[%3x/%3x]" % (num, den) |
[ a/ 3] |
%03x |
Indique qu'on veut formater un entier en base hexadécimale (base 16) sur 3 caractères, avec les chiffres de a à z en minuscules. Si la valeur est inférieure à cette taille alors on remplit la chaîne avec des 0. |
"[%03x/%03x]" % (num, den) |
[00a/003] |
%X |
Indique qu'on veut formater un entier en base hexadécimale (base 16), avec les chiffres de a à z en majuscules. |
"[%X/%X]" % (num, den) |
[A/3] |
%3X |
Indique qu'on veut formater un entier en base hexadécimale (base 16) sur 3 caractères, avec les chiffres de a à z en majuscules. |
"[%3X/%3X]" % (num, den) |
[ A/ 3] |
%03X |
Indique qu'on veut formater un entier en base hexadécimale (base 16) sur 3 caractères, avec les chiffres de a à z en majuscules. Si la valeur est inférieure à cette taille alors on remplit la chaîne avec des 0. |
"[%03X/%03X]" % (num, den) |
[00A/003] |
Le tableau ci-dessous présente quelques formats possibles pour afficher vos valeurs flottantes.
Dans les exemples qui suivent, pi
sera initialisé la valeur 3.141592654
.
Le format | Description | Exemple d'utilisation | Résultat |
---|---|---|---|
%f |
Indique qu'on veut formater un flottant en notation décimale. | "pi = %f" % pi |
pi = 3.141592654 |
%.2f |
Indique qu'on veut formater un flottant en notation décimale et en arrondissant à deux chiffres après la virgule. | "pi = %.2f" % pi |
pi = 3.14 |
%5.2f |
Indique qu'on veut formater un flottant en notation décimale, sur 5 caractères et en arrondissant à deux chiffres après la virgule. | "pi = %5.2f" % pi |
pi = 3.14 |
%05.2f |
Indique qu'on veut formater un flottant en notation décimale, sur 5 caractères (le . compris), en arrondissant à deux chiffres après la virgule et en complétant avec des 0. | "pi = %05.2f" % pi |
pi = 03.14 |
%10.2f |
Indique qu'on veut formater un flottant en notation décimale, sur 10 caractères (le . compris), en arrondissant à deux chiffres après la virgule et son contenu aligné par la droite. | "pi = %10.2f!" % pi |
pi = 03.14! |
%-10.2f |
Indique qu'on veut formater un flottant en notation décimale, sur 10 caractères (le . compris), en arrondissant à deux chiffres après la virgule et son contenu aligné par la gauche. | "pi = %-10.2f!" % pi |
pi = 03.14 ! |
%e |
Indique qu'on veut formater un flottant en notation exponentielle. | "pi = %e" % pi |
pi = 3.141593e+00 |
%.2e |
Indique qu'on veut formater un flottant en notation exponentielle. | "pi = %.2e" % pi |
pi = 3.14e+00 |
1 2 3 |
pi = 3.141592654 print("pi = %05.2f" % pi) print("pi = %05.2f" % (pi)) |
Le tableau ci-dessous présente quelques formats possibles pour formater des chaînes de caractères.
Dans les exemples qui suivent, la variable s
sera initialisé la valeur "toto"
.
Le format | Description | Exemple d'utilisation | Résultat |
---|---|---|---|
%s |
Indique qu'on veut formater une chaîne de caractères | "%s" % s |
toto |
%10s |
Indique qu'on veut formater une chaîne de caractères sur dix caractères, aligné par la droite | ">%10s<" % s |
> toto< |
%-10s |
Indique qu'on veut formater une chaîne de caractères sur dix caractères, aligné par la gauche | ">%-10s<" % s |
>toto < |
Le langage permet aussi d'utiliser cet opérateur avec des chaînes de caractères multi-lignes. Voici un exemple d'utilisation.
1 2 3 4 5 6 7 8 9 10 11 |
identifier = "007" first_name = "James" last_name = "Bond" ltk = True message = """Spy code: %s First name: %s Last name: %s Licence to kill: %s""" % (identifier, first_name, last_name, ltk) print(message) |
Et voici les résultats produits par cet exemple.
Spy code: 007 First name: James Last name: Bond Licence to kill: True
Vous allez commencer un nouveau script Python en copiant les lignes de code suivantes.
first_name_1 = "James" last_name_1 = "Bond" salary_1 = 45_000.9999 first_name_2 = "Jason" last_name_2 = "Bourne" salary_2 = 30_540.1234 first_name_3 = "Ethan" last_name_3 = "Hunt" salary_3 = 100_000
Complétez ce script pour obtenir l'affichage suivant :
+------------+------------+------------+ | First name | Last name | Salary | +------------+------------+------------+ | James | Bond | 45001.00 | | Jason | Bourne | 30540.12 | | Ethan | Hunt | 100000.00 | +------------+------------+------------+
%
présenté dans ce chapitre.
Bon courage et, bien entendu, essayez de faire l'exercice sans regarder directement la correction ci-dessous. ;-)
Voici ma proposition de code pour réaliser l'affichage demandé.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
first_name_1 = "James" last_name_1 = "Bond" salary_1 = 45_000.9999 first_name_2 = "Jason" last_name_2 = "Bourne" salary_2 = 30_540.1234 first_name_3 = "Ethan" last_name_3 = "Hunt" salary_3 = 100_00 line = "+" + ("-" * 12) + "+" + ("-" * 12) + "+" + ("-" * 12) + "+" print(line) print("| %-10s | %-10s | %10s |" % ("First name", "Last name", "Salary")); print(line) print("| %-10s | %-10s | %10.2f |" % (first_name_1, last_name_1, salary_1)); print("| %-10s | %-10s | %10.2f |" % (first_name_2, last_name_2, salary_2)); print("| %-10s | %-10s | %10.2f |" % (first_name_3, last_name_3, salary_3)); print(line) |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :