Introduction

Les chaînes de caractères (type str) sont des séquences de caractères utilisées pour représenter du texte. Ce cours présente les opérations réalisables dessus.

Opérations de base

Concaténation

La concaténation combine (c’est-à dire assemble bout-à-bout) deux chaînes de caractères : chaine1 + chaine2 ; exemple :

s1 = "Hello"
s2 = "World"
resultat = s1 + " " + s2
print(resultat)

Multiplication

La multiplication consiste à combiner plusieurs fois (à répéter) une chaîne de caractères : chaine * nb_fois ; exemple :

print("Aita ! " * 3)

Caractères spéciaux

Les caractères spéciaux sont des caractères de contrôle ; ils sont indiqués par une lettre ; exemples :

  • t pour tabulation,
  • n pour saut de ligne,
  • r pour retour charriot,
  • b pour effacement du caractère précédent (backspace)

Pour les distinguer des caractères alphabétiques, ils doivent être échappés, c’est-à-dire préfixé par le caractère \ ; exemples :

print("Ia ora na !\nE aha te huru?")
print("Résultat faux\b\b\b\bjuste !")

Longueur d’une chaine

La longueur d’une chaîne de caractères est le nombre de caractères qui la composent (y compris les espaces et caractères spéciaux) : len(chaine) ; exemple :

x = len("Ia ora na")
print(x)

Remarque : dans certains langages de programmation (en C par exemple), la fin d’une chaîne est indiquée par le caractère nul (\0) ; l’espace mémoire occupé est donc d’un caractère de plus que la longueur de la chaîne ; exemple :

char ch[10 + 1] = "Mauruuru !"; //11 caractères avec `\0`
                                //ch[10] == `\0`

Extraction d’un caractère

Il est possible d’extraire un caractère d’une chaîne en indiquant son indice (sa position) ; soit n la longueur de la chaîne, les indices sont numérotés de 0 (premier caractère) à n - 1(dernier caractère) ; exemples :

print("Exemple"[1])
ch = "Autre exemple"
print(ch[0])

Extraction de sous-chaîne

Il est également possible d’extraire une sous-chaîne (partie d’une chaîne) en indiquant les indices de début et de fin : chaine[debut:fin] ;

  • le caractère à l’indice fin est exclu de la sous-chaîne ;
  • si l’indice debut est omis, il est remplacé par 0 — extraction à partir du début ;
  • si l’indice fin est omis, il est remplacé par la longueur de la chaîne — extraction jusqu’à la fin ;
  • si l’indice est négatif, on part de la fin de la chaîne (de droite à gauche).

Exemples :

ch = "Python"
sous_chaine = ch[1:4]
print(sous_chaine)
print(ch[:3] + " " + ch[3:])

Codage ASCII

A chaque caractère correspond un code ASCII : 48 pour "0", 49 pour "1"65 pour "A", 66 pour "B"97 pour `"a"…

  • pour obtenir le caractère correspondant à un code ASCII : caractere = chr(code_ascii) ;
  • pour obtenir le code ASCII d’un caractère : code_ascii = ord(caractere).

Exemple :

code_ascii = ord('A')
print(code_ascii)
code_ascii = code_ascii + 32 #A->a
caractere = chr(code_ascii)
print(caractere)

Remarque : le codage ASCII ne comprend pas de caractères accentués ; ces derniers sont pris en charge par la norme UTF.

Opérations combinées

Ces opérations combinent des opération de base pour réaliser des tâches plus complexes.

Recherche

La fonction chaine.find(sous_chaine) renvoie l’indice de la première occurrence de la sous-chaîne dans la chaîne, ou -1 si elle n’est pas trouvée ; cette fonction est souvent combinée à l’extraction d’une sous-chaîne.

Il est possible de préciser à partir de quel indice chercher : chaine.find(sous_chaine, indice).

Il est également possible de rechercher depuis la fin (dernière occurence), en remplaçant find par rfind.

Exemples :

ch = "Texte avec des espaces"
idx1 = ch.find(" ")
print(idx1)
idx2 = ch.find(" ", idx1 + 1)       #cherche le deuxième espace
print(idx2)
idx3 = ch.rfind(" ")
print(idx3)
print("Programmation".find("code"))

Parcours des caractères

Il est possible d’itérer sur chaque caractère d’une chaîne, c’est-à-dire la parcourir caractère par caractère ; deux méthodes sont possibles :

  • le parcours direct, “pour chaque caractère de la chaîne" ; exemple :
chaine = "abc"
for caractere in chaine:
    print(caractere)
  • le parcours par indice (universel), “pour chaque indice de caractère" ; exemple :
chaine = "def"
n = len(chaine)           #nombre de caractères
for i in range(n):        #ou directement: range(len(chaine))
    caractere = chaine[i] #i est l'indice
    print(caractere)      #ou directement: print(chaine[i])

Méthodes utilitaires fréquentes

  • chaine.isdigit() : renvoie True si la chaîne ne contient que des chiffres (False sinon) ;
  • chaine.upper() / chaine.lower() : met la chaîne en majuscules / minuscules
  • chaine.strip() : supprime les espaces en début et fin de chaîne
  • chaine.replace(sous_chaine, par_nouvelle_chaine) : remplace toutes les occurrences d’une sous-chaîne par une nouvelle chaîne.
  • s.split(delimiteur) : découpe la chaîne en une liste (un tableau) de sous-chaînes au niveau du délimiteur.
ch = input("Chaîne : ")
if ch.isdigit():
    print("La chaîne représente un nombre entier.")
else:
    print("La chaîne n'est pas un nombre entier.")

print("Pomare".upper())

print("   Nana   ".strip() + " !")

ch1 = "Bonjour mesdames ! Bonjour messieurs !"
print(ch1.replace("Bonjour", "Ia ora na"))

ch2="Un texte est constitué de mots…"
mots = ch2.split(" ")
print(mots)

Les tableaux sont traités dans le cour suivant.