Les chaînes de caractères (str) sont omniprésentes en programmation : noms, messages, données lues depuis un fichier, réponses utilisateur… Ce chapitre est l'un des plus importants du niveau Basique car le TOSA évalue énormément les méthodes de chaînes.
Création d'une chaîne
Les chaînes se créent avec des guillemets simples '...', doubles "..." ou triples """...""" pour plusieurs lignes.
nom = "Alice"
ville = 'Paris'
texte_long = """Ceci est une chaîne
sur plusieurs
lignes."""
print(nom)
print(ville)
print(texte_long)Guillemets dans une chaîne
Pour inclure le caractère du délimiteur, on alterne les types :
phrase1 = "Il a dit \"bonjour\"" # échappement avec \
phrase2 = 'Il a dit "bonjour"' # alternance plus lisible
phrase3 = "L'ami de Bob" # apostrophe dans guillemets doubles
print(phrase1)
print(phrase2)
print(phrase3)Caractères spéciaux
| Séquence | Signification |
|---|---|
\n |
Saut de ligne |
\t |
Tabulation |
\\ |
Backslash \ |
\" |
Guillemet double dans une chaîne "..." |
\' |
Apostrophe dans une chaîne '...' |
print("Ligne 1\nLigne 2")
print("Colonne1\tColonne2")
print("Chemin : C:\\Users\\Alice")Concaténation et répétition
On assemble des chaînes avec +, on répète avec * :
salutation = "Bonjour "
nom = "Alice"
message = salutation + nom + " !"
print(message)ligne = "-" * 30
print(ligne)
print("Titre")
print(ligne)Indexation
Chaque caractère d'une chaîne a un indice, à partir de 0.
Chaîne : P y t h o n
Indice+ : 0 1 2 3 4 5
Indice- : -6 -5 -4 -3 -2 -1Les indices négatifs partent de la fin : -1 est le dernier caractère.
mot = "Python"
print(mot[0]) # 'P'
print(mot[3]) # 'h'
print(mot[-1]) # 'n' (dernier)
print(mot[-2]) # 'o' (avant-dernier)Le slicing (découpage)
La syntaxe chaine[debut:fin:pas] extrait une sous-chaîne.
debut: indice de départ (inclus) — par défaut 0.fin: indice d'arrivée (exclu) — par défaut fin de chaîne.pas: pas entre les caractères — par défaut 1.
mot = "Python"
print(mot[0:3]) # 'Pyt' (caractères 0, 1, 2 — 3 est EXCLU)
print(mot[2:5]) # 'tho'
print(mot[:3]) # 'Pyt' (depuis le début)
print(mot[3:]) # 'hon' (jusqu'à la fin)
print(mot[:]) # 'Python' (copie complète)Le pas (step)
Le troisième paramètre permet de sauter des caractères.
alphabet = "abcdefghij"
print(alphabet[::2]) # un caractère sur deux : 'acegi'
print(alphabet[1::2]) # un sur deux, en commençant au 2ème : 'bdfhj'
print(alphabet[::-1]) # inverser ! 'jihgfedcba'Slicing tolérant
À la différence de l'indexation, le slicing ne lève pas d'erreur si les indices sont hors limites :
mot = "Python"
print(mot[0:100]) # pas d'erreur : renvoie 'Python'
print(mot[50:60]) # pas d'erreur : renvoie '' (chaîne vide)Les chaînes sont immuables
Une chaîne ne peut pas être modifiée après sa création. On dit qu'elle est immuable (immutable).
mot = "Python"
mot[0] = "J" # ❌ Impossible !Pour « modifier » une chaîne, on en crée une nouvelle :
mot = "Python"
nouveau = "J" + mot[1:]
print(nouveau)Longueur et appartenance
len() donne la longueur (nombre de caractères). in teste la présence d'une sous-chaîne.
mot = "anticonstitutionnellement"
print("Longueur :", len(mot))
print("on" in mot) # True
print("zzz" in mot) # False
print("on" not in mot) # FalseLes méthodes de chaînes (à connaître par cœur pour le TOSA)
Python offre une cinquantaine de méthodes sur les chaînes. Voici les plus importantes, toutes testées au TOSA.
Casse (majuscules / minuscules)
| Méthode | Effet | Exemple |
|---|---|---|
upper() |
Tout en majuscules | "abc".upper() → "ABC" |
lower() |
Tout en minuscules | "ABC".lower() → "abc" |
title() |
Première lettre de chaque mot en majuscule | "bonjour alice".title() → "Bonjour Alice" |
capitalize() |
Première lettre en majuscule, reste en minuscules | "BONJOUR".capitalize() → "Bonjour" |
swapcase() |
Inverse casse | "aBc".swapcase() → "AbC" |
texte = "bonjour TOSA"
print(texte.upper())
print(texte.lower())
print(texte.title())
print(texte.capitalize())
print(texte.swapcase())Recherche
| Méthode | Effet |
|---|---|
find(sub) |
Indice de la première occurrence ou -1 si non trouvée |
index(sub) |
Idem, mais lève ValueError si non trouvée |
count(sub) |
Nombre d'occurrences |
startswith(sub) |
Commence par sub ? |
endswith(sub) |
Finit par sub ? |
phrase = "Python est un langage puissant. Python est populaire."
print("Position de 'Python' :", phrase.find("Python"))
print("Position de 'Java' :", phrase.find("Java")) # -1
print("Occurrences de 'Python' :", phrase.count("Python"))
print("Commence par 'Python' :", phrase.startswith("Python"))
print("Finit par '!' :", phrase.endswith("!"))Nettoyage
| Méthode | Effet |
|---|---|
strip() |
Retire espaces et tabulations aux deux extrémités |
lstrip() |
Idem, uniquement à gauche |
rstrip() |
Idem, uniquement à droite |
strip(chars) |
Retire les caractères listés dans chars |
texte = " Bonjour TOSA \n"
print(repr(texte.strip()))
print(repr(texte.lstrip()))
print(repr(texte.rstrip()))
# Avec des caractères spécifiques
print("###titre###".strip("#")) # 'titre'(repr() affiche la chaîne avec ses caractères spéciaux visibles.)
Remplacement et séparation
| Méthode | Effet |
|---|---|
replace(old, new) |
Remplace toutes les occurrences |
replace(old, new, n) |
Remplace les n premières occurrences |
split(sep) |
Découpe en liste selon sep |
split() sans arg |
Découpe selon tout espace blanc |
sep.join(liste) |
Recolle une liste avec sep entre chaque |
phrase = "Le chat de Paul aime le chat du voisin."
print(phrase.replace("chat", "chien"))
print(phrase.replace("chat", "chien", 1)) # une seule foisphrase = "Python est un langage"
mots = phrase.split()
print(mots)csv = "Alice,Bob,Charlie,Diana"
noms = csv.split(",")
print(noms)
# Recoller avec un autre séparateur
print(" | ".join(noms))Tests sur le contenu
Ces méthodes renvoient un booléen selon la nature des caractères.
| Méthode | Vraie si la chaîne contient... |
|---|---|
isdigit() |
uniquement des chiffres |
isalpha() |
uniquement des lettres |
isalnum() |
uniquement des lettres ou chiffres |
isspace() |
uniquement des espaces blancs |
isupper() |
toutes les lettres en majuscules |
islower() |
toutes les lettres en minuscules |
print("123".isdigit()) # True
print("12.5".isdigit()) # False (le point n'est pas un chiffre)
print("abc".isalpha()) # True
print("abc123".isalnum()) # True
print(" ".isspace()) # True
print("PYTHON".isupper()) # TrueEnchaîner les méthodes
Puisque chaque méthode renvoie une chaîne, on peut les enchaîner directement :
texte = " Bonjour TOSA \n"
propre = texte.strip().lower().replace("tosa", "python")
print(propre)C'est idiomatique en Python et très efficace.
Les entrées / sorties de base
print() — afficher
On l'a déjà rencontré, mais rappel des options utiles :
# Séparateur entre arguments (défaut : espace)
print("a", "b", "c", sep="-")
# Fin de ligne (défaut : \n)
print("Sans retour à la ligne", end=" ")
print("on continue ici.")
# Combiner
print("-" * 5, "Titre", "-" * 5)Les f-strings (formatted strings) — glisser des valeurs dans un texte
Une f-string est une chaîne précédée de la lettre f. Tout ce qui est écrit entre accolades y est remplacé par sa valeur :
prenom = "Alice"
age = 30
print(f"{prenom} a {age} ans.")
print(f"Dans 5 ans, {prenom} aura {age + 5} ans.")Plus besoin de str() ni de + : la conversion est automatique, et l'on peut mettre une expression entre les accolades. C'est la façon la plus lisible de composer un message, et celle qu'on emploiera dans la suite du cours. Les options de mise en forme — nombre de décimales, alignement en colonnes — font l'objet d'un chapitre de la Partie 2.
input() — lire
input() attend une saisie de l'utilisateur et renvoie toujours une chaîne.
nom = input("Votre nom ? ")
age_txt = input("Votre âge ? ")
age = int(age_txt) # conversion nécessaire pour calculer
print("Bonjour", nom, "vous aurez", age + 1, "ans l'an prochain.")Le mot-clé pass
pass est une instruction vide — elle ne fait rien. On l'utilise là où Python exige une instruction mais qu'on n'a encore rien à y mettre.
def ma_fonction():
pass # placeholder, à compléter plus tard
if condition:
pass # on ne fait rien dans ce cas
else:
traiter()Sans pass, on aurait une IndentationError : Python refuse un bloc vide.
Exercices
"Python"[1:4] ?
"Python"[-1] ?
"abc" * 3 ?
"Python" pour donner "nohtyP" ?
mot = "Python" mot.upper() print(mot)
"a,b,c,d".split(",") ?
" Python ".strip() ?
Soit la chaîne phrase = " Bonjour le monde ! ".
Calculez, en rangeant chaque résultat dans la variable indiquée :
longueur: la longueur de la chaîne (espaces compris).nettoyee: la chaîne sans les espaces de début et de fin.majuscules: la chaîne d'originephrase(espaces compris) entièrement en majuscules.remplacee: la chaîne d'originephrase(espaces compris) où « monde » est remplacé par « TOSA ».present:Truesi « bonjour » figure dans la chaîne, sans tenir compte des majuscules.
Affichez ces résultats comme vous le souhaitez.
À partir des variables prenom et nom, calculez les initiales en majuscules séparées par un point.
Exemple : Alice Dupont → A.D.
Un palindrome est un mot qui se lit de la même manière dans les deux sens (ex : radar, kayak, sos).
Calculez le booléen est_palindrome : True si la chaîne mot est un palindrome, sans tenir compte des majuscules.