Participer au site avec un Tip
Rechercher
 

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 :

Utilisation de chaînes formatées « à la C »

Les chaînes formatées Les booléens


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

La vidéo

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 %.


Utilisation de chaînes formatées « à la C »

Un mécanisme de formatage hérité du langage C

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]
>>> 
les valeurs à injecter, en partie droite de l'opérateur % sont stockées dans un tuple. Nous reviendrons sur ce type de données, plus tard dans ce tuto Python.
la séquence %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.

Formater des valeurs entières

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]

Formater des valeurs flottantes

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
si vous ne cherchez à formater qu'une unique valeur, les parenthèses ne sont pas obligatoires autour de cette valeur. Ainsi, les deux formatages suivants sont équivalents et produisent le même affichage.
 1 
 2 
 3 
pi = 3.141592654
print("pi = %05.2f" % pi)
print("pi = %05.2f" % (pi))
Les parenthèses ne sont pas requises si vous ne formatez qu'une unique valeur

Formater des chaînes de caractères

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      <

Les chaînes formatées multi-lignes

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)
Exemple d'utilisation d'une chaîne formatée multi-lignes

Et voici les résultats produits par cet exemple.

Spy code: 007
    First name: James
    Last name: Bond
    Licence to kill: True

Travaux pratiques

L'énoncé

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
oui, j'aime les films d'espions ;-)

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 |
+------------+------------+------------+
pour ceux qui ont déjà fait le TP du chapitre précédent, vous noterez qu'il s'agit du même énnoncé. Mais, bien entendu, il faut utiliser l'opérateur % présenté dans ce chapitre.

Bon courage et, bien entendu, essayez de faire l'exercice sans regarder directement la correction ci-dessous. ;-)

La correction

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)
Utilisation de l'opérateur % pour produire un tableau de données sur la console


Les chaînes formatées Les booléens