Il est possible de " stocker " plusieurs grandeurs dans une même structure, ce type de structure est appelé une séquence
.De façon plus précise, nous définirons une séquence comme un ensemble fini et ordonné d'éléments indicés de 0 à n-1
(si cette séquence comporte n éléments).
Rassurez-vous, nous reviendrons ci-dessous sur cette définition.
Nous allons étudier plus particulièrement 3 types de séquences :
(il en existe d'autres que nous n'évoquerons pas ici).
Dans ce cours, nous étudirons uniquement Les chaînes de caractères
Les chaînes de caractères ne sont pas comme les entiers, les flottants et les booléens.
Une chaîne de caractères est une séquence, ce qui signifie que c'est une collection ordonnée d'autres valeurs.
Dans cette partie, vous verrez comment accéder aux caractères qui composent une chaîne, et vous apprendrez à utiliser certaines des méthodes que les chaînes de caractères fournissent.
Une chaîne de caractères est une séquence de caractères.
Vous pouvez accéder aux caractères un par un, en utilisant l'opérateur []
d'indexation
fruit = 'banane'
lettre = fruit[1]
La seconde instruction sélectionne le caractère numéroté par 1 de fruit
et l'affecte à lettre.
L'expression entre crochets s'appelle un indice.
L'indice indique quel caractère de la séquence vous voulez (d'où son nom).
lettre
'a'
Pour la plupart des gens, la première lettre du mot 'banane'
est b
, et non a
.
Mais pour les informaticiens, l'indice est un décalage à partir du début de la chaîne, et le décalage de la première lettre est zéro.
lettre = fruit[0]
lettre
'b'
Donc b
est la lettre numéro 0 (la « zéro-ième ») de 'banane'
, a
est la lettre numéro 1 (« un-ième »), et n
est la lettre numéro 2 (« deux-ième »).
Comme indice, vous pouvez utiliser une expression qui contient des variables et des opérateurs:
i = 1
fruit[i]
'a'
fruit[i+1]
'n'
Mais la valeur de l'indice doit être un entier.
Sinon, vous obtenez l'erreur suivante :
lettre = fruit[1.5]
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-6-42f61f666326> in <module> ----> 1 lettre = fruit[1.5] TypeError: string indices must be integers
len()
est une fonction interne qui retourne le nombre des caractères d'une chaîne
fruit = 'banane'
len(fruit)
6
Attention
Pour obtenir la dernière lettre d'une chaîne de caractères, vous pourriez être tentés à écrire quelque chose comme ceci :
longueur = len(fruit)
dernier = fruit[longueur]
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-8-388bf9eed3ed> in <module> 1 longueur = len(fruit) ----> 2 dernier = fruit[longueur] IndexError: string index out of range
Mais cela va provoquer une ERREUR.
La raison de IndexError
est qu'il n'y a aucune lettre dans 'banane'
ayant l'indice 6.
Puisque nous avons commencé à compter à partir de zéro, les six lettres sont numérotées de 0 à 5.
Pour obtenir le dernier caractère, vous devez soustraire 1 de longueur :
dernier = fruit[longueur - 1]
dernier
'e'
Vous pouvez utiliser des indices négatifs, qui comptent à l'envers à partir de la fin de la chaîne.
L'expression :
fruit[-1]
donne la dernière lettre,fruit[-2]
donne l'avant-dernière, fruit[-1]
'e'
fruit[-2]
'n'
Beaucoup de calculs impliquent le traitement d'une chaîne caractère par caractère.
Souvent, ils commencent au début, sélectionnent chaque caractère à tour de rôle, lui font quelque chose et continuent jusqu'à la fin.
Ce modèle de traitement est appelé un parcours.
Une façon d'écrire un tel parcours est une boucle while
index = 0
while index < len(fruit):
lettre = fruit[index]
print(lettre)
index = index + 1
b a n a n e
Cette boucle parcourt la chaîne et affiche chaque lettre sur une ligne individuelle.
La condition de la boucle est index < len(fruit)
,
donc lorsque l'indice devient égal à la longueur de la chaîne, la condition devient fausse, et le corps de la boucle ne s'exécute plus.
Le dernier caractère accédé est celui d'indice len(fruit) -1
, qui est le dernier caractère de la chaîne.
Une autre façon d'écrire un parcours est d'utiliser une boucle for
:
for lettre in fruit:
print(lettre)
b a n a n e
À chaque passage dans la boucle, le caractère suivant dans la chaîne est affecté à la variable lettre
.
La boucle continue jusqu'à ce qu'il n'y ait aucun caractère restant.
Un segment de chaîne de caractères s'appelle une tranche ou slice en anglais.
La sélection d'une tranche est similaire à la sélection d'un caractère
>>> texte = 'Monty Python'
>>> texte[0:5]
'Monty'
>>> texte[6:12]
'Python'
L'opérateur [n:m]
retourne la partie de la chaîne allant du « n-ième » caractère, y compris celui-ci, au« m-ième » caractère, en excluant ce dernier.
Ce comportement est contre-intuitif, mais si vous imaginez les indices comme pointant entre les caractères, comme sur la Figure ci-dessous, cela peut vous aider.
>>> fruit = 'banane'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ane'
>>> fruit = 'banane'
>>> fruit[3:3]
''
Les chaînes de caractères sont immuables (on dit aussi non mutables), ce qui signifie que vous ne pouvez pas modifier une chaîne existante.
Le mieux que vous puissiez faire est de créer une nouvelle chaîne qui est une variation sur l'original.
Exemple
salut = 'bonjour à vous'
# On veut modifier le première lettre pour y mettre une majuscule
salut[0] = 'B'
print(salut)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-14-e6f57b090e39> in <module> 3 # On veut modifier le première lettre pour y mettre une majuscule 4 ----> 5 salut[0] = 'B' 6 print(salut) TypeError: 'str' object does not support item assignment
Cette erreur est provoquée à la deuxième ligne du script.
On y essaie de remplacer une lettre par une autre dans la chaîne, mais cela n'est pas permis.
Pour faire cela, il faut créer une nouvelle chaîne de catactères :
salut = 'bonjour à vous'
salut = 'B' + salut[1:] # On ajoute (concaténation) à B les lettres de la chaîne salut, à partir de la deuxième.
print(salut)
Bonjour à vous
Les chaînes de caractères fournissent des méthodes qui effectuent une variété d'opérations utiles.
Une méthode est semblable à une fonction - elle prend des arguments et renvoie une valeur -, mais la syntaxe d'appel est différente.
Au lieu de la syntaxe de fonction upper(mot)
, elle utilise la syntaxe de méthode, mot.upper()
.
Cette forme de notation pointée indique le nom de la méthode, upper, et le nom de la chaîne sur laquelle on applique la méthode, mot.
Les parenthèses vides indiquent que cette méthode ne prend aucun argument.
Un appel de méthode est appelé une invocation ; dans ce cas, nous dirions que nous invoquons upper
sur mot
.
upper
prend une chaîne de caractères et retourne une nouvelle chaîne avec toutes les lettres en majuscule.lower
prend une chaîne de caractères et retourne une nouvelle chaîne avec toutes les lettres en minusculemot = 'banane'
nouveau_mot = mot.upper()
nouveau_mot
'BANANE'
find
Cette méthode permet de trouver la position (l'indice) où le caractère choisi apparaît dans une chaine de caractère.
mot = 'banane'
index = mot.find('a')
index
1
Dans cet exemple, nous invoquons find
sur mot
et passons la lettre que nous recherchons en tant que paramètre.
Pour trier les lettres d'une chaîne de caractères, on utlise la fonction sorted()
.
Cette fonction retourne une liste rangée dans l'ordre alphabétique.
mot = 'banane'
sorted(mot)
['a', 'a', 'b', 'e', 'n', 'n']