Skip to main content
Niveau : Débutant

Chapitre 4 : Les Chaînes de Caractères (str)

Slicing, Méthodes de chaînes (lower, strip, replace), Immuabilité

1. Quoi : Le type str

Une chaîne de caractères (ou string en anglais) est une séquence de caractères utilisée pour représenter du texte. En Python, les chaînes sont immuables (immutable), ce qui signifie qu'une fois créées, elles ne peuvent pas être modifiées directement. Toute opération qui semble modifier une chaîne en crée en réalité une nouvelle.

2. Pourquoi : L'omniprésence du texte

Le texte est partout en programmation : noms d'utilisateurs, messages d'erreur, contenu de fichiers, données d'API, etc. Maîtriser la manipulation des chaînes de caractères est donc une compétence fondamentale.

3. Comment : Création et Manipulation

A. Création

On peut créer des chaînes avec des guillemets simples ('), doubles (") ou triples (''' ou """) pour les chaînes multi-lignes.

# Guillemets simples ou doubles, c'est pareil
simple_quote_string = 'Hello, World!'
double_quote_string = "Hello, Python!"

# ✅ Bon : Utiliser des guillemets différents permet d'inclure l'autre dans la chaîne
quote_inside = "Il a dit 'Bonjour !'"

# Chaînes multi-lignes avec des triples guillemets
multi_line_string = """Ceci est une chaîne
qui s'étend sur
plusieurs lignes."""

B. Concaténation et Répétition

  • Concaténation (coller des chaînes ensemble) avec l'opérateur +.
  • Répétition avec l'opérateur *.
first_name = "John"
last_name = "Doe"

# Concaténation
full_name = first_name + " " + last_name # Résultat : "John Doe"

# Répétition
separator = "-" * 10 # Résultat : "----------"

Note : La concaténation avec + est simple mais peut être inefficace si vous collez un grand nombre de chaînes. Les f-strings (vues au prochain module) sont généralement préférables.

C. Accès aux caractères et Slicing

Les chaînes se comportent comme des séquences. On peut accéder à leurs éléments avec des index.

  • L'indexation commence à 0.
  • On peut utiliser des index négatifs pour partir de la fin.
greeting = "Hello"

# Accès par index
first_char = greeting[0] # 'H'
last_char = greeting[4] # 'o'
last_char_alt = greeting[-1] # 'o' (plus "pythonic")

# Slicing (découpage)
# Syntaxe : [start:stop:step] (stop est exclu)
slice1 = greeting[1:4] # 'ell' (de l'index 1 à 3)
slice2 = greeting[:3] # 'Hel' (du début à l'index 2)
slice3 = greeting[2:] # 'llo' (de l'index 2 à la fin)

D. Méthodes de chaînes courantes

Python fournit une multitude de méthodes utiles pour travailler avec les chaînes. Voici quelques-unes des plus courantes.

text = "  Hello, World!  "

# Changer la casse
upper_text = text.upper() # " HELLO, WORLD! "
lower_text = text.lower() # " hello, world! "
title_text = text.title() # " Hello, World! " (Met en majuscule chaque mot)

# Supprimer les espaces au début et à la fin
stripped_text = text.strip() # "Hello, World!"

# Remplacer une sous-chaîne
replaced_text = stripped_text.replace("World", "Python") # "Hello, Python!"

# Vérifier le début ou la fin
starts_with_hello = stripped_text.startswith("Hello") # True
ends_with_python = replaced_text.endswith("Python") # True

# Trouver la position d'une sous-chaîne
# .find() retourne -1 si non trouvé
position = stripped_text.find(",") # 5
# .index() lève une erreur si non trouvé

E. Fonctions utiles

  • len() : Pour obtenir la longueur d'une chaîne.
message = "Python"
length = len(message) # 6

4. Immuabilité : Un concept clé

Comme les chaînes sont immuables, vous ne pouvez pas faire ceci :

my_string = "Hello"
my_string[0] = "J" # ❌ Erreur ! TypeError: 'str' object does not support item assignment

Pour "changer" une chaîne, vous devez en créer une nouvelle, par exemple avec replace() ou en la reconstruisant.

# ✅ Bon : Créer une nouvelle chaîne
my_string = "Hello"
my_string = "J" + my_string[1:] # Crée "Jello"

Checklist :

  • Les chaînes sont des séquences de caractères immuables.
  • Utiliser + pour la concaténation et * pour la répétition.
  • L'indexation commence à 0. Le slicing permet d'extraire des sous-chaînes.
  • Les méthodes comme .upper(), .strip(), .replace() sont vos meilleures amies.
  • len() donne la longueur de la chaîne.

Exercices :

Exercice 4 - Nettoyage et Formatage de Données Textuelles

Objectif

Cet exercice a pour but de vous faire pratiquer les méthodes de manipulation de chaînes de caractères les plus courantes pour "nettoyer" une donnée textuelle brute.

Contexte

Imaginez que vous recevez des données d'un formulaire web. Les utilisateurs entrent souvent les données de manière incohérente (majuscules, espaces superflus, etc.). Votre tâche est de standardiser ces données.

Énoncé

  1. Créez un nouveau fichier Python nommé string_cleanup.py.

  2. Initialisez la variable suivante au début de votre script. Elle représente une entrée utilisateur brute.

    raw_data = "   osCaR wIldE   "
  3. Effectuez les opérations de nettoyage suivantes, en stockant le résultat de chaque étape dans une nouvelle variable : a. cleaned_data : Supprimez les espaces inutiles au début et à la fin de raw_data. b. formatted_data : Mettez la chaîne cleaned_data en casse "Titre" (la première lettre de chaque mot en majuscule et le reste en minuscule).

  4. Créez un nom d'utilisateur : a. username : À partir de formatted_data, créez un nom d'utilisateur en : - mettant toute la chaîne en minuscules, - remplaçant l'espace par un point (.). Le résultat attendu est oscar.wilde.

  5. Affichez les résultats :

    • Utilisez la fonction print() pour afficher la chaîne à chaque étape du processus, afin de bien voir les transformations.
    Donnée brute : '   osCaR wIldE   '
    Donnée nettoyée : 'Oscar Wilde'
    Nom d'utilisateur généré : 'oscar.wilde'
  6. Vérification finale :

    • Ajoutez une ligne qui vérifie si le username généré est bien égal à "oscar.wilde" et affichez le résultat (qui devrait être True).
    print("Vérification du nom d'utilisateur :", username == "oscar.wilde")

Résultat Attendu

L'exécution de votre script string_cleanup.py devrait produire la sortie suivante :

Donnée brute: '   osCaR wIldE   '
Donnée nettoyée: 'Oscar Wilde'
Nom d'utilisateur généré: 'oscar.wilde'
Vérification du nom d'utilisateur : True
Cliquez ici pour voir un exemple de code de solution
# string_cleanup.py

# Donnée initiale
raw_data = " osCaR wIldE "
print("Donnée brute:", f"'{raw_data}'") # On utilise des f-strings pour bien voir les espaces

# a. Nettoyage des espaces
cleaned_data = raw_data.strip()

# b. Formatage en casse "Titre"
formatted_data = cleaned_data.title()
print("Donnée nettoyée:", f"'{formatted_data}'")

# c. Création du nom d'utilisateur
# On peut enchaîner les méthodes !
username = formatted_data.lower().replace(" ", ".")
print("Nom d'utilisateur généré:", f"'{username}'")

# d. Vérification
print("Vérification du nom d'utilisateur :", username == "oscar.wilde")