- Apprendre
- Informatique et numérique
- Programmation
- Python : variables, boucles, fonctions et fichiers
- Chaînes de caractères en Python
Manipuler les chaînes de caractères en Python
DébutantUnité 5 sur 10 de la formation Formation : Python : variables, boucles, fonctions et fichiers
Ce que tu vas apprendre
- Écris des littéraux de chaîne, mesure et combine des chaînes, puis utilise des indices et des tranches pour accéder à n’importe quel caractère ou partie d’un texte.
- Écrire des littéraux de chaîne et combiner des chaînesCrée des chaînes avec des guillemets, des séquences d’échappement et des guillemets triples, trouve leur longueur avec
len()et combine-les avec+et*. - Extraire un caractère par son indiceUtilise des indices positifs et négatifs pour lire n’importe quel caractère d’une chaîne, et évite les erreurs de décalage d’une unité et les erreurs dues aux chaînes vides qui lèvent
IndexError. - Extraire des parties d’une chaîne par tranchesExtrais des sous-chaînes avec
[start:stop]et[start:stop:step], utilise des positions omises ou négatives et prévois exactement quels caractères une tranche contient.
- Écrire des littéraux de chaîne et combiner des chaînes
- Parcours une chaîne pour compter, rechercher et construire du texte, en tenant compte du fait que ses caractères ne peuvent jamais être modifiés en place.
- Parcourir les caractères d’une chaîneParcours chaque caractère avec des boucles
foretwhile, utilise les positions lorsqu’elles comptent et applique au texte les schémas de comptage, de recherche et d’accumulation. - Construire de nouvelles chaînes au lieu de modifier les anciennesExplique ce que signifie l’immuabilité des chaînes et produis un texte modifié en utilisant des tranches, la concaténation et la réaffectation.
- Parcourir les caractères d’une chaîne
- Appelle des méthodes de chaîne pour changer la casse et nettoyer du texte, trouver et compter des sous-chaînes, et vérifier le contenu d’une chaîne avant de l’utiliser.
- Changer la casse et nettoyer du texte avec des méthodesAppelle des méthodes avec la notation pointée pour changer la casse, supprimer des caractères indésirables, remplacer du texte et remplir des chaînes, puis chaîne plusieurs méthodes.
- Rechercher du texte dans une chaîneVérifie si une sous-chaîne est présente, trouve où elle commence, compte ses occurrences et utilise les positions trouvées pour extraire du texte.
- Tester et comparer des chaînesVérifie par quoi une chaîne commence, par quoi elle se termine ou de quoi elle est composée, valide une saisie avant de la convertir et prévois comment Python compare et classe les chaînes.
- Changer la casse et nettoyer du texte avec des méthodes
- Découpe une ligne de texte en mots ou en champs avec
split(), puis réunis les éléments en une chaîne avecjoin().- Découper une chaîne en une liste de partiesUtilise
split()avec et sans séparateur, limite le nombre de découpages et transforme les parties d’une ligne en valeurs dont un programme a besoin. - Assembler des chaînes avec un séparateurCombine plusieurs chaînes en une seule avec
join(), choisis le séparateur, convertis d’abord les éléments qui ne sont pas des chaînes et associesplit()àjoin()pour modifier la forme du texte.
- Découper une chaîne en une liste de parties
- Construis un affichage clair en insérant des valeurs dans du texte avec des f-strings, en mettant en forme les nombres, les dates et les heures pour les lecteurs et en alignant les résultats en colonnes.
- Insérer des valeurs dans du texte avec des f-stringsÉcris des f-strings qui insèrent les valeurs de variables et d’expressions dans du texte, et reconnais les anciennes formes avec
format()et%dans du code existant. - Mettre en forme des nombres, des dates et des heures pour les lecteursAjoute des spécifications de format pour contrôler le nombre de décimales, l’arrondi, les séparateurs de milliers, les pourcentages, les signes et le remplissage par des zéros, et construis des dates et des heures au format américain.
- Aligner l’affichage en colonnesDéfinis des largeurs de champ, des alignements et des caractères de remplissage, raccourcis les textes longs et combine ces options pour afficher des tableaux et des reçus bien alignés.
- Insérer des valeurs dans du texte avec des f-strings
Chaînes de caractères en Python : cours
1Créer des chaînes et en extraire des parties
Dans un programme, le texte a un contenu et des positions. Un nom peut contenir une espace, un message peut contenir un saut de ligne et un code peut séparer ses deux premières lettres de son numéro. Tu peux créer ces chaînes, les combiner et sélectionner exactement les caractères dont tu as besoin. Commence par distinguer la façon dont le texte s’écrit en Python de la valeur qu’il contient, puis représente-toi les positions pour prévoir le résultat des indices et des tranches.
1.1 Écrire des littéraux de chaîne et combiner des chaînes
Une chaîne de caractères est une séquence de caractères de type str. Elle peut contenir un nom, une phrase, un code ou aucun caractère. Python conserve les caractères dans l’ordre, y compris les espaces et la ponctuation.
Écrire la valeur entre des guillemets assortis
Les guillemets simples et doubles créent le même type de valeur : 'hello' et "hello" sont égaux. Les guillemets extérieurs marquent les bornes ; ils ne sont pas des caractères de la valeur. Choisis des guillemets qui rendent ceux de l’intérieur faciles à lire :
message = "It's late"
reply = 'She said "yes"'
empty = ""
Dans 'It's late', l’apostrophe ferme la chaîne trop tôt, ce qui provoque une SyntaxError. Les guillemets doubles résolvent ce problème ; tu peux aussi écrire 'It\'s late'. Utilise des guillemets droits dans le code.
Stocker des sauts de ligne et des barres obliques inverses
Une séquence d’échappement commence par une barre oblique inverse. Python lit \n comme un saut de ligne, \t comme une tabulation et \\ comme une barre oblique inverse. Les guillemets échappés, \' et \", insèrent des guillemets dans le texte.
text = "a\nb"
print(len(text)) # 3
print(text)
Le dernier appel affiche a et b sur deux lignes distinctes. La valeur contient trois caractères : a, un saut de ligne et b. Les séquences d’échappement sont traitées lorsque Python lit le littéral. La console affiche une représentation avec des guillemets et les séquences d’échappement nécessaires ; print() affiche les caractères eux-mêmes. Par exemple, "\x41" devient "A", donc la console n’a pas besoin d’afficher la séquence d’échappement d’origine.
Les guillemets triples permettent à un littéral de s’étendre sur plusieurs lignes. Chaque saut de ligne à l’intérieur devient un caractère de saut de ligne :
notice = """Door closed
Use side entrance"""
Une chaîne brute comporte un r avant ses guillemets. Dans r"C:\new", la barre oblique inverse et n restent séparés, ce qui donne six caractères. Dans "C:\new", \n devient un saut de ligne, ce qui en donne cinq. Les littéraux bruts sont utiles lorsque les barres obliques inverses font partie du texte.
Mesurer et combiner du texte
len() compte chaque caractère, y compris les espaces : len("Hi there!") vaut 9, et len("") vaut 0. Plus précisément, cette fonction compte les points de code Unicode. len("café") vaut 4 lorsque é est un seul point de code ; len("👍🏽") vaut 2, même si l’émoji ressemble à un seul symbole.
Utilise + pour concaténer des chaînes et * pour répéter une chaîne :
first = "Ada"
last = "Lovelace"
full = first + " " + last # "Ada Lovelace"
rule = "-" * 10 # ten dashes
La concaténation n’insère rien automatiquement. Sans " ", les noms deviennent "AdaLovelace". Répéter "ab" zéro fois donne la chaîne vide.
Déterminer si les chiffres sont du texte ou des nombres
Les deux opérandes d’une concaténation de chaînes doivent être des chaînes. "Age: " + 30 lève TypeError ; "Age: " + str(30) donne "Age: 30". À l’inverse, input() renvoie du texte : "3" + "4" donne "34". Pour additionner leurs valeurs numériques, convertis-les d’abord : int("3") + int("4") donne 7.
Points clés
- Une chaîne stocke une séquence ordonnée de caractères ; ses guillemets extérieurs font partie de la syntaxe.
est un seul caractère de saut de ligne, tandis que les littéraux bruts conservent séparément la barre oblique inverse et la lettre qui suit.len()compte les points de code, y compris les espaces et la ponctuation.+assemble des chaînes sans ajouter d’espaces ;*répète une chaîne.- Convertis le texte en nombres pour les calculs et les nombres en texte pour la concaténation.
1.2 Extraire un caractère par son indice
Un indice sélectionne un caractère selon sa position. Python commence à compter à zéro : la position d’un caractère est donc inférieure de un à son rang dans un comptage ordinaire depuis la gauche.
Représenter les positions
Pour word = "Python", chaque caractère possède un indice positif ou nul et un indice négatif :
| Caractère | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| Depuis le début | 0 | 1 | 2 | 3 | 4 | 5 |
| Depuis la fin | -6 | -5 | -4 | -3 | -2 | -1 |
word = "Python"
print(word[0]) # P
print(word[1]) # y
print(word[-1]) # n
Les crochets après la chaîne sélectionnent le caractère. Le résultat est une chaîne de longueur un : Python n’a pas de type distinct pour les caractères. Tu peux assembler les caractères sélectionnés : word[0] + word[-1] donne donc "Pn".
Pour une longueur n, les indices valides vont de -n à n - 1 lorsque n > 0. Les indices positifs ou nuls comptent depuis le début ; les indices négatifs comptent depuis la fin. L’indice -k sélectionne le même caractère que n - k ; dans ce mot de six caractères, -2 et 4 sélectionnent tous deux "o".
Distinguer la longueur du dernier indice
len(word) vaut 6, mais word[6] lève IndexError : il n’y a pas de septième caractère. Le dernier caractère est word[len(word) - 1], ou simplement word[-1]. Dépasser l’une ou l’autre extrémité provoque une erreur ; word[-7] lève aussi IndexError.
Un indice doit être un entier. word[1.0] lève TypeError, même si le flottant a une valeur entière. Utilise // pour calculer une position centrale :
word = "Pyt"
middle = len(word) // 2 # 1
print(word[middle]) # y
L’opérateur / produirait 1.5, qui ne peut pas servir d’indice dans une chaîne. Pour une longueur impaire, len(word) // 2 sélectionne le caractère du milieu. Pour une longueur paire, il sélectionne celui de droite parmi les deux caractères du milieu : "Python"[3] vaut "h".
Construire des initiales à partir des premiers caractères
first = "Grace"
last = "Hopper"
initials = first[0] + last[0]
print(initials) # GH
Chaque nom fournit son caractère à l’indice 0. Avec first[-1], tu obtiendrais "e", la dernière lettre. Cette méthode suppose que chaque nom comporte au moins un caractère.
Vérifier une saisie vide avant l’accès par indice
La chaîne vide a une longueur nulle et aucun indice de caractère valide. ""[0] lève IndexError. Une vérification de la longueur peut empêcher un programme de lire un caractère inexistant :
line = input("Comment: ")
if len(line) > 0 and line[0] == "#":
print("Comment line")
Python évalue and de gauche à droite. Si la vérification de longueur est fausse, il ignore line[0]. Inverser ces deux tests tenterait d’abord l’accès par indice non protégé. Si tu veux seulement savoir si une ligne commence par "#", line.startswith("#") fonctionne aussi sur une saisie vide et renvoie False.
Points clés
- L’indice 0 sélectionne le premier caractère ; l’indice -1 sélectionne le dernier.
- Le dernier indice positif ou nul est
len(text) - 1. - L’accès par indice renvoie une chaîne d’un caractère et lève
IndexErrorpour une position inexistante. - Utilise un indice entier et vérifie qu’une saisie n’est pas vide avant de sélectionner un caractère.
1.3 Extraire des parties d’une chaîne par tranches
Une tranche sélectionne une suite de caractères et la renvoie sous forme de chaîne. Elle permet de prendre un préfixe, de supprimer une fin ou de séparer des champs qui occupent des positions fixes.
Le début est inclus ; la fin est exclue
Écris text[start:stop]. Avec s = "Monty Python", s[0:5] donne "Monty", et s[6:12] donne "Python". L’espace est à l’indice 5, donc la deuxième tranche commence à 6.
Imagine que les nombres de la tranche désignent les espaces entre les caractères. L’espace 0 se trouve avant le premier caractère, et l’espace 5 après les cinq premiers. Tout prendre entre les deux donne cinq caractères. Pour 0 <= start <= stop <= len(text), la longueur est stop - start.
word = "Monty"
print(word[0:4]) # Mont
print(word[0:5]) # Monty
La position de fin est la première position exclue. Ajouter un au dernier indice souhaité permet d’inclure ce dernier caractère.
Omettre une borne
| Tranche | Signification | Résultat pour s |
|---|---|---|
s[:5] | Du début jusqu’à la position 4 | "Monty" |
s[6:] | De la position 6 jusqu’à la fin | "Python" |
s[:] | Chaîne entière | "Monty Python" |
s[-6:] | Six derniers caractères | "Python" |
s[:-1] | Tout sauf le dernier caractère | "Monty Pytho" |
À toute position de découpage k, s[:k] + s[k:] redonne s. Les tranches se rejoignent au même espace, sans caractère manquant ni répété.
Les bornes de tranche qui dépassent les extrémités sont ramenées à celles-ci. "cat"[1:100] vaut "at" ; "cat"[5:] vaut "". Pour une tranche parcourue vers l’avant, un début égal ou supérieur à la fin donne une chaîne vide, comme dans s[4:2]. Contrairement à l’accès à un caractère par indice, une tranche hors limites ne lève pas IndexError.
Choisir un pas
Le troisième emplacement dans text[start:stop:step] définit l’écart entre les positions sélectionnées :
letters = "abcdefgh"
print(letters[::2]) # aceg
print(letters[1::2]) # bdfh
print(letters[::-1]) # hgfedcba
Un pas négatif fait avancer à l’envers. Lorsque les deux bornes sont omises, [::-1] commence au dernier caractère et parcourt tous les caractères dans l’ordre inverse. Un pas de zéro lève ValueError. Le sens doit correspondre aux bornes : la règle ci-dessus selon laquelle un début égal ou supérieur à la fin donne un résultat vide s’applique à un pas positif.
Appliquer les tranches à une structure fixe
d = "2026-07-04"
year = d[:4]
month = d[5:7]
day = d[8:10]
print(month + "/" + day + "/" + year) # 07/04/2026
Les positions fonctionnent parce que cette structure utilise toujours quatre chiffres pour l’année et deux pour le mois et le jour. Un texte dont les champs ont des longueurs variables nécessite une recherche ou un découpage.
L’inversion permet aussi de tester un palindrome : word == word[::-1]. "level" réussit, mais "Level" échoue, car la casse compte. Affecte clean = word.lower() et teste clean == clean[::-1] pour ignorer la casse.
Points clés
- Une tranche inclut son début et exclut sa fin.
- Les bornes omises et les positions négatives facilitent la sélection de préfixes et de fins.
- Les bornes de tranche hors limites sont ramenées aux extrémités ; un pas nul lève
ValueError. - Un pas négatif parcourt la chaîne à l’envers ;
[::-1]inverse toute la chaîne. - Les tranches à positions fixes dépendent d’une structure de texte uniforme.
2Traiter des chaînes caractère par caractère
Une boucle peut examiner chaque caractère, tenir un compte, s’arrêter à la première correspondance ou construire un nouveau message. Les mêmes petits schémas servent à de nombreuses tâches sur du texte : compter les voyelles, trouver un chiffre ou masquer certaines lettres. Les chaînes ont aussi une valeur fixe une fois créées. En suivant une boucle passage par passage, tu verras comment un programme peut produire un texte modifié tout en conservant la chaîne d’origine, et pourquoi affecter une variable diffère de modifier un caractère.
2.1 Parcourir les caractères d’une chaîne
Utilise une boucle lorsqu’une décision doit être prise pour chaque caractère. La boucle peut compter les correspondances, utiliser leurs positions, s’arrêter à la première ou recueillir les caractères qui doivent figurer dans un résultat.
Parcourir directement les caractères
for ch in "hi!":
print(ch)
Le corps s’exécute trois fois, avec ch égal tour à tour à "h", "i" et "!". Avec la chaîne vide, le corps ne s’exécute aucune fois. Une boucle directe sur les caractères n’a pas besoin d’indice si tu utilises uniquement le caractère courant.
Pour compter, initialise le compteur avant la boucle et augmente-le uniquement lorsque le test réussit :
text = "Programming in Python"
count = 0
for ch in text.lower():
if ch in "aeiou":
count += 1
print(count) # 5
La conversion en minuscules permet aussi de reconnaître les voyelles majuscules. La chaîne du test définit les voyelles comptées ; elle ne contient pas y. Réinitialiser count dans la boucle ferait perdre le total des passages précédents.
Utiliser les positions lorsque les caractères voisins comptent
range(len(text)) fournit les indices de zéro jusqu’au dernier indice valide. Pour une tâche qui nécessite à la fois la position et le caractère, enumerate(text) les fournit ensemble :
for i, ch in enumerate("abc"):
print(i, ch)
Cela affiche 0 a, puis 1 b, puis 2 c. Les deux variables de boucle reçoivent l’indice et le caractère de chaque paire.
Pour comparer des caractères voisins, le dernier indice ne peut pas être la position courante, car il n’a pas de caractère suivant :
text = "bookkeeper"
pairs = 0
for i in range(len(text) - 1):
if text[i] == text[i + 1]:
pairs += 1
print(pairs) # 3
Les correspondances sont oo, kk et ee. Avec range(len(text)), le dernier passage tenterait d’accéder à text[len(text)] et lèverait IndexError.
Gérer une position avec while
i = 0
while i < len(text):
print(text[i])
i += 1
Le test utilise strictement < : la position len(text) dépasse la fin. L’incrémentation fait progresser la boucle vers son arrêt ; si tu l’omets, elle continue indéfiniment à lire le même caractère dans un texte non vide. Pour parcourir le texte à l’envers, commence à len(text) - 1, continue tant que i >= 0 et soustrais un à chaque passage.
Rechercher ou recueillir
Pour trouver le premier chiffre dans "Room 42B", arrête-toi après avoir utilisé une correspondance :
for ch in "Room 42B":
if ch.isdigit():
print(ch) # 4
break
Sans break, les deux chiffres seraient affichés. Pour un simple test de présence, "4" in text répond déjà par oui ou par non.
Pour recueillir du texte, commence par result = "" et ajoute chaque caractère souhaité. Pour "a b c", ajouter un caractère uniquement lorsque ch != " " construit "abc". L’affectation ch = ch.upper() dans une boucle ne change que la variable de boucle ; elle ne modifie pas les caractères stockés dans text.
Points clés
- Une boucle
fordirecte parcourt chaque caractère dans l’ordre. - Initialise les compteurs et les accumulateurs avant la boucle.
enumerate()fournit chaque indice avec son caractère.- Arrête-toi une position plus tôt lorsque tu lis
text[i + 1]. - Une boucle
whilea besoin d’une borne sûre et d’une mise à jour de la position. breakarrête une recherche à sa première correspondance.
2.2 Construire de nouvelles chaînes au lieu de modifier les anciennes
Les chaînes sont immuables : leurs caractères ne peuvent pas être modifiés une fois la chaîne créée. Un programme qui semble modifier du texte construit une autre chaîne et choisit la variable qui y fera référence.
Lire un caractère sans lui affecter de valeur
name = "Jane"
name[0] = "D" # TypeError
L’indice permet de lire "J", mais ne peut pas être la cible d’une affectation. del name[0] lève aussi TypeError. Pour obtenir "Dane", combine le premier caractère souhaité avec la fin inchangée :
name = "Jane"
name = "D" + name[1:]
print(name) # Dane
Python évalue d’abord le membre de droite et produit une nouvelle chaîne. Il fait ensuite référence à ce résultat par l’intermédiaire de name.
Remplacer ou insérer à une position connue
Pour un indice i valide et positif ou nul, ces expressions utilisent des tranches différentes à droite :
| Tâche | Expression |
|---|---|
Remplacer le caractère à l’indice i | text[:i] + new + text[i + 1:] |
Insérer avant le caractère à l’indice i | text[:i] + new + text[i:] |
Le remplacement saute l’ancien caractère ; l’insertion le conserve. Avec text = "cat", i = 1 et new = "X", le remplacement donne "cXt", tandis que l’insertion donne "cXat".
Convertis un indice négatif en son équivalent positif ou nul avant d’utiliser ce schéma de remplacement. Pour le dernier caractère de "cat", i = len(text) - 1 vaut 2. Si tu places directement -1 dans text[i + 1:], cette expression devient text[0:], ce qui ajoute toute l’ancienne chaîne et donne "caXcat".
Conserver le résultat d’une méthode
Les méthodes de transformation suivent la même règle d’immuabilité :
msg = "hello"
msg.upper()
print(msg) # hello
msg = msg.upper()
print(msg) # HELLO
Le premier appel calcule un résultat que le programme abandonne. L’affectation conserve le second résultat. Les méthodes de chaîne ne modifient jamais la chaîne d’origine, mais leurs types de retour diffèrent : upper() renvoie une chaîne, find() un entier et isdigit() un booléen.
Suivre deux noms pour une même valeur
Après a = "cat" et b = a, les deux variables font référence à "cat". L’exécution de a = a + "s" donne à a la nouvelle valeur "cats" ; b fait toujours référence à "cat". Aucun caractère de l’ancienne chaîne partagée n’a changé. a += "s" effectue le même type de réaffectation pour une chaîne.
Construire une valeur modifiée dans une boucle
word = "secret"
masked = ""
for ch in word:
if ch in "aeiou":
masked += "*"
else:
masked += ch
print(masked) # s*cr*t
print(word) # secret
Chaque passage ajoute un caractère choisi à masked. Placer chaque caractère au début, avec result = ch + result, inverse le texte : les passages sur "drawer" construisent "d", "rd", "ard", "ward", "eward" et "reward".
La concaténation répétée est pratique pour les exemples courts. Lorsque les éléments existent déjà dans une liste, "".join(pieces) construit directement un résultat et peut aussi placer un séparateur entre eux.
Points clés
- Une chaîne ne peut pas être modifiée par affectation ou suppression d’un élément.
- Le remplacement et l’insertion construisent de nouvelles chaînes à partir de tranches.
- Conserve le résultat d’une transformation en l’affectant à une variable.
- Réaffecter une variable laisse les autres variables faire référence à l’ancienne valeur.
- Un accumulateur construit une nouvelle chaîne en ajoutant un élément choisi à la fois.
3Transformer, rechercher et tester du texte avec les méthodes de chaîne
Les méthodes de chaîne permettent de poser des questions utiles sur du texte et d’en produire des versions nettoyées. Un programme peut devoir accepter des espaces supplémentaires dans une réponse, trouver un séparateur ou vérifier qu’une quantité peut être convertie en nombre. Choisis une méthode selon le résultat dont tu as besoin : du texte modifié, une position, un nombre d’occurrences ou un test booléen. Fais attention aux correspondances exactes, à la valeur renvoyée lorsqu’une recherche échoue et à la différence entre l’ordre du texte et l’ordre numérique.
3.1 Changer la casse et nettoyer du texte avec des méthodes
Une méthode est une fonction attachée à une valeur. Les méthodes de chaîne effectuent des tâches courantes, comme changer la casse, nettoyer les extrémités d’une saisie et remplacer du texte. Chaque appel renvoie un résultat et laisse la chaîne d’origine inchangée.
Appeler une méthode avec la notation pointée
Écris value.method(arguments), comme dans "hello".upper(). Les parenthèses déclenchent l’appel. name.upper sans parenthèses désigne la méthode elle-même ; elle ne produit pas de texte en majuscules. L’écriture upper(name) ne trouve pas de fonction indépendante nommée upper. Utilise dir("") pour répertorier les méthodes de chaîne et help(str.upper) pour lire la description de l’une d’elles.
Choisir une opération sur la casse
| Méthode | Résultat pour l’exemple |
|---|---|
"Hello".upper() | "HELLO" |
"Hello".lower() | "hello" |
"Hello".swapcase() | "hELLO" |
"the old man".title() | "The Old Man" |
"hELLO wORLD".capitalize() | "Hello world" |
capitalize() modifie le premier caractère et met le reste en minuscules ; title() commence de nouveaux mots après les caractères qui ne sont pas des lettres. Ainsi, "they're".title() devient "They'Re" : il peut donc être nécessaire de vérifier les résultats de la mise en majuscules automatique des titres.
Pour les comparaisons sans distinction de casse, casefold() traite plus de cas dans différentes langues que lower(). "Straße".lower() vaut "straße", tandis que "Straße".casefold() vaut "strasse". Effectue le repliement de casse des deux chaînes avant de les comparer.
Nettoyer les extrémités du texte
strip() supprime les caractères d’espacement au début et à la fin, notamment les espaces, tabulations et sauts de ligne. La méthode conserve les espacements internes : " New York \n".strip() vaut "New York". lstrip() nettoie uniquement l’extrémité gauche ; rstrip() uniquement la droite.
Avec un argument, la suppression retire de façon répétée chacun des caractères indiqués aux extrémités. Elle ne supprime pas un mot exact :
print("...Wow!!!".strip(".!")) # Wow
print("report.txt".rstrip(".txt")) # repor
print("report.txt".removesuffix(".txt")) # report
Le t final de report appartient aussi à l’ensemble des caractères à supprimer : il disparaît donc. removeprefix() et removesuffix() suppriment un texte exact à une extrémité ; ces méthodes sont disponibles dans Python 3.9 et les versions ultérieures.
Remplacer les correspondances et chaîner les transformations
replace(old, new) remplace chaque correspondance exacte. Un troisième argument limite le nombre de correspondances modifiées : "a-b-c".replace("-", "", 1) donne "ab-c". Un remplacement vide supprime les correspondances. La casse compte : "Cat cat".replace("cat", "dog") donne donc "Cat dog".
answer = " YES \n"
answer = answer.strip().lower()
print(answer == "yes") # True
Les appels s’exécutent de gauche à droite : strip() renvoie "YES", puis lower() renvoie "yes". Un chaînage fonctionne lorsque la méthode suivante convient au type du résultat précédent. Un résultat de recherche est un entier : il ne prend donc pas en charge les méthodes de nettoyage des chaînes.
Pour le remplissage, "7".zfill(3) donne "007", "Total".ljust(8) ajoute trois espaces à droite et "Hi".center(8, "*") donne "***Hi***". rjust() ajoute du remplissage à gauche. Ces largeurs sont des minimums ; un texte plus long est conservé en entier.
Points clés
- Utilise la notation pointée et des parenthèses pour appeler une méthode de chaîne.
- Les opérations sur la casse ont des fonctions différentes ;
casefold()permet des comparaisons entre langues. strip(chars)supprime un ensemble de caractères aux extrémités ; pour des préfixes ou suffixes exacts, utiliseremoveprefix()ouremovesuffix().replace()recherche du texte exact et peut limiter le nombre de modifications.- Les chaînes de transformations s’exécutent de gauche à droite sur chaque chaîne renvoyée.
- Le remplissage ajoute des caractères jusqu’à une largeur minimale.
3.2 Rechercher du texte dans une chaîne
Une recherche peut répondre à trois questions différentes : si un texte est présent, où il commence et combien de fois il apparaît. Choisis le résultat qui convient à la décision que ton programme doit prendre.
Choisir un résultat de recherche
| Outil | Résultat | En l’absence de correspondance |
|---|---|---|
sub in text | Présence sous forme de True ou False | False |
text.find(sub) | Premier indice de début | -1 |
text.rfind(sub) | Dernier indice de début | -1 |
text.index(sub) | Premier indice de début | Lève ValueError |
text.count(sub) | Nombre d’occurrences sans chevauchement | 0 |
Une sous-chaîne est une suite de caractères consécutifs. "py" in "happy" vaut True, mais "hpy" in "happy" vaut False. La recherche respecte la casse : "Py" in "python" vaut False. not in inverse le test de présence. La chaîne vide est présente dans toute chaîne.
Trouver la bonne occurrence
text = "banana"
print(text.find("an")) # 1
print(text.find("an", 2)) # 3
print(text.rfind("an")) # 3
La position de début facultative ignore les possibilités précédentes. L’indice renvoyé reste compté depuis le début de la chaîne entière. index() renvoie la même position lorsqu’une correspondance existe, mais l’erreur levée en son absence rend cette méthode utile lorsque l’absence indique un problème inattendu.
Vérifier une position avant d’extraire une tranche
email = "maria.lopez@example.org"
at = email.find("@")
if at != -1:
user = email[:at]
domain = email[at + 1:]
print(user) # maria.lopez
print(domain) # example.org
La recherche renvoie 11. La première tranche s’arrête avant @ ; la seconde commence un caractère après. Si le repère était absent, at vaudrait -1. Utiliser cette valeur comme borne de tranche sélectionnerait du texte près de la fin sans signaler d’erreur : traite donc le cas où le repère manque avant d’extraire les parties.
N’utilise pas if text.find("x"): comme test de présence. Une correspondance à l’indice 0 est considérée comme fausse dans une condition, tandis que la valeur -1, qui indique l’absence de résultat, est considérée comme vraie. Utilise if "x" in text: ou compare explicitement la position à -1.
Rechercher à partir d’un repère connu
Pour line = "Order #4521 shipped", le numéro suit # et se termine à l’espace suivant :
start = line.find("#") + 1
end = line.find(" ", start)
number = line[start:end]
print(number) # 4521
Ici, les deux repères existent. Commencer la seconde recherche à start permet d’ignorer l’espace précédent après Order. Si des repères peuvent manquer, vérifie chaque résultat de recherche brut avant d’ajouter un ou d’extraire une tranche ; ajouter un à -1 masquerait l’échec de la recherche en transformant le résultat en 0.
Compter les occurrences entières
"banana".count("a") vaut 3, et "banana".count("ana") vaut 1. Les deux occurrences possibles de ana se chevauchent, donc count() ne les compte pas toutes les deux. De même, "aaaa".count("aa") vaut 2.
Pour ignorer la casse, effectue la recherche dans une version convertie, comme avec "python" in sentence.lower(). La recherche trouve toujours les caractères exacts dans cette version. Les comptages et les tests de présence peuvent utiliser directement la chaîne convertie ; un indice appartient à la chaîne précise dans laquelle la recherche a été effectuée.
Points clés
- Utilise
inpour la présence, une méthode de recherche pour la position etcount()pour le nombre d’occurrences. find()etrfind()renvoient -1 lorsque le texte est absent ;index()lèveValueError.- Vérifie le résultat d’une recherche avant de l’utiliser comme indice ou comme borne de tranche.
- Un argument de début ignore les correspondances précédentes tout en conservant les indices de la chaîne entière.
count()compte les occurrences sans chevauchement.
3.3 Tester et comparer des chaînes
Les tests sur les chaînes renvoient des booléens qui peuvent guider une condition. Ils t’aident à accepter une saisie conforme à une règle et à comparer du texte sous une forme cohérente.
Tester les extrémités ou les caractères
startswith() et endswith() testent un texte exact aux extrémités. Un tuple permet à un test d’accepter plusieurs fins : name.endswith((".jpg", ".png")). La chaîne "photo.PNG", dont l’extension est en majuscules, échoue à ce test sauf si tu la convertis d’abord en minuscules.
| Test | Vrai lorsque la chaîne non vide contient… |
|---|---|
isalpha() | Uniquement des lettres |
isalnum() | Uniquement des lettres ou des chiffres |
isdigit() | Uniquement des caractères Unicode qui sont des chiffres |
isdecimal() | Uniquement des chiffres décimaux |
isspace() | Uniquement des caractères d’espacement |
Les cinq renvoient False pour "". Les lettres ne se limitent pas à l’alphabet anglais : "café".isalpha() vaut True. L’espace dans "hello world" rend le test isalpha() faux.
isupper() et islower() examinent les caractères qui ont une casse et en exigent au moins un. "ABC1".isupper() vaut True ; le chiffre ne change rien au fait que les lettres sont en majuscules. "123" ne contient aucun caractère ayant une casse, donc les deux tests sont faux.
Valider avant la conversion
Un test de chiffres ne décrit pas tous les nombres que Python peut lire. "-5".isdigit(), "3.5".isdigit() et " 42".isdigit() sont faux, car un signe, un point ou une espace n’est pas un chiffre. De plus, "²".isdigit() est vrai alors que int("²") échoue. isdecimal() rejette ce caractère en exposant et convient à une saisie d’entier positif ou nul écrite uniquement avec des chiffres.
text = input("Tickets: ").strip()
if text.isdecimal() and int(text) > 0:
print("Accepted")
else:
print("Enter a positive whole number")
Le test de chaîne s’exécute en premier. Lorsqu’il est faux, and ignore la conversion, ce qui protège le programme contre une saisie vide ou non numérique. " 12 " devient "12" et réussit le test ; "0" se convertit sans erreur, mais échoue au test de valeur positive. Cette règle rejette volontairement les saisies comportant un signe ou un point décimal.
Une règle pour un nom d’utilisateur peut combiner des vérifications de longueur et de caractères : 3 <= len(name) <= 12 and name.isalnum(). "ada99" réussit, "ada 99" échoue au test de caractères et "ad" échoue au test de longueur.
Comparer du texte nettoyé
L’égalité exige les mêmes caractères dans le même ordre. "Yes" == "yes" et "yes " == "yes" sont faux. Pour les réponses dont la casse et les caractères d’espacement aux extrémités doivent être ignorés, compare typed.strip().casefold() à expected.strip().casefold().
Le classement s’effectue caractère par caractère. Le premier point de code Unicode différent détermine le résultat. ord("A") vaut 65, ord("Z") vaut 90 et ord("a") vaut 97 ; chr(97) donne "a". Ainsi, "Zebra" < "apple" est vrai. Lorsqu’une chaîne est un préfixe de l’autre, la plus courte vient en premier : "app" < "apple".
Les chaînes de chiffres suivent aussi l’ordre des caractères : "10" < "9" est vrai parce que "1" vient avant "9". Convertis-les en nombres pour comparer des quantités. Les lettres accentuées demandent aussi de l’attention : ord("é") vaut 233, donc "école" > "zoo" est vrai. Cet ordre intégré suit les points de code, et non l’ordre d’un dictionnaire de langue.
Points clés
- Les tests sur les chaînes renvoient des booléens ; les tests de caractères vérifient aussi que la chaîne n’est pas vide.
isdecimal()est plus strict queisdigit()pour une saisie destinée àint().- Utilise un test de caractères avant une conversion numérique protégée.
- Nettoie les deux chaînes de la même façon lorsque la casse et les espaces aux extrémités ne doivent pas compter.
- L’ordre des chaînes dépend du premier point de code différent ; l’ordre numérique nécessite des valeurs numériques.
4Découper du texte en parties et assembler des parties en texte
Une ligne de texte contient souvent plusieurs éléments utiles : des mots dans un message, des champs dans un enregistrement ou des parties d’un code. Le découpage transforme cette ligne en une collection ordonnée que tu peux examiner, compter et convertir. L’assemblage construit une chaîne à partir d’éléments en utilisant le séparateur de ton choix. Les règles du séparateur déterminent si les champs vides et les espacements d’origine sont conservés : le choix compte donc lorsque tu nettoies du texte ou que tu dois le reconstituer exactement.
4.1 Découper une chaîne en une liste de parties
split() transforme une chaîne en une liste de chaînes. Une liste est une collection ordonnée écrite entre crochets. Tu peux lire un élément par son indice, parcourir les éléments ou les compter avec len().
Choisir les caractères d’espacement ou un séparateur exact
Sans argument, split() traite une suite de caractères d’espacement comme une seule séparation et ignore ceux qui se trouvent aux deux extrémités :
words = " the quick brown fox ".split()
print(words) # ['the', 'quick', 'brown', 'fox']
print(len(words)) # 4
print(words[0]) # the
Avec un séparateur explicite, chaque occurrence exacte produit un découpage. Des séparateurs consécutifs conservent un champ vide :
fields = "red,green,,blue".split(",")
# ["red", "green", "", "blue"]
Le troisième élément vide peut représenter une valeur laissée vide. Il compte tout de même comme un élément de la liste.
| Expression | Résultat |
|---|---|
"a b".split() | ["a", "b"] |
"a b".split(" ") | ["a", "", "b"] |
"a,b".split(", ") | ["a,b"] |
Un séparateur peut contenir plusieurs caractères, mais ils doivent tous correspondre. Si aucun séparateur n’apparaît, le résultat contient la chaîne d’origine entière comme seul élément. Découper sur une virgule suivie d’une espace diffère donc d’un découpage sur une virgule.
Limiter le découpage du texte
Le deuxième argument, maxsplit, limite le nombre de découpages, et non le nombre d’éléments obtenus :
print("key=value=more".split("=", 1))
# ["key", "value=more"]
print("archive.tar.gz".rsplit(".", 1))
# ["archive.tar", "gz"]
split() commence par la gauche ; rsplit() commence par la droite. Un découpage depuis la droite sépare la dernière extension du fichier sans découper aux points précédents.
Lire les champs et convertir les quantités
line = "Lovelace,Ada,1815"
parts = line.split(",")
if len(parts) == 3:
last = parts[0]
first = parts[1]
year = int(parts[2])
print(f"{first} {last} was born in {year}.")
La sortie est "Ada Lovelace was born in 1815.". La vérification de la longueur empêche qu’un élément manquant provoque IndexError. Elle ne vérifie pas que l’année est numérique ; une règle de saisie distincte est nécessaire lorsque les données peuvent être invalides.
Chaque partie obtenue par découpage est d’abord une chaîne. Pour faire le total de "3 14 15", initialise total = 0, parcours line.split() et ajoute int(part). Le résultat est 32 ; concaténer les éléments sans les convertir assemblerait les chiffres.
Un séparateur explicite conserve les espaces qui entourent les éléments. "a, b".split(",") donne ["a", " b"]. Appelle strip() sur chaque partie si ces espaces sont indésirables.
Reconnaître deux résultats apparentés
splitlines() découpe aux sauts de ligne : "line one\nline two".splitlines() donne deux chaînes. partition("=") renvoie toujours un tuple de trois parties : le texte avant le premier séparateur, le séparateur et le texte après. "user=ada".partition("=") donne ("user", "=", "ada") ; avec "user", il donne ("user", "", "").
Points clés
split()renvoie une liste ordonnée de chaînes.- Le découpage sur les caractères d’espacement regroupe leurs suites ; les séparateurs explicites conservent les champs vides.
maxsplitlimite les découpages etrsplit()commence par la droite.- Vérifie le nombre de champs avant l’accès par indice et convertis les champs numériques avant les calculs.
splitlines()sépare les lignes ;partition()renvoie le texte avant, le séparateur et le texte après.
4.2 Assembler des chaînes avec un séparateur
join() construit une chaîne à partir d’une séquence de chaînes. La chaîne placée avant le point fournit le séparateur, qui apparaît entre les éléments voisins.
Placer le séparateur en premier
colors = ["red", "green", "blue"]
text = ", ".join(colors)
print(text) # red, green, blue
Lis cela comme « utilise une virgule suivie d’une espace pour assembler les couleurs ». Il n’y a pas de séparateur avant le premier élément ni après le dernier. Tu peux changer la présentation de la sortie en modifiant uniquement le séparateur :
| Expression | Résultat |
|---|---|
"".join(["a", "b", "c"]) | "abc" |
"-".join(["a", "b", "c"]) | "a-b-c" |
"\n".join(["a", "b", "c"]) | Un élément sur chaque ligne |
join() appartient à la chaîne qui sert de séparateur. Écrire ["a", "b"].join(",") lève AttributeError, car la liste n’a pas de méthode join. Un seul appel s’adapte aussi au nombre d’éléments ; tu n’as pas besoin d’écrire une nouvelle suite d’opérations + pour chaque longueur de liste.
Convertir d’abord les éléments qui ne sont pas des chaînes
Tous les éléments doivent déjà être des chaînes. ", ".join([1, 2, 3]) lève TypeError. map(str, items) applique str() à chaque élément, donc ceci fonctionne :
items = [1, 2, 3]
text = " ".join(map(str, items))
print(text) # 1 2 3
Le str passé à map() est la fonction de conversion. join() reçoit les éléments convertis et renvoie une chaîne.
Une chaîne est elle-même une séquence de chaînes d’un caractère : " ".join("ABC") donne donc "A B C". Cela peut être utile, mais passer un seul mot alors que tu voulais une liste de mots place des séparateurs entre ses caractères.
Modifier les espacements et les séparateurs
text = "too many spaces"
cleaned = " ".join(text.split())
print(cleaned) # too many spaces
Le découpage sur les caractères d’espacement produit d’abord les trois mots. Les assembler avec une seule espace crée un espacement uniforme et ne laisse aucune espace aux extrémités. Les espacements d’origine sont perdus à l’étape du découpage.
Avec un séparateur explicite, les champs vides conservent assez d’informations pour reconstituer le texte exact. Si s = "a,,b,", alors s.split(",") donne ["a", "", "b", ""], et ",".join(...) redonne "a,,b,". Le séparateur doit être le même pour cette reconstitution exacte.
Changer le séparateur change la présentation : "-".join("2026/07/04".split("/")) donne "2026-07-04". Ici, replace("/", "-") est aussi une solution directe.
Recueillir un petit résultat à partir de mots
Pour obtenir un sigle, découpe "portable network graphics", commence par acronym = "" et ajoute word[0].upper() pour chaque mot. Le découpage sur les caractères d’espacement fournit des mots non vides, donc leurs premiers caractères existent. Cela construit "PNG". Si les lettres sont déjà dans une liste, ".".join(["P", "N", "G"]) construit "P.N.G" sans point final.
Points clés
- Appelle
join()sur le séparateur en lui passant les éléments comme argument. - Les séparateurs apparaissent uniquement entre les éléments, et chaque élément doit être une chaîne.
- Découper sur les caractères d’espacement et assembler avec une seule espace uniformise les espacements.
- Assembler avec le même séparateur explicite peut reconstituer le texte, y compris les champs vides.
5Mettre en forme l’affichage avec des f-strings
Une sortie utile associe une valeur correcte à une présentation lisible. Une f-string place des valeurs et des expressions directement dans le texte, puis te permet de choisir l’apparence de chaque champ : décimales, groupement, signes, dates ou colonnes alignées. Sépare le calcul de l’affichage. Un champ peut afficher deux décimales ou un nom raccourci tandis que la variable d’origine conserve sa valeur complète pour des calculs ultérieurs ou un autre affichage.
5.1 Insérer des valeurs dans du texte avec des f-strings
Une f-string est un littéral de chaîne qui comporte f ou F avant son guillemet ouvrant. À l’intérieur, les accolades contiennent des expressions dont les valeurs sont insérées dans le texte.
Insérer des variables et des expressions
name = "Ada"
age = 36
message = f"{name} is {age} years old."
print(message) # Ada is 36 years old.
Les nombres deviennent automatiquement du texte dans un champ. Le même message pourrait utiliser la concaténation et str(age), mais la f-string permet de voir la présentation finale en un seul endroit.
Les accolades peuvent contenir des calculs, des appels de méthodes ou des appels de fonctions :
price = 4.5
qty = 3
print(f"Cost: {price * qty}") # Cost: 13.5
print(f"Name: {name.upper()}") # Name: ADA
word = "Python"
print(f"{len(word)} letters") # 6 letters
Python évalue chaque expression lorsque la ligne s’exécute. Une chaîne enregistrée ne reste pas liée aux variables utilisées pour la construire. Si qty change après la construction de message, cette chaîne conserve ses caractères.
Distinguer le texte ordinaire des champs
Sans le préfixe, "Hello {name}" est du texte ordinaire qui conserve ses accolades. L’absence de f est une raison fréquente pour laquelle un programme affiche le nom de la variable au lieu de sa valeur. Avec le préfixe, un nom auquel aucune valeur n’a été affectée lève NameError lorsque l’expression s’exécute.
Pour afficher une accolade littérale, double-la :
x = 5
print(f"{{x}} = {x}") # {x} = 5
Les accolades doublées fournissent le texte littéral {x}. La paire simple autour du dernier x fournit sa valeur.
Garder les expressions entre guillemets faciles à lire
Utilise l’autre type de guillemets à l’intérieur d’un champ :
print(f"Shout: {'hi'.upper()}") # Shout: HI
Cette écriture fonctionne dans toutes les versions de Python qui proposent les f-strings, apparues dans la version 3.6. Python 3.12 et les versions ultérieures permettent aussi de réutiliser le type de guillemets extérieur à l’intérieur du champ. Les séquences d’échappement fonctionnent toujours dans les f-strings : f"Name: {name}\nAge: {age}" s’affiche sur deux lignes.
Pour un affichage rapide lors du débogage, Python 3.8 et les versions ultérieures acceptent = après une expression. Avec x = 5, f"{x=}" donne "x=5" ; avec total = 12, f"{total = }" donne "total = 12". Les espaces saisies autour de l’expression et du signe égal apparaissent à l’affichage.
Lire les anciennes formes de mise en forme
Le code Python existant peut construire le même texte d’autres façons :
| Forme | Exemple | Résultat |
|---|---|---|
| F-string | f"{name} is {age}" | "Ada is 36" |
| Méthode de chaîne | "{} is {}".format(name, age) | "Ada is 36" |
| Mise en forme avec le signe pourcentage | "%s is %d" % (name, age) | "Ada is 36" |
str.format() remplit les champs entre accolades avec ses arguments. Des champs numérotés peuvent réutiliser un argument : "{0} {1} {0}".format("a", "b") donne "a b a". Dans la mise en forme avec le signe pourcentage, %s insère du texte et %d un entier. Reconnaître ces champs t’aide à lire un programme, même s’il a été écrit avant que les f-strings soient courantes.
Points clés
- Une f-string nécessite un préfixe
fet des accolades autour de chaque expression. - Les champs sont évalués à l’exécution de la f-string ; le texte enregistré ne se met pas à jour ensuite.
- Des accolades doublées affichent des accolades littérales.
str.format()et la mise en forme avec le signe pourcentage sont d’anciennes façons d’insérer des valeurs.
5.2 Mettre en forme des nombres, des dates et des heures pour les lecteurs
Une spécification de format contrôle la façon dont une valeur est affichée. Place deux-points après l’expression, puis les instructions : f"{value:spec}". La mise en forme renvoie du texte et laisse la valeur numérique d’origine inchangée.
Définir le nombre de décimales et comprendre l’arrondi
.Nf affiche exactement N chiffres après le point décimal. f"{3.14159:.2f}" donne "3.14", f"{2/3:.3f}" donne "0.667" et f"{5:.2f}" donne "5.00". .0f n’affiche pas de point décimal : f"{7.6:.0f}" donne "8".
L’arrondi utilise la valeur réellement stockée. La plupart des fractions décimales sont des approximations binaires très proches. Le flottant 2.675 est légèrement inférieur à cette valeur décimale exacte, donc f"{2.675:.2f}" donne "2.67". Les valeurs exactement à mi-chemin sont arrondies au chiffre final pair : 0.125 s’affiche sous la forme "0.12", tandis que 0.375 s’affiche sous la forme "0.38" avec deux décimales. f"{2.5:.0f}" donne "2". Les programmes qui nécessitent des calculs d’argent exacts stockent souvent les centimes entiers sous forme d’entiers.
Ajouter le groupement et les pourcentages
| Spécification | Exemple de résultat |
|---|---|
f"{1234567:,}" | "1,234,567" |
f"{1234567:_}" | "1_234_567" |
f"{1234567.891:,.2f}" | "1,234,567.89" |
f"{0.256:.1%}" | "25.6%" |
Une virgule groupe les milliers ; le point introduit la précision décimale. Pour un montant en dollars, garde le symbole dollar en dehors du champ : avec amount = 1250.5, f"${amount:,.2f}" donne "$1,250.50".
Le type % multiplie par 100 et ajoute %. Utilise une fraction comme 0.256 pour afficher 25.6%. Si tu fournis 25.6, le pourcentage affiché est multiplié une nouvelle fois. Sans précision explicite, % affiche six décimales.
Mettre en forme les entiers et les parties d’une date
d sert aux entiers. f"{42:d}" fonctionne, mais f"{3.0:d}" lève ValueError, car un flottant n’est pas un entier. Un zéro placé avant une largeur ajoute un remplissage par des zéros ; un signe plus demande l’affichage du signe :
print(f"{7:03d}") # 007
print(f"{5:+d}") # +5
print(f"{-5:+d}") # -5
Pour le mois 7, le jour 4 et l’année 2026, f"{month:02d}/{day:02d}/{year}" construit "07/04/2026". Pour l’heure 9 et les minutes 5, f"{hour}:{minute:02d}" construit "9:05". Le remplissage par des zéros empêche que des minutes à un chiffre apparaissent sous la forme "9:5".
Combiner les instructions dans l’ordre
L’ordre est le suivant : caractère de remplissage, alignement, signe, zéro, largeur, groupement, précision, type. Tu peux omettre les parties inutiles. f"{12345.678:>12,.2f}" utilise un alignement à droite, une largeur de 12, un groupement par virgule et deux décimales, ce qui donne " 12,345.68".
La précision peut provenir d’une autre variable : avec places = 3, f"{3.14159:.{places}f}" donne "3.142". Les mêmes spécifications fonctionnent dans les champs de format(value, spec) et de str.format(). Garde le nombre d’origine pour les calculs ; round(value, 2) renvoie un nombre arrondi lorsque le calcul l’exige.
Points clés
- Deux-points introduisent les instructions d’affichage ; la valeur stockée ne change pas.
- La précision en format à virgule fixe détermine le nombre de décimales et l’arrondi suit la valeur stockée.
- Une virgule groupe les milliers ;
%multiplie une fraction par 100. dexige un entier ; le remplissage par des zéros garde les parties des dates et des heures lisibles.- Garde les nombres pour les calculs et mets-les en forme au moment de l’affichage.
5.3 Aligner l’affichage en colonnes
Une largeur de champ réserve un nombre minimal de positions de caractères pour une valeur. Combiner les largeurs rend les petits tableaux et les reçus lisibles dans un terminal.
Choisir la largeur et l’alignement
Par défaut, les chaînes s’alignent à gauche et les nombres à droite. f"{'cat':6}" donne "cat ", tandis que f"{42:6}" donne " 42". Utilise un caractère d’alignement pour choisir explicitement :
| Caractère | Signification | Exemple |
|---|---|---|
< | Gauche | f"{'hi':<6}" donne "hi " |
> | Droite | f"{'hi':>6}" donne " hi" |
^ | Centré | f"{'hi':^6}" donne " hi " |
Lorsque le centrage laisse un nombre impair d’espaces, l’alignement des f-strings place l’espace supplémentaire à droite : f"{'hi':^7}" donne " hi ".
La largeur est un minimum. f"{'elephant':4}" donne toujours "elephant" ; le mot n’est pas tronqué. Une entrée longue peut donc désaligner les colonnes suivantes.
Ajouter un caractère de remplissage ou limiter le texte
Un caractère de remplissage se place immédiatement avant l’alignement. f"{'hi':*^10}" donne "****hi****", et f"{7:0>3}" donne "007". Le remplissage nécessite un caractère d’alignement. f"{'':-^20}" remplit un champ vide avec vingt tirets.
La précision de chaîne limite le nombre de caractères affichés :
place = "Washington"
print(f"{place:.4}") # Wash
print(f"|{place:10.4}|") # |Wash |
La précision limite d’abord le texte affiché à quatre caractères ; la largeur le complète ensuite jusqu’à dix. Utilise une largeur et une précision adaptées lorsque le texte doit rester dans une colonne fixe. La valeur d’origine de place est toujours "Washington".
Construire une ligne de reçu
item = "Apples"
qty = 3
price = 4.50
row = f"{item:<8}{qty:>4}{qty * price:>9.2f}"
print(row)
Le résultat est "Apples 3 13.50". Le champ de l’article contient six lettres et deux espaces. Le champ de quantité ajoute trois espaces avant 3. Le champ de coût ajoute quatre espaces avant 13.50, qui comporte cinq caractères. Ensemble, les champs occupent 21 caractères.
Réutilise ces largeurs pour le pain (1 à 2,25) et le café (2 à 11,00). Leurs lignes sont "Bread 1 2.25" et "Coffee 2 22.00". Une ligne de total peut combiner les deux premiers champs :
print(f"{'Total':<12}{37.75:>9.2f}")
# "Total 37.75"
Le champ de coût commence à la même position et comporte le même nombre de décimales, donc les montants sont alignés.
Adapter la présentation à son affichage
Choisis des largeurs qui laissent assez de place pour les entrées les plus longues et les espacements, ou raccourcis volontairement le texte. Une variable peut fournir une largeur : avec w = 10, f"{name:<{w}}" complète name jusqu’à dix caractères.
Les colonnes fondées sur les caractères nécessitent une police à chasse fixe, comme celle d’un terminal. Pour un remplissage simple hors d’une f-string, ljust() et rjust() se comportent comme < et >. center() et ^ centrent tous deux le texte, mais peuvent répartir différemment un remplissage impair : "hi".center(7) donne " hi ", tandis que f"{'hi':^7}" donne " hi ".
Points clés
- La largeur définit un minimum ; l’alignement détermine où placer le remplissage.
- Le caractère de remplissage précède l’alignement et la précision de chaîne limite les caractères affichés.
- Utilise les mêmes largeurs de champ et le même nombre de décimales sur chaque ligne.
- Choisis un affichage à chasse fixe pour les colonnes fondées sur les caractères.
center()et le centrage des f-strings peuvent placer différemment un remplissage impair.
Chaînes de caractères en Python : exemples
1Décomposer un code caractère par caractère
14 étapes
- 1IntroductionLire une étiquette de stockage
Une étiquette de stockage contient des lettres, un trait d’union et des chiffres :
"Box-482". C’est une chaîne de caractères, et chaque caractère possède un indice. Un programme peut avoir besoin de la première lettre, du dernier chiffre ou de toute la partie numérique (une tranche).Tu vas construire l’étiquette, représenter ses positions et sélectionner ses parties. Suis les caractères exacts à chaque étape ; une espace ou un séparateur modifie les positions tout comme une lettre.
- 2ExplicationDistinguer la syntaxe du texte stocké
Une chaîne de caractères est une séquence ordonnée de caractères. Les guillemets extérieurs indiquent à Python où un littéral commence et se termine ; ils ne font pas partie de sa valeur.
label = "Box-482" print(len(label)) # 7Le trait d’union est l’un des sept caractères. Des guillemets simples pourraient délimiter la même valeur. Tu peux aussi stocker un texte vide avec
"", dont la longueur est nulle. - 3ExempleConstruire l’étiquette à partir d’éléments
Commence avec le mot et un code numérique :
kind = "Box" number = 482 label = kind + "-" + str(number)str(number)produit"482", puis les deux concaténations construisent"Box-482". Le trait d’union apparaît parce qu’il est fourni comme élément. Omettrestr()tenterait de concaténer une chaîne et un entier, ce qui lèveTypeError. - 4DéfiCompter les caractères d’une valeur avec une séquence d’échappement
Un court message est stocké sous la forme
notice = "A\nB!". Quelle est sa longueur et combien de lignesprint(notice)affiche-t-il ?---reveal---
La longueur est
4:A, un saut de ligne,Bet!. L’affichage comporte deux lignes, avecAsur la première etB!sur la seconde. La séquence d’échappement est traitée à la lecture du littéral ; l’affichage révèle le saut de ligne déjà présent dans sa valeur. - 5AnalogieAttribuer un numéro à chaque position
Imagine l’étiquette comme sept cases numérotées à la suite. La numérotation commence à zéro :
Character: B o x - 4 8 2 Index: 0 1 2 3 4 5 6label[0]donne"B", etlabel[4]donne"4". Le résultat est une chaîne d’un caractère, même lorsqu’il ressemble à un nombre. La position7serait la huitième case, qui n’existe pas dans cette étiquette. - 6ExplicationCompter à rebours depuis le dernier caractère
Les indices négatifs utilisent la fin comme point de référence. Pour
"Box-482",label[-1]vaut"2"etlabel[-3]vaut"4".L’équivalent positif ou nul de
-3estlen(label) - 3, soit4. Les deux sélectionnent le même caractère. Il n’y a pas de position zéro négative à la fin :-0est simplement0, donc cet indice sélectionne toujours le premier caractère. - 7DéfiSélectionner un caractère sans exécuter le code
Pour
code = "Tin-739", que vautcode[-2]? Est-ce quecode[len(code)]sélectionnerait le dernier caractère ?---reveal---
code[-2]vaut"3", le caractère juste avant le9final.code[len(code)]lèveIndexError: une longueur de sept correspond à des indices allant de zéro à six. L’expression qui désigne le dernier caractère estcode[len(code) - 1], oucode[-1]. - 8ConseilProtéger la lecture d’un caractère
Une saisie vide n’a pas de caractère à l’indice zéro. Place la vérification de la longueur avant la lecture du caractère :
if len(label) > 0 and label[0] == "B": print("Begins with B")Lorsque le premier test est faux,
andignore le second. Cet ordre est important : placerlabel[0]en premier provoquerait déjà une erreur sur une saisie vide avant que Python puisse atteindre la vérification de longueur. - 9ExplicationSélectionner toute la partie numérique
Une tranche inclut son début et exclut sa fin :
label = "Box-482" number_text = label[4:7] print(number_text) # 482Les positions
4,5et6fournissent les chiffres. La fin7est la borne après le dernier caractère. Comme la sélection va jusqu’à la fin,label[4:]donne le même résultat. Aucune conversion n’a lieu ; la tranche reste du texte. - 10ExempleFaire se rejoindre les deux tranches
La partie gauche se termine à la borne où commence la partie numérique :
left = label[:4] # "Box-" right = label[4:] # "482" print(left + right) # Box-482La borne commune
4fait se rejoindre les parties sans espace ni chevauchement. C’est pourquois[:k] + s[k:]reconstitue une chaîne. Utiliserlabel[:3]exclurait le trait d’union du résultat reconstitué. - 11Point cléUne borne de tranche peut dépasser la fin
Compare
label[99]àlabel[4:99]. L’indice seul lèveIndexError, mais la tranche donne"482".Une tranche ramène une borne qui dépasse la chaîne à son extrémité disponible.
label[99:]donne donc un texte vide. C’est utile pour prendre au plus une certaine quantité de texte, mais cela signifie aussi qu’une tranche incorrecte peut renvoyer moins de caractères que prévu sans signaler d’erreur. - 12ExempleInverser uniquement les chiffres sélectionnés
Extrais d’abord les chiffres, puis inverse cette nouvelle chaîne :
digits = label[4:] backward = digits[::-1] print(backward) # 284Un pas négatif parcourt la chaîne à l’envers. Lorsque les deux bornes sont omises, la tranche parcourt tous les caractères du dernier au premier. Un pas positif de deux sauterait une position sur deux. Un pas nul est invalide et lève
ValueError. - 13DéfiConstruire une étiquette modifiée
Pour
label = "Jar-916", que vautlabel[:4] + label[4:][::-1]? Explique quelle partie conserve son ordre.---reveal---
Le résultat est
"Jar-619". La première tranche conserve"Jar-"sans changement. La seconde sélectionne d’abord"916", puis[::-1]inverse uniquement ces chiffres pour donner"619". La concaténation place les deux résultats ensemble sans ajouter de séparateur. - 14RécapitulatifDistinguer les positions des bornes
Utilise un indice pour un caractère et une tranche pour une partie. Les positions commencent à zéro ; les indices négatifs comptent depuis la fin. Une tranche exclut sa fin et son pas contrôle le sens et l’écart entre les caractères.
Suis d’abord les caractères stockés, puis évalue chaque sélection avant de combiner les résultats.
2Construire un code masqué avec une boucle
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionConserver les chiffres et masquer les lettres
- 2ExplicationInitialiser les résultats cumulés
- 3ExemplePrendre une décision pour chaque caractère
- 4ExempleSuivre les passages restants
- 5DéfiSuivre une autre saisie
- 6LienAjouter les positions uniquement si nécessaire
- 7ConseilLaisser une place pour le caractère suivant
- 8Point cléL’ancienne chaîne n’a pas été modifiée
- 9ExempleConserver un autre nom pour l’ancienne valeur
- 10ExempleRemplacer un caractère avec des tranches
- 11DéfiSuivre la valeur et sa copie enregistrée
- 12RécapitulatifSuivre chaque variable pendant la boucle
3Lire et valider un message avec des repères
16 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionTraiter une courte demande
- 2ExempleNettoyer les caractères d’espacement aux extrémités
- 3ExplicationAppeler et chaîner des méthodes
- 4DéfiChoisir une opération sur une fin exacte
- 5LienComparer du texte avec le repliement de casse
- 6ExplicationDemander si, où ou combien de fois
- 7ExempleLocaliser le début du nom
- 8ExempleTrouver la fin après le début
- 9ConseilNe pas confondre position et présence
- 10DéfiExtraire un champ entre des repères
- 11ExempleExtraire le texte du nombre de places
- 12ExplicationTester avant de convertir
- 13DéfiAppliquer la même règle de saisie
- 14Point cléUne comparaison de texte ne compare pas les quantités
- 15DéfiTraiter un champ nettoyé et une recherche infructueuse
- 16RécapitulatifUtiliser chaque résultat pour son rôle prévu
4Transformer un enregistrement en champs et en texte lisible
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionLire un enregistrement simple
- 2ExplicationDécouper avec un séparateur exact
- 3ExempleVérifier les champs avant de les lire
- 4ExempleCalculer avec les valeurs converties
- 5DéfiConserver une valeur manquante
- 6Point cléLe découpage sur les caractères d’espacement produit d’autres éléments
- 7ConseilS’arrêter après le découpage nécessaire
- 8ExempleAssembler les éléments à afficher avec un séparateur
- 9DéfiPrévoir un assemblage avec des éléments vides
- 10LienChoisir entre nettoyage et reconstitution exacte
- 11DéfiCorriger l’affichage d’un enregistrement
- 12RécapitulatifSuivre les types dans l’enregistrement
5Mettre en forme un petit reçu
16 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDonner à un calcul une présentation lisible
- 2ExempleInsérer le coût de la ligne
- 3DéfiRepérer quand l’expression s’exécute
- 4ConseilGarder la syntaxe des champs visible
- 5ExplicationChoisir deux décimales
- 6Point cléArrondir la valeur réellement stockée
- 7ExempleAfficher un taux en pourcentage
- 8DéfiCombiner groupement et décimales
- 9LienCompléter les parties des dates et des heures
- 10ExplicationRéserver les champs du reçu
- 11ExempleCompter les espaces dans une ligne
- 12ConseilLa largeur ne raccourcit pas un article long
- 13DéfiLire un champ rempli et centré
- 14DéfiConstruire une seconde ligne de reçu
- 15LienAdapter la police à la présentation
- 16RécapitulatifSéparer le calcul de la présentation
Chaînes de caractères en Python : QCM
Série 1 : Lire des littéraux, des indices et des tranches10 Questions Pratiques
Question 1 sur 10
len("x\ty!") ?Afficher la réponseMasquer la réponse
x, une tabulation, y et !. Les guillemets extérieurs et les deux symboles écrits pour \t ne sont pas des caractères supplémentaires de la valeur. Compter la séquence d’échappement comme une barre oblique inverse et une lettre donnerait cinq.Question 2 sur 10
"Tag: " + str(8 * 2) produit-il ?Afficher la réponseMasquer la réponse
16, que str() convertit en "16". La concaténation l’ajoute ensuite après "Tag: ". Assembler les chiffres écrits pour obtenir "82" nécessiterait des opérandes de type chaîne ; ici, l’expression multiplie deux entiers avant la conversion.Question 3 sur 10
r"D:\temp" après les deux-points ?Afficher la réponseMasquer la réponse
temp. Dans un littéral ordinaire, le \t initial deviendrait une tabulation. La syntaxe brute n’ajoute pas de seconde barre oblique inverse à la chaîne stockée ; la seule barre écrite reste un seul caractère.Question 4 sur 10
code = "R7K2", que vaut code[-2] ?Afficher la réponseMasquer la réponse
-1 sélectionne "2" et -2 sélectionne "K". La valeur est une chaîne d’un caractère. Compter deux caractères depuis la gauche sélectionnerait "7", mais le signe négatif fait de la fin de la chaîne le point de référence.Question 5 sur 10
word = "orbit", que renvoie word[len(word) // 2] ?Afficher la réponseMasquer la réponse
2. Les indices 0, 1 et 2 sélectionnent o, r et b : "b" est donc le caractère du milieu. TypeError se produirait avec un indice flottant, mais // produit ici un entier.Question 6 sur 10
Que se passe-t-il lorsque ce code s’exécute avec line = "" ?
if len(line) > 0 and line[0] == ";":
print("Skip")
Afficher la réponseMasquer la réponse
and ignore la lecture du caractère et le corps ne s’exécute pas. La chaîne vide provoquerait IndexError si line[0] était évalué. Ici, l’ordre des tests empêche d’utiliser cet indice sur une saisie vide.Question 7 sur 10
"notebook"[2:5] ?Afficher la réponseMasquer la réponse
2, 3 et 4 : t, e et b. L’indice de fin 5 est exclu, donc son o n’apparaît pas. Inclure ce caractère donnerait "tebo", ce qui reviendrait à considérer la fin comme incluse plutôt que comme la première position exclue.Question 8 sur 10
"map"[1:50] ?Afficher la réponseMasquer la réponse
1 et continue jusqu’à la fin, car la borne de fin trop grande est ramenée à la fin de la chaîne. Elle conserve a et p, ce qui donne "ap". Une lecture d’un seul caractère comme "map"[50] lèverait IndexError, mais les bornes de tranche peuvent dépasser les caractères disponibles.Question 9 sur 10
"0123456789"[1:8:3] ?Afficher la réponseMasquer la réponse
1 et avance de trois positions à la fois : 1, 4 et 7. La position suivante serait 10, au-delà de la borne de fin exclue 8. "1357" utilise un pas de deux ; le troisième argument de la tranche indique l’écart entre les positions sélectionnées, et non le nombre de caractères souhaités.Question 10 sur 10
s = "red-blue", que vaut s[-4:][::-1] + s[:3] ?Afficher la réponseMasquer la réponse
"blue" ; inverser cette tranche donne "eulb". Le préfixe s[:3] vaut "red", donc la concaténation donne "eulbred". Le trait d’union à l’indice 3 n’appartient à aucune des deux tranches sélectionnées et n’est pas inséré automatiquement lors de leur assemblage.Série 2 : Suivre les boucles et les nouvelles valeurs de chaîne10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
for ch in "a b!": s’exécute-t-il ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Qu’est-ce qui est affiché ?
total = 0
for ch in "Route 68":
if ch.isdecimal():
total += int(ch)
print(total)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Qu’est-ce qui est affiché ?
for ch in "Cab 53A":
if ch.isdigit():
print(ch)
break
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Qu’est-ce qui est affiché ?
for i, ch in enumerate("lamp"):
if i % 2 == 1:
print(ch, end="")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Quelle valeur est affichée ?
s = "aaabb"
pairs = 0
for i in range(len(s) - 1):
if s[i] == s[i + 1]:
pairs += 1
print(pairs)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Quel texte est affiché ?
s = "north"
i = len(s) - 1
result = ""
while i >= 0:
result += s[i]
i -= 2
print(result)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Que contient b après ce code ?
a = "pine"
b = a
a = a.upper()
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
s = "stone", que produit s[:2] + "X" + s[3:] ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Quelle paire de valeurs est affichée ?
word = "muse"
result = ""
for ch in word:
if ch in "aeiou":
result = ch.upper() + result
else:
result = ch + result
print(word, result)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Qu’affiche ce code ?
s = " west "
s.strip()
s = s + "!"
print(len(s))
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Nettoyer, rechercher et valider du texte10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
" Go Home ".strip().lower() ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
"test.txt".rstrip(".txt") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
"A-a-a".replace("a", "x", 1).lower() ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
"cocoa".rfind("co") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Qu’est-ce qui est affiché ?
s = "label"
p = s.find(":")
print(s[p:])
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Quel texte est extrait ?
s = "Item [K9] ready [Q2]"
a = s.find("[")
b = s.find("]", a)
result = s[a + 1:b]
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
"abababa".count("aba") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
s = raw.strip() puis s.isdecimal() and int(s) > 0. La saisie brute " 08 " réussit-elle le test et quel entier représente-t-elle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
a = " Cedar " et b = "cedar", quelle paire résulte de a == b et de a.strip().casefold() == b.strip().casefold() ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
"24" < "7" et de int("24") < int("7") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Découper des enregistrements et reconstituer du texte10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
len(" one\ttwo three ".split()) ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
"A||C|".split("|") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
"red;blue".split("; ") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Qu’est-ce qui est affiché ?
parts = "Mina;4;6".split(";")
total = int(parts[1]) + int(parts[2])
print(f"{parts[0]}:{total}")
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
"mode=fast=quiet".split("=", 1)[1] ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
"status".partition(":") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
" / ".join("ab") ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
"-".join("x::z:".split(":")) ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
result = " ".join(" bright\n blue sky ".split()) ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
": ".join(map(str, [6, 11])) ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Construire des valeurs et des colonnes lisibles10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
name = "Luca", que produit f"Hi, {name.upper()}!" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Quel texte est affiché ?
n = 4
label = f"{{n}}={n + 2}"
n = 9
print(label)
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
f"{4826.5:,.2f}" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
f"{0.0375:.1%}" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
n = 0.125, quelle paire résulte de f"{n:.2f}" et de n == 0.125 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
month = 11, day = 6, year = 2028, hour = 7 et minute = 3, que produit f"{month:02d}/{day:02d}/{year} {hour}:{minute:02d}" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
f"|{'owl':>5}|" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
name = "seahorse", quels sont le contenu et la longueur de f"{name:6.4}" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
item = "Tea", qty = 2 et price = 3.75, que vaut f"{item:<5}{qty:>2}{qty * price:>7.2f}" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
f"{'otter':3}" ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
Accolade littérale
f"{{open}}" affiche { autour de open sans demander à Python d’évaluer ce nom.Accumulateur
"" peut recueillir uniquement les caractères autres que les espaces pour construire "abc" à partir de "a b c".Affectation d’élément
word[1] = "x" lève TypeError pour une chaîne, même lorsque l’indice un est une position valide.Alignement
< la place à gauche, > à droite et ^ la centre.f"{'hi':>5}" place trois espaces avant le mot ; l’alignement à gauche les place après.Approximation binaire
2.675 est légèrement inférieure à la valeur décimale, donc la mise en forme à deux décimales donne "2.67".Arrondi au pair
0.125 et 0.375 sous les formes "0.12" et "0.38" avec deux décimales.Assemblage
["home", "nora"] avec le séparateur "/" produit "home/nora", avec une barre oblique entre les éléments.B
Borne de tranche
"garden"[:3], la borne de tranche trois est la fin exclue : d est donc laissé de côté et le résultat est "gar".C
Caractère de remplissage
f"{'ok':*^6}" donne "**ok**" en remplissant les positions inutilisées autour du texte.Caractères d’espacement
" \t" ne contient que des caractères d’espacement ; leur suppression aux extrémités retire les deux caractères et laisse un texte vide.Chaînage de méthodes
" OK ".strip().lower() renvoie d’abord "OK", puis convertit ce résultat en "ok".Chaîne de caractères
str, utilisée pour stocker du texte comme des noms, des messages et des codes."Hello, Nora" stocke la salutation, sa virgule et son espace dans une seule valeur textuelle ordonnée.Champ de remplacement
f"Total: {3 * 4}" calcule douze avant d’insérer le résultat après le libellé.Champ vide
"a;;c" sur ";" conserve un champ vide en deuxième position, ce qui préserve une valeur manquante de l’enregistrement.Comparaison sensible à la casse
"Ready" == "ready" faux tant que les deux valeurs n’ont pas une casse uniforme.Compteur
"Bay 27" augmente pour 2 et 7 et finit avec deux correspondances après la boucle.Concaténation
"rain" + "coat" donne "raincoat" ; pour ajouter une espace, il faut un élément qui en contient une.Conversion avec map()
map() applique une fonction à chaque élément d’entrée, ce qui permet à str de fournir les éléments de type chaîne exigés par join().map() dans ", ".join(map(str, [3, 8])) fournit des chaînes avant de les assembler en "3, 8".Conversion de champ
int() avant une addition."12" en entier avant qu’il puisse être additionné numériquement à cinq.Conversion de point de code
ord() pour obtenir le numéro Unicode d’un caractère et chr() pour obtenir le caractère correspondant à un tel numéro.ord("A") donne 65, et la conversion inverse avec chr(65) donne "A".E
enumerate()
enumerate() fournit chaque élément d’une séquence avec son indice, ce qui permet à une boucle d’utiliser les deux sans accès distinct.enumerate("sun") reçoit des paires indice-caractère qui commencent par 0, "s" et se terminent par 2, "n".Erreur de décalage d’une unité
text[len(text)] provoque une lecture au-delà de la fin ; soustraire un donne l’indice du dernier caractère.É
Évaluation en court-circuit
s.isdecimal() and int(s) > 0 ignore la conversion lorsque le test de caractères échoue.F
F-string
f qui évalue les expressions dans des champs entre accolades et insère leurs valeurs dans le texte obtenu.count = 7, la f-string f"Found {count}" construit "Found 7" sans conversion explicite du nombre en texte.find()
find() renvoie l’indice de début de la première sous-chaîne correspondante, ou -1 si le texte recherché n’apparaît pas."lemon".find("mo") renvoie deux, tandis que "lemon".find("xy") renvoie moins un en l’absence de correspondance.Format à virgule fixe
f pour afficher un nombre avec un nombre choisi de décimales, en arrondissant et en ajoutant des zéros finaux si nécessaire..3f affiche l’entier cinq sous la forme "5.000", avec exactement trois décimales.Format pourcentage
% pour multiplier une fraction par 100 à l’affichage et ajouter un signe pourcentage, avec une précision décimale facultative..0% affiche 0.18 sous la forme "18%" ; fournir dix-huit multiplierait la valeur une seconde fois.G
Groupement des milliers
f"{7654321:,}" affiche "7,654,321", en séparant chaque groupe de trois chiffres.I
Immuabilité
name[0] = "B", tandis que name = "B" + name[1:] construit correctement un nouveau texte.IndexError
"cup"[3] lève IndexError, puisque ses trois caractères occupent les positions de zéro à deux.Indice
label = "desk", l’indice 2 sélectionne "s", puisque les positions commencent avec d à zéro.Indice négatif
-1 désigne le dernier et -len(text) le premier."cloud", l’indice négatif -1 sélectionne "d", tandis que -2 sélectionne le caractère précédent "u".Instruction break
break permet de sortir immédiatement de la boucle courante, par exemple pour arrêter une recherche de caractères après avoir traité le premier caractère correspondant."Zone 81" peut afficher 8 et exécuter break, laissant le 1 suivant sans traitement.L
Largeur de champ
"cat", mais une largeur de deux conserve tout de même le mot entier.Liste
"oak,elm" sur une virgule, la liste contient deux éléments et l’indice un sélectionne la chaîne "elm".Littéral de chaîne
"open" et 'open' utilisent des guillemets extérieurs différents, mais stockent les mêmes quatre caractères.Littéral de chaîne brute
r qui conserve les barres obliques inverses comme caractères littéraux au lieu de traiter les séquences d’échappement ordinaires.r"C:\new" conserve la barre oblique inverse avant new, ce qui empêche que cette paire devienne un saut de ligne.M
Méthode de chaîne
"hello".upper() renvoie "HELLO" ; omettre les parenthèses ne déclenche pas l’appel.N
Nettoyage des caractères d’espacement
" ".join(text.split()) nettoie les extrémités et remplace les suites internes de caractères d’espacement par une seule espace ordinaire." ".join(text.split()) transforme " blue\n sky " en "blue sky", dont les espacements sont uniformes.Nombre maximal de découpages
split() ou rsplit(), en laissant le reste regroupé dans une partie non découpée."a=b=c" depuis la gauche en "a" et "b=c", en conservant les signes égal suivants.O
Occurrences sans chevauchement
count()."aaaa".count("aa") utilisent des positions de caractères différentes, donc le compte est de deux.Ordre lexicographique
"19" avant "3", car leurs premiers caractères différents déterminent la comparaison.P
Palindrome
"radar" réussit le test word == word[::-1] ; il faut uniformiser la casse lorsque celle-ci doit être ignorée dans un texte qui mélange majuscules et minuscules.Parcours de chaîne
for directe ou une boucle while utilisant un indice."go!" visite g, puis o, puis !, ce qui permet de prendre une décision distincte pour chaque caractère.Partition
"color=blue" sur "=" est ("color", "=", "blue") et conserve le séparateur au milieu.Pas de tranche
"abcdef"[::2] sélectionne les indices zéro, deux et quatre, ce qui produit "ace".Point de code Unicode
len() les compte."👍🏽" contient deux points de code Unicode, donc sa chaîne Python a une longueur de deux malgré son apparence.Police à chasse fixe
Position de début de recherche
"cocoa".find("co", 1) ignore l’occurrence à zéro et trouve celle à deux.Précision de chaîne
f"{'sunshine':6.3}" affiche "sun" et trois espaces sans modifier le mot d’origine.R
Réaffectation
a contient "red", la réaffectation avec a += "!" fait référence à "red!" par l’intermédiaire de a, tandis qu’une autre variable peut toujours contenir "red".removeprefix()
removeprefix() supprime un début exact correspondant d’une chaîne et renvoie le texte d’origine lorsque ce début est absent."pretest".removeprefix("pre") donne "test", tandis qu’un préfixe absent laisse le texte inchangé.removesuffix()
removesuffix() supprime une fin exacte correspondante d’une chaîne tout en préservant les autres caractères qu’une suppression aux extrémités pourrait retirer."report.txt".removesuffix(".txt") conserve "report", y compris le t final du nom de base.Remplissage
"5".zfill(3) produit "005", tandis que "1234", déjà plus long, reste inchangé pour une largeur de trois.Remplissage par des zéros
f"{4:02d}" affiche "04", ce qui permet à des minutes d’un chiffre de remplir un champ de deux chiffres.Repliement de casse
"Straße" et "STRASSE" en "strasse", ce qui permet de considérer ces graphies comme égales.rfind()
rfind() renvoie l’indice de début de la dernière sous-chaîne correspondante, en utilisant les positions de la chaîne entière même si elle recherche depuis la droite."a-b-c".rfind("-") renvoie trois et localise le dernier trait d’union avec une position comptée depuis la gauche.S
Séparateur
", " correspond à une virgule suivie d’une espace, donc il ne découpe pas la chaîne "oak,elm".Séparateur vide
join() pour réunir des éléments sans ajouter de caractères entre eux."".join(["a", "b", "c"]) donne "abc" tout en conservant l’ordre des éléments.Séquence d’échappement
"up\ndown", la séquence d’échappement \n stocke un saut de ligne : l’affichage place donc les mots sur deux lignes.Sous-chaîne
"light" est une sous-chaîne de "daylight", mais "dyl" n’en est pas une, car ces lettres ne sont pas consécutives.Spécification de format
f"{8.5:.2f}", la spécification de format .2f sélectionne deux décimales et produit "8.50" pour l’affichage.str.format()
str.format() remplit les champs entre accolades d’une chaîne à l’aide de ses arguments, les champs étant sélectionnés par ordre ou par indice d’argument explicite."{1}, {0}".format("Ada", "Lovelace") utilise str.format() pour placer le second argument avant le premier.Suppression aux extrémités
"..hello!!" avec l’ensemble de caractères ".!" conserve "hello" et laisse le texte intérieur intact.T
Test d’appartenance
in ou not in pour vérifier si une sous-chaîne apparaît et renvoie un booléen sans donner sa position."ice" in "spice" est vrai, tandis que "Ice" avec une majuscule ne correspond pas au même texte.Test de caractères
isalpha() rejettent aussi les chaînes vides."lake9".isalnum() est vrai, tandis que l’espace dans "lake 9" fait échouer cette version.Test de chiffres décimaux
isdecimal(), accepte les chaînes non vides composées de chiffres décimaux et rejette les signes, les points décimaux et les espaces."007", qui se convertit en l’entier sept.Tranche
"window"[1:4] renvoie "ind" en sélectionnant les positions de un à trois et en excluant la position quatre.V
Valeur de retour
text.upper() est du texte en majuscules ; l’affecter à text permet de la conserver pour plus tard.À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.