Un type de variable particulier : les chaînes de caractères

Vous aurez souvent besoin de manipuler des chaînes de caractères, c'est à dire des suites de caractères pouvant former des mots, des phrases,...
Par exemple, c'est le type de l'information renvoyée par la fonction input() ( le type str, qu'il a souvent fallu transtyper en entier ou flottant dans le chapitre précédent....)

Les chaînes de caractères sont des types de variables pour lesquelles quelques spécificités existent, et sur lesquelles des fonctions particulières peuvent s'appliquer.

Généralités sur les chaînes

Création/initialisation d'une chaîne de caractères

Lors de l'initialisation d'une variable de type chaîne, on utilise les guillemets simples ou doubles pour encadrer le contenu à stocker.

Par exemple :

				
	ma_chaine = "ABCDEF"
	mon_autre_chaine = 'abcdefghg'
				
			

La différence entre les deux écritures est que l’utilisation des guillemets doubles permet d'utiliser les guillemets simples à l'intérieur de la chaîne :

				
	ma_chaine = "J'adore l'anglais !"
				
			

Il est parfois nécessaire d'initialiser une chaîne vide, c'est à dire qui ne contient aucun caractère :

					
	chaine_vide =''

	ou

	chaine_vide = ""
					
				

Concaténation

On peut créer une chaîne en "assemblant" plusieurs chaînes les unes aux autres : on dit alors qu'on les concatène.

On utilise pour cela l'opérateur de concaténation qui n'est autre que signe + 

A ne donc pas confondre avec l'addition !

Il serait de toute façon aberrant d'essayer d'additionner une valeur à une chaîne ( les choux,les carottes,...). Essayez donc d'écrire quelque chose comme :

				
	>>> 'La valeur de pi est :' + 3.14
	Traceback (most recent call last):
  		File "", line 1, in 
	TypeError: cannot concatenate 'str' and 'float' objects
				
			

Il est possible de concaténer une chaîne au début ou à la fin d'une autre selon l'ordre dans lequel on écrit les deux chaînes lors de l'instruction de concaténation :

				
chaine1 = 'abc'

chaine2 = chaine1 + 'def' # ajout A LA FIN de chaine1
print(chaine2)

>>> 'abcdef'

chaine3 = 'def' + chaine1  # ajout AU DÉBUT de chaine1
print(chaine3)

>>> 'defabc'
				
			

Des possibilités exotiques...

Python permet de plus des choses assez étonnantes et intuitives pour créer des chaînes de caractères.

Ainsi, si l'on veut par exemple créer une chaîne contenant plusieurs fois la même syllabe, il suffit d'écrire :

				
>>> 'to' * 3
'tototo'

>>> 'toc-' * 4
'toc-toc-toc-toc-'
				
			

Pas très utile pensez-vous ? Pourtant, si cette possibilité existe, c'est qu'elle a bien des applications...

Les chaînes, objets itérables

De nombreux problèmes sur les chaînes de caractères nécessitent de parcourir l’intégralité de la chaîne afin d’obtenir la réponse à un problème donné, par exemple compter le nombre d'espaces dans une chaîne.

On peut parcourir successivement chaque caractère d'une chaîne, ont dit ainsi qu'une chaîne est itérable. Pour réaliser cette itération, on utilise une structure appelée boucle d'itération :

				
for caractere in chaine : # les noms de variable sont indicatifs !
	# instruction(s) à exécuter
	..........
	..........
				
			

Voila comment cela fonctionne :

Voila un exemple qui affiche successivement chaque caractère d'une chaîne :

				
mot = 'Vaugelas'

for lettre in mot :
	print(lettre)

V
a
u
g
e
l
a
s
				
			

Seul Python propose cette façon d'itérer sur les caractères d'une chaîne; les autres langages utilisent une autre structure pour la boucle for, que vous verrez plus tard.

Adressage d'un caractère dans une chaîne

Pour adresser ( = désigner ) un caractère particulier d'une chaîne ( et éventuellement le copier dans une autre variable ), on utilise l'écriture suivante :

				
	chaine[index]
				
			

chaine est le nom de la variable contenant la chaîne, et index la position ( ou indice ) du caractère depuis le début de la chaîne.

ATTENTION : une chaîne est, comme beaucoup de choses en informatique, "zéro-indexée", c'est à dire que la numérotation des caractères commence de zéro et pas de 1

				
	>>> ma_chaine = "Python !"

	>>> ma_chaine[0]
	'P'

	>>> ma_chaine[1]
	'y'

	>>> ma_chaine[3]
	'h'
				
					

Si l'index est négatif, on compte les caractères depuis la fin de la chaîne ( le dernier caractère a l'index -1 ) :

				
	>>> ma_chaine = "Python !"

	>>> ma_chaine[-1]
	'!'

	>>> ma_chaine[-4]
	'o'
				
			

Les chaînes, objets non-mutables

Une fois une chaîne de caractères créée, il n'est plus possible d'en modifier ou d'en supprimer un ou plusieurs caractères : on dit qu'une chaîne est un objet immuable non-mutable.
On ne peut que "copier" un ou plusieurs caractères dans une autre variable, ou ajouter d'autre(s) caractère(s) en début en en fin de chaîne.

Par exemple, on obtient une erreur en cherchant à remplacer un caractère par un autre :

				
	>>> nom = "Dupont"
	>>> nom[5] = "d"

	Traceback (most recent call last):
  	File , line 1, in 
  		nom[5]="d"
	TypeError: 'str' object does not support item assignment
				
			

Manipulation de chaîne

De très nombreuses fonctions sont applicables aux chaînes : mises en majuscules, en minuscules,...Si nécessaire, vous rechercherez celle(s) dont vous aurez besoin.

QCM de validation

Exercices et applications

Caractère au choix (exercice_A06.py)

Écrire un script qui :

  • initialise et affiche une chaîne de caractères de longueur quelconque
  • demande à l'utilisateur l'index d'un des caractères de la chaîne
  • affiche le caractère de la chaîne situé à cet index
				
Voila la chaîne en mémoire : "You're talking to me ?"
Index du caractère : 2
Le caractère à l'index 2 est : u
				
			


				

Longueur d'une chaîne (exercice_A07.py)

Écrire un script qui :

  • demande à l'utilisateur d'entrer une chaîne de caractère
  • calcule puis affiche la longueur ( = nombre de caractères, espaces compris ) de cette chaîne
  • compare le résultat obtenu avec la fonction intégrée à Python : len(chaine)
				
Entrer une chaîne : 'Forcément, elle va moins bien marcher...'
Longueur de la chaîne calculée : 40
Longueur de la chaîne avec la fonction len() : 40
				
			

AIDE

Il faudra parcourir tous les caractères de la chaîne, et utiliser une variable comme "compteur de caractères".

ALGORITHME

  • demander à l'utilisateur d'entrer une chaîne et la stocker dans une variable
  • initialiser à zéro une variable qui servira de compteur de caractères
  • parcourir les caractères de la chaîne les uns après les autres, et à chaque "tour", incrémenter la variable compteur de 1
  • une fois toute la chaîne parcourue, afficher la variable compteur
  • utiliser la fonction len() pour afficher directement la longueur de la chaîne


				

Miroir (exercice_A08.py)

Écrire un script qui demande à l'utilisateur d'entrer une chaîne de caractères, puis qui l'affiche en "miroir".

			
Entrer une chaîne : 'Je suis ton père.'
'.erèp not sius eJ'
				
			

AIDE

Il faudra parcourir tous les caractères de la chaîne, et les concaténer à une nouvelle chaîne qui contiendra la première en miroir.
Attention du coup à l'ordre dans lequel faire cette concaténation !


ALGORITHME

  • demander à l'utilisateur d'entrer une chaîne et la stocker dans une variable
  • initialiser une variable chaîne vide
  • parcourir les caractères de la chaîne les uns après les autres
  • à chaque tour, concaténer le caractère au début de la chaîne "miroir"