Accès rapide :
La vidéo
Présentation des chaînes formatées.
Formater des valeurs entières
Formater des valeurs flottantes
Formater des chaînes de caractères
Les chaînes formatées multi-lignes
Utilisation de la méthode format pour formater une chaîne
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 de type f""
.
Il existe une autre forme de chaînes de caractères : « les chaînes formatées ». Une chaîne de caractères formatées s'introduit via la syntaxe
f""
(la lettre f
correspondant, bien entendu, à formatted string). On peut insérer des variables dans une chaîne
formatée : cela se fait grâce à une paire d'accolades. Voici un premier exemple simple d'utilisation.
>>> num = 1 >>> den = 3 >>> fraction = f"[{num}/{den}]" >>> print(fraction) [1/3] >>>
Vous vous en doutez, mais il est possible de faire la même chose avec la syntaxe f''
, comme le montre l'exemple ci-dessous.
>>> num = 1 >>> den = 3 >>> fraction = f'[{num}/{den}]' >>> print(fraction) [1/3] >>>
Mais pourquoi parle-t-on de chaînes formatées ? Tout simplement par-ce-qu'il est possible de contrôler le format de la chaîne.
Par exemple, imaginons que vous souhaitiez afficher vos entiers sur trois caractères, il n'y a qu'à modifier le format en ajoutant :3d
derrière le nom de chaque variable injectée.
>>> num = 1 >>> den = 3 >>> fraction = f"[{num:3d}/{den:3d}]" >>> print(fraction) [ 1/ 3] >>>
De même, il est possible de remplir la place occupée par chaque entier avec des 0 plutôt que des espaces.
Dans ce cas, il faudra plutôt utiliser la séquence :03d
(le 0 correspondant au caractère de remplissage).
>>> num = 1 >>> den = 3 >>> fraction = f"[{num:03d}/{den:03d}]" >>> print(fraction) [001/003] >>>
La syntaxe générale d'un format est la suivante :
format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type] fill ::= <any character> align ::= "<" | ">" | "=" | "^" sign ::= "+" | "-" | " " width ::= digit+ grouping_option ::= "_" | "," precision ::= digit+ type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
[]
proposés dans le format général indique l'aspect facultatif d'une partie du format.
Ainsi [fill]
indique que le caractère de remplissage est facultatif et, dans ce cas, c'est l'espace qui sera considéré.
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 |
---|---|---|---|
Indique qu'on veut formater un entier en base décimale (base 10). | f"[{num}/{den}]" |
[10/3] |
|
:d |
Indique qu'on veut formater un entier en base décimale (base 10). | f"[{num:d}/{den:d}]" |
[10/3] |
:3d |
Indique qu'on veut formater un entier en base décimale (base 10) sur 3 caractères. | f"[{num:3d}/{den:3d}]" |
[ 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. | f"[{num:03d}/{den:03d}]" |
[010/003] |
:b |
Indique qu'on veut formater un entier en base binaire (base 2). | f"[{num:b}/{den:b}]" |
[1010/11] |
:5b |
Indique qu'on veut formater un entier en base binaire (base 2) sur 5 caractères. | f"[{num:5b}/{den:5b}]" |
[ 1010/ 11] |
:05b |
Indique qu'on veut formater un entier en base binaire (base 2) sur 5 caractères et si la valeur est inférieure à cette taille alors on remplit la chaîne avec des 0. | f"[{num:05b}/{den:05b}]" |
[01010/00011] |
:o |
Indique qu'on veut formater un entier en base octale (base 8). | f"[{num:o}/{den:o}]" |
[12/3] |
:3o |
Indique qu'on veut formater un entier en base octale (base 8) sur 3 caractères. | f"[{num:3o}/{den:3o}]" |
[ 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. | f"[{num:03o}/{den:03o}]" |
[012/003] |
:x |
Indique qu'on veut formater un entier en base hexadécimale (base 16), avec les chiffres de a à z en minuscules. |
f"[{num:x}/{den:x}]" |
[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. |
f"[{num:3x}/{den:3b}]" |
[ 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. |
f"[{num:03x}/{den:03x}]" |
[00a/003] |
:X |
Indique qu'on veut formater un entier en base hexadécimale (base 16), avec les chiffres de a à z en majuscules. |
f"[{num:X}/{den:X}]" |
[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. |
f"[{num:3X}/{den:3X}]" |
[ 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. |
f"[{num:03X}/{den:03X}]" |
[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 |
---|---|---|---|
Indique qu'on veut formater un flottant en notation décimale. | f"pi = {pi}" |
pi = 3.141592654 |
|
:f |
Indique qu'on veut formater un flottant en notation décimale. | f"pi = {pi:f}" |
pi = 3.141592654 |
:.2f |
Indique qu'on veut formater un flottant en notation décimale et en arrondissant à deux chiffres après la virgule. | f"pi = {pi:.2f}" |
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. | f"pi = {pi:5.2f}" |
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. | f"pi = {pi:05.2f}" |
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. | f"pi = {pi:<10.2f}!" |
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. | f"pi = {pi:>10.2f}!" |
pi = 03.14! |
:e |
Indique qu'on veut formater un flottant en notation exponentielle. | f"pi = {pi:e}" |
pi = 3.141593e+00 |
:.2e |
Indique qu'on veut formater un flottant en notation exponentielle, en arrondissant à deux chiffres après la virgule | f"pi = {pi:.2e}" |
pi = 3.14e+00 |
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 | f"{s}" |
toto |
:10s |
Indique qu'on veut formater une chaîne de caractères sur dix caractères, aligné par la gauche | f">{s:10s}<" |
>toto < |
:<10s |
Indique qu'on veut formater une chaîne de caractères sur dix caractères, aligné par la gauche | f">{s:<10s}<" |
>toto < |
:>10s |
Indique qu'on veut formater une chaîne de caractères sur dix caractères, aligné par la droite | f">{s:>10s}<" |
> toto< |
Le langage permet aussi l'utilisation de chaînes de caractères formatées 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 = f"""Spy code: {identifier} First name: {first_name} Last name: {last_name} Licence to kill: {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
f''' ... '''
fonctionne aussi très bien.
Les chaînes formatées existent en Python depuis sa version 3.6. Avant, il était possible d'avoir ces mécanismes de formatage, mais il fallait passer
la méthode format
. Voici un exemple d'utilisation.
>>> num = 1 >>> den = 3 >>> s = "[{0}/{1}]".format(num, den) >>> print(s) [1/3] >>>
Les valeurs numériques utilisées, à la place des noms de variables, correspondent aux positions des données dans la liste de paramètres.
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 | +------------+------------+------------+
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(f"| {'First name':10s} | {'Last name':10s} | {'Salary':>10s} |"); print(line) print(f"| {first_name_1:10s} | {last_name_1:10s} | {salary_1:>10.2f} |"); print(f"| {first_name_2:10s} | {last_name_2:10s} | {salary_2:>10.2f} |"); print(f"| {first_name_3:10s} | {last_name_3:10s} | {salary_3:>10.2f} |"); 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 :