Aller au contenu

04 Cours Chaînes

Introduction⚓︎

Pour le traitement de données textuelles, Python utilise les chaînes de caractères (string).

Pour délimiter le texte on utilise des guillemets " (double-quote) ou des apostrophes ' (single-quote).

🐍 Script Python
mois1 = 'janvier'
mois2 = "février"
print(mois1, mois2)
📋 Texte
janvier février

Les deux formes sont très utiles car elles permettent d’utiliser des guillemets ou des apostrophes dans des chaînes de caractères de manière simple.

🐍 Script Python
arbre = "l'olivier"
print(arbre)
cuisson_pates = "huit minutes (8')"
print(cuisson_pates)
record_100m = 'neuf secondes et 58 dixièmes (9"58)'
print(record_100m)
📋 Texte
l'olivier
huit minutes (8')
neuf secondes et 58 dixièmes (9"58)

Sinon, pour avoir une apostrophe ou un guillemet dans une chaîne de caractères, il faut le faire précéder d’un \ (backslash). Ce qui est beaucoup moins lisible, mais parfois obligatoire (par exemple une chaîne avec à la fois des guillemets et des apostrophes).

🐍 Script Python
arbre = 'l\'alisier'
pates = '8\''
record = "9\"58"
print(arbre, pates, record)
duel = 'guillemet: " et apostrophes: \' peuvent être utilisés dans une même chaîne...'
print(duel)
multi = '''Dans une "triplequoted" (voire plus loin), on peut (presque) tout utiliser: `"“ ”,'"«»'"' et ça ne pose pas de problème...'''
print(multi)
📋 Texte
l'alisier 8' 9"58
guillemet: " et apostrophes: ' peuvent être utilisés dans une même chaîne...
Dans une "triplequoted" (voire plus loin), on peut (presque) tout utiliser: `"“ ”,'"«»'"' et ça ne pose pas de problème...

Cohérence⚓︎

On ne peut pas mélanger les guillemets et les apostrophes pour délimiter une chaîne de caractères.

🐍 Script Python
a = "azerty'
🐍 Script Python
a = 'azerty"

Les deux instructions précédentes génèrent des erreurs.

Caractères spéciaux⚓︎

Il est possible de définir des chaînes de caractères qui contiennent des caractères spéciaux. Ils sont introduits par des séquences de deux caractères dont le premier est \. On l’appelle le caractère d’échappement.

  • retour à la ligne : \n
  • tabulation : \t
  • backslash : \\
  • un caractère unicode avec son code : \uXXXX (où les XXXX sont le code hexadécimal représentant ce caractère)

Plus d’information dans la documentation officielle

🐍 Script Python
print("Une belle présentation, c'est :")
print('\t- bien ordonné')
print('\t- aligné')
print("\t- même s'il y en a plein\nEt c'est plus joli.")
📋 Texte
Une belle présentation, c'est :
    - bien ordonné
    - aligné
    - même s'il y en a plein
Et c'est plus joli.

Chaînes multilignes⚓︎

Pour écrire plusieurs lignes d’une façon plus lisible, il existe les chaînes multilignes :

🐍 Script Python
# L'équivalent est :
print("""
Une belle présentation, c'est :
\t- bien ordonné
\t- aligné
\t- même s'il y en a plein
Et c'est plus joli.""")
📋 Texte
Une belle présentation, c'est :
    - bien ordonné
    - aligné
    - même s'il y en a plein
Et c'est plus joli.

Les deux formes de délimiteurs sont aussi utilisables : guillemets triples ou apostrophes triples.

🐍 Script Python
multi1 = '''m
a
r
s est un mois "multiligne"'''
print(multi1, '\n')

multi2 = """a
v
r
i
l l'est aussi"""
print(multi2)
📋 Texte
m
a
r
s est un mois "multiligne"

a
v
r
i
l l'est aussi

Unicode⚓︎

En Python 3 , toutes les chaînes de caractères sont unicode, ce qui permet d’utiliser des alphabets différents, des caractères accentués ou des pictogrammes, etc.

Exemples de caractères spéciaux :

🐍 Script Python
unicode_str = "Les échecs (♔♕♖♗♘♙), c'est \u263A"
print(unicode_str)
japanese_str = 'Du japonais : ウェブ'
print(japanese_str)
mix_str = '你好 kollha दुनिया'
print('"' + mix_str + '"', 'veut dire: "bonjour tout le monde"')
📋 Texte
Les échecs (♔♕♖♗♘♙), c'est ☺
Du japonais : ウェブ
"你好 kollha दुनिया" veut dire: "bonjour tout le monde"

Pour une liste de caractères unicode, voir ici.

Concaténation⚓︎

La concaténation est l'opération qui consiste à rassembler des chaînes de caractères en les collant bout à bout.

On peut concaténer deux chaînes de caractères en utilisant l’opérateur + (recommandé) :

🐍 Script Python
gauche = 'Bonjour'
droite = ' tout le monde !'
ensemble = gauche + droite

print(ensemble)
📋 Texte
Bonjour tout le monde !

Chaînes formatées (f-string)⚓︎

Depuis Python 3.6, il existe une syntaxe appelée f-string qui ajoute de la concision et de la lisibilité :

🐍 Script Python
f"La {<variable>:<format>} est nommée dans la chaîne."
🐍 Script Python
import math
print(f'pi sur 3 décimales : {math.pi:.03f}')
📋 Texte
pi sur 3 décimales : 3.142
🐍 Script Python
un_nombre = 1
un_long_nombre = 12345
un_nombre_aligne_vers_la_droite = f"{un_nombre:>5}" # Syntaxe : f"{number:>width}"

print(un_nombre)
print(un_long_nombre)
print(un_nombre_aligne_vers_la_droite)
📋 Texte
1
12345
    1

Le formatage est particulièrement utile pour les dates, par exemple :

🐍 Script Python
jour = 8
mois = 9
annee = 2022
date = f"{jour:02}/{mois:02}/{annee}"
print(date)

📋 Texte
08/09/2022

Accès à un caractère⚓︎

Les caractères d’une chaîne de caractères sont indexés à partir de zéro et s’obtiennent en indiquant leur numéro d’indice entre crochets, comme pour les listes :

🐍 Script Python
mot = "ballon"

print(mot[0])
print(mot[4])
📋 Texte
b
o

On peut aussi accéder à une sous-chaîne de caractères en définissant entre crochets l'intervalle que l'on souhaite :
chaine[a:b] désigne la sous-chaine de chaine qui commence au caractère d'indice a, et termine au caractère d'indice b - 1. Si on omet a, elle commence au début, si on omet b, elle termine à la fin.
On peut aussi numéroter en négatif à partir de la fin.

🐍 Script Python
mot = "ballon"

print(mot[0:3])
print(mot[:3])
print(mot[3:6])
print(mot[3:])
print(mot[3:-1])
📋 Texte
bal
bal
lon
lon
lo

Immutabilité⚓︎

Les chaînes de caractères sont des séquences dites immutables, on ne peut pas les modifier. Toute opération sur des chaînes de caractères revient à en créer une nouvelle du même type, même si celle-ci est temporaire.
Concrètement, chaine[i] permet d'accéder au caractère d'indice i, mais pas de le modifier.

🐍 Script Python
chaine1 = 'abcdefgh'
chaine1[3] = 'D'

print(chaine1)
📋 Texte
TypeError: 'str' object does not support item assignment

Il faut construire une nouvelle chaîne de caractères en concaténant des morceaux (slices) de la chaîne originale :

🐍 Script Python
nouvelle_chaine = chaine1[:3] + 'D' + chaine1[4:]

print(nouvelle_chaine)
📋 Texte
abcDefgh

Ou alors en utilisant une transformation en liste puis à nouveau en chaîne :

🐍 Script Python
a = list(chaine1)
a[3] = 'D'

print(''.join(a))
📋 Texte
abcDefgh
📋 Texte
```

Type str⚓︎

On peut utiliser la fonction str() pour créer une chaîne de caractères à partir d’autres objets.

🐍 Script Python
a = 23
ch_a = str(a)
print(type(a), a)
print(type(ch_a), repr(ch_a))
a = 3.14
ch_a = str(a)
print(type(a), a)
print(type(ch_a), repr(ch_a))
📋 Texte
<class 'int'> 23
<class 'str'> '23'
<class 'float'> 3.14
<class 'str'> '3.14'

Cette fonction s'applique sur les types connus, par exemple les listes :

🐍 Script Python
liste = [1, 2, 3, 4]
print(type(liste), repr(liste))
chaine = str(liste)
print(type(chaine), chaine)
print(type(chaine), repr(chaine))
print("liste[0] = ", liste[0], ", liste[1] = ", liste[1])
print("chaine[0] = ", chaine[0], ", chaine[1] = ", chaine[1])
📋 Texte
<class 'list'> [1, 2, 3, 4]
<class 'str'> [1, 2, 3, 4]
<class 'str'> '[1, 2, 3, 4]'
liste[0] =  1 , liste[1] =  2
chaine[0] =  [ , chaine[1] =  1

Fonctions et méthodes principales⚓︎

Existence : opérateur in⚓︎

On peut savoir si une chaîne se trouve dans une autre :

🐍 Script Python
print('123' in 'azerty_123_uiop')
print('AZE' in 'azerty_123_uiop')
print('aze' not in 'azerty_123_uiop')
📋 Texte
True
False
False

Longueur : fonction len()⚓︎

La longueur d’une chaîne s’obtient avec len().

🐍 Script Python
print(len(non_mutable))
📋 Texte
8

Méthodes :⚓︎

On appelle méthode une fonction qui a été définie pour un certain type d'objets. La syntaxe est :

🐍 Script Python
objet.methode()

Pour les chaînes de caractères, il en existe de nombreuses déjà implémentées dans Python, par exemple :

  • x.replace('old', 'new') : retourne une nouvelle chaîne de caractères contruite à partir de x en remplaçant toutes les occurrence de "old" par "new"
🐍 Script Python
chaine1 = "ababab"
chaine2 = chaine1.replace("a", "c")
print(chaine1)
print(chaine2)
📋 Texte
ababab
cbcbcb
  • x.lower() : retourne une nouvelle chaîne de caractères contruite à partir de x en convertissant les lettres en minuscules
  • x.upper() : retourne une nouvelle chaîne de caractères contruite à partir de x en convertissant les lettres en majuscules
🐍 Script Python
chaine1 = "aba3-bab"
chaine2 = chaine1.upper()
print(chaine1)
print(chaine2)
📋 Texte
aba3-bab
ABA3-BAB

« Multiplication » d’une chaîne de caractères⚓︎

On peut utiliser l’opérateur * pour concaténer un certain nombre de fois une chaîne de caractères avec elle même :

🐍 Script Python
chaine1 = 'edf' * 5
chaine2 = 3 * chaine
chaine3 = 'x' * 7 + 'y' * 7 + 'z' * 7

print(chaine1)
print(chaine2)
print(chaine3)
📋 Texte
edfedfedfedfedf
edfedfedfedfedfedfedfedfedfedfedfedfedfedfedf
xxxxxxxyyyyyyyzzzzzzz