06 - Chaînes de caractères

Définition

Une chaîne de caractères (type str) est une séquence de caractères. C’est le type utilisé par Python pour représenter du texte : un prénom, une phrase, un mot de passe, une adresse e-mail, etc.

On crée une chaîne en plaçant du texte entre guillemets " ou apostrophes ' :

prenom = "Alice"
ville = 'Paris'
print(prenom, "habite à", ville)
Alice habite à Paris

Les deux notations sont équivalentes. Les guillemets doubles sont pratiques lorsque la chaîne contient une apostrophe, et inversement :

phrase1 = "L'informatique est passionnante"
phrase2 = 'Il a dit "bonjour" en entrant'
print(phrase1)
print(phrase2)
L'informatique est passionnante
Il a dit "bonjour" en entrant

Si une chaîne doit contenir à la fois des guillemets et des apostrophes, on utilise le caractère d’échappement \ :

mixte = "Elle a dit : \"c'est formidable\""
print(mixte)
Elle a dit : "c'est formidable"

Longueur d’une chaîne

La fonction len() renvoie le nombre de caractères d’une chaîne :

mot = "Python"
print(len(mot))       # 6

vide = ""
print(len(vide))      # 0

phrase = "Bonjour !"
print(len(phrase))    # 9 (l'espace et le ! comptent)

Accès aux caractères

Les caractères d’une chaîne sont numérotés à partir de zéro. On accède à un caractère en indiquant son indice entre crochets :

mot = "Python"
print(mot[0])    # P  (premier caractère)
print(mot[3])    # h  (quatrième caractère)
print(mot[-1])   # n  (dernier caractère)
print(mot[-2])   # o  (avant-dernier)
Éléments :  P    y    t    h    o    n
Indices + : 0    1    2    3    4    5
Indices - : -6   -5   -4   -3   -2   -1

Attention : un indice hors limites provoque une erreur IndexError.

Immutabilité

Les chaînes sont immuables : on ne peut pas modifier un caractère en place.

mot = "Python"
mot[0] = "J"  # TypeError: 'str' object does not support item assignment

Pour obtenir une chaîne modifiée, il faut en construire une nouvelle :

mot = "Python"
nouveau = "J" + mot[1:]
print(nouveau)  # Jython

Concaténation et répétition

L’opérateur + concatène (assemble) deux chaînes, et l’opérateur * répète une chaîne :

prenom = "Ada"
nom = "Lovelace"
complet = prenom + " " + nom
print(complet)      # Ada Lovelace

tirets = "-" * 20
print(tirets)       # --------------------

motif = "ab" * 4
print(motif)        # abababab

Attention : on ne peut pas concaténer une chaîne et un nombre directement :

age = 17
# print("J'ai " + age + " ans")  # TypeError !
print("J'ai " + str(age) + " ans")  # correct

Les f-strings

Les f-strings (chaînes formatées, depuis Python 3.6) permettent d’insérer des variables et des expressions directement dans une chaîne, en les plaçant entre accolades {} :

prenom = "Alice"
age = 17
print(f"{prenom} a {age} ans")
print(f"Dans 10 ans, {prenom} aura {age + 10} ans")
Alice a 17 ans
Dans 10 ans, Alice aura 27 ans

On peut aussi contrôler le format d’affichage :

import math

# Arrondir un flottant
print(f"Pi vaut environ {math.pi:.2f}")    # 3.14

# Aligner à droite sur 10 caractères
print(f"{'Alice':>10}")                     #      Alice

# Afficher un pourcentage
ratio = 0.85
print(f"Réussite : {ratio:.0%}")            # Réussite : 85%
Pi vaut environ 3.14
     Alice
Réussite : 85%

Caractères spéciaux

Certains caractères ne sont pas directement saisissables. On les écrit à l’aide de séquences d’échappement commençant par \ :

SéquenceSignification
\nRetour à la ligne
\tTabulation
\\Le caractère \ lui-même
\'Apostrophe
\"Guillemet
print("Ligne 1\nLigne 2")
print("Nom\tPrénom\tÂge")
print("Alice\tDupont\t17")
Ligne 1
Ligne 2
Nom	Prénom	Âge
Alice	Dupont	17

Chaînes multilignes

Pour écrire une chaîne sur plusieurs lignes, on utilise les triples guillemets """ ou ''' :

poeme = """Ceci est un texte
qui s'étend sur
plusieurs lignes."""
print(poeme)
Ceci est un texte
qui s'étend sur
plusieurs lignes.

Test d’appartenance

L’opérateur in teste si une sous-chaîne est présente dans une chaîne :

phrase = "Bienvenue en NSI"
print("NSI" in phrase)      # True
print("nsi" in phrase)      # False (sensible à la casse)
print("venu" in phrase)     # True

Résumé

OpérationSyntaxeExemple
Création"..." ou '...'"Bonjour"
Longueurlen(s)len("NSI")3
Accèss[i]"NSI"[0]"N"
Immutabilitéon ne peut pas modifier s[i]construire une nouvelle chaîne
Concaténations1 + s2"Bon" + "jour""Bonjour"
Répétitions * n"ab" * 3"ababab"
Appartenancex in s"a" in "abc"True
f-stringf"...{var}..."f"J'ai {age} ans"

La suite. Les méthodes de manipulation des chaînes (parcours, recherche, découpage, etc.) sont présentées dans le chapitre suivant : 07 - Chaînes : méthodes .