Les chaînes de caractères#

En Python, on peut stocker et manipuler du texte au moyen d'une chaîne de caractères (ou string)(type str). Une chaîne de caractères se définit comme une suite de caractères entourée de guillemets simples ('...') ou guillemets doubles ("...").

Une chaîne de caractères ressemble à une liste de caractères: on peut accéder à ses caractères au moyen de leurs index. Mais à la différence d'une liste, une chaîne est une séquence immuable : on ne peut pas la modifier directement (si faut modifier une chaîne de caractère, on doit en créer une nouvelle copie).

texte = "Hello"
liste = ['H', 'e', 'l', 'l', 'o']

# Les deux permettent l'indexation
print(texte[0])  # H
print(liste[0])  # H

# On peut modifier une liste
liste[0] = 'h'
print(liste)  # ['h', 'e', 'l', 'l', 'o']

# Mais on ne peut pas modifier une chaîne directement
try:
    texte[0] = 'h'  # produit un message d'erreur !
except TypeError as e:
    print(e)

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

Une chaîne de caractères est déclarée par une suite de caractères entre guillemets simples ou doubles.

Exemple 1#

1nom = "Dupont"
2prenom = 'Jean'
3
4print("Bonjour", prenom , nom)

Il est aussi possible de définir une chaîne de caractères vide. Il suffit d'écrire uniquement les guillemets sans rien à l'intérieur.

1mon_texte = ""

Accès aux caractères d'une chaîne#

On peut accéder à chaque élément d'une chaîne de caractères au moyen de son index. L'index d'un caractère correspond à sa position dans la chaîne en partant de 0 depuis la gauche.

  • mot[i] pour accéder au caractère à l'index i (avec i allant de 0 à la longeur du mot-1)

  • mot[i:j] pour accéder aux caractères compris entre les index i et j-1

Astuce

Il est également possible de mettre un index négatif, ce qui correspond à calculer l'index depuis la fin du mot (depuis la gauche).

mot[-1] correspond ainsi au dernier caractère, mot[-2] à l'avant dernier, etc...

Exemple 2#

mot

f

r

a

i

s

e

index

0

1

2

3

4

5

1mot = "fraise"
2
3print(mot[0]) # f
4print(mot[4]) # s
5print(mot[-1]) # e
6print(mot[1:3]) # ra
7print(mot[2:-1]) # ais    affiche jusqu'à l'avant-dernier caractère (dernier -1)

Exercice 1#

Sans l'exécuter, déterminez ce que va afficher le programme suivant. Ensuite, exécutez-le pour vérifier votre réponse.

1mot = "domicile et parasol."
2
3print(mot[0]) 
4print(mot[2]) 
5print(mot[-1])
6print(mot[7:10])
7print(mot[0:2], mot[2:4], mot[-4:-1]) 

Opérations de base sur les chaînes de caractères#

  • La longeur d'une chaîne de caractères s'obtient au moyen de la fonction len()

1mot1 = "abc"
2mot2 = "fraise"
3print(mot1.len())		   # affiche 3
4print(mot2.len())		   # affiche 6
  • La concaténation, c’est-à-dire la mise bout à bout de deux chaînes, s’effectue à l’aide de l’opérateur +

1mot1 = "para"
2mot2 = "pluie"
3mot3 = mot1 + mot2 # concatène les 2 mots dans mot3
4print(mot3)		   # affiche "parapluie"

Exercice 2#

Sans l'exécuter, déterminez ce que va afficher le programme suivant. Ensuite, exécutez-le pour vérifier votre réponse.

1# Contrepétrie 1
2str1 = "un pain de glace" 
3str2 =str1[0:3]+str1[11]+str1[4:11] +str1[3]+str1[12:]
4print(str2)

Exercice 3#

Sans l'exécuter, déterminez ce que va afficher le programme suivant. Ensuite, exécutez-le pour vérifier votre réponse.

1# Contrepétrie 2
2str1 = "un champ de coton"
3
4str2 = str1[0:3]+str1[14]+str1[5:14]+str1[3:5]+str1[15:]
5print(str2)

Fonctions de traitement des chaînes de caractères#

Le langage Python propose de nombreuses fonctions pour la gestion des chaînes de caractères. Voici les principales:

  • ch.find(txt): indique la position de la sous-chaine txt

  • ch.count(txt): renvoie le nombre de fois où txt est présent dans la chaine ch.

  • ch.replace(txt1, txt2): renvoie une nouvelle chaine dans laquelle chaque occurrence de txt1 est remplacée par txt2

  • ch.upper(): renvoie le texte de la chaine de caractères ch en majuscules

  • ch.lower(): renvoie le texte de la chaine de caractères ch en minuscules

Rappel: une chaîne de caractère est une variable immuable, et n'est pas modifiée lors de l'appel de ces fonctions. Par contre certaines de ces fonctions (replace, upper et lower par exemple) retournent une nouvelle chaîne de caractères que l'on peut récupérer en affectant la valeur de retour à une nouvelle variable.

Exemple 3#

 1monTexte = "mon chien s'appelle Ben"
 2
 3pos = monTexte.find("chi")
 4print(pos)      # affiche 4, puisque le texte "chi" 
 5                # se trouve au rang 4 de la variable monTexte
 6
 7nbre = monTexte.count("en")
 8print(nbre)	# affiche 2, puisqu’on trouve 2x "en" dans monTexte
 9
10txt2 = monTexte.replace("chien", "chat")
11print(txt2)     # affiche "mon chat s'appelle Ben"

Exemple 4#

1minMaj = " JE suis un MELANGE de Minuscules et MajusCules"
2
3maj = minMaj.upper()
4print(maj)		# affiche: JE SUIS UN MELANGE DE MINUSCULES ET MAJUSCULES
5
6min = minMaj.lower()
7print(min)	     # affiche: je suis un melange de minuscules et majuscules

Exercice 4#

Ecrire un programme qui demande une lettre, puis une phrase à l’utilisateur. Le programme compte ensuite le nombre de fois où cette lettre apparait dans la phrase.

1# Écrivez le programme ici

Exercice 5#

Reprenons l'exercice que l'on a fait dans le chapitre Boucle while. Complétez le programme pour qu'il demande à l'utilisateur la capitale de la Suisse. Tant que la réponse n'est pas "Berne", le programme redemande une nouvelle réponse. Mais cette fois-ci, le programme doit ne pas tenir compte de la casse (minuscule/majuscule) et accepter ainsi diférentes réponses: Berne, BERNE, berne, beRNe ...

Exemple d'exécution:

Quelle est la capitale de la Suisse?
Zurich
Faux, essaie encore!
Genève
Faux, essaie encore!
BErnE
Bravo!
1capitale = input("Quelle est la capitale de la Suisse?")
2
3# Complétez le programme ici
4while ...:
5  capitale = input("Faux, essaie encore!")
6print("Bravo!")

Parcours d'une chaîne de caractères#

On peut parcourir tous les caractères d'une chaîne de caractères de la même manière que les éléments d'une liste.

  • au moyen de leurs index:

1chaine = "Bonjour!"
2for i in range(len(chaine)):
3    print(chaine[i])
  • en parcourant directement les caractères individuellement:

1chaine = "Bonjour!"
2for lettre in chaine:
3    print(lettre)

Exemple 5#

Ce programme parcours tous les caractères d'un texte afin d'échanger toutes les voyelles par une même voyelle.

 1voyelles='aeiou'
 2nouvelleVoyelle = 'o' # vous pouvez modifier ici la voyelle de remplacement
 3
 4texteOriginal = "Buvons un coup ma serpette est perdue!"
 5
 6# Création d'une nouvelle chaîne de caractères vide. Cette chaîne 
 7# va nous servir à créer le nouveau texte, caractère par caractère
 8nouveauTexte = ""	
 9
10for lettre in texteOriginal:
11    if lettre in voyelles:
12      nouveauTexte += nouvelleVoyelle  
13    else:
14       nouveauTexte+= lettre
15print(nouveauTexte)

Exercice 6#

Définissez une fonction supprimeEspace() qui reçoit une chaîne de caractère en entrée et retourne une nouvelle chaîne dans lesquels tous les espaces ont été supprimés.

1# Complétez ce programme en définissant la fonction supprimeEspace()
2test = " abc def g  hi jkl mn o  pqrst uv w xyz"
3
4nouveauTexte = supprimeEspace(test)
5
6# ceci doit afficher "abcdefghijklmnopqrstuvwxyz"
7print("J'ai supprimé", len(test)-len(nouveauTexte), "espaces: ", nouveauTexte) 

Exercice 7#

Ecrire un programme qui calcule la distance de Hamming entre 2 mots de même longueur.

  • Ecrire une fonction qui calcule la distance de Hamming entre 2 mots reçus en paramètre. Testez et validez votre fonction avec plusieurs paires de mots.

  • Demandez 2 mots (de même longeur) à l'utilisateur. Tant que les 2 mots ne sont pas de même longueur, le programme doit redemander les 2 mots.

  • Calculez leur distance de Hamming en appelant la fonction

Pour rappel, la distance de Hamming entre deux mots de même longueur est le nombre de positions pour lesquelles les caractères correspondants diffèrent.

  • La distance de Hamming entre CORDE et PORTE vaut 2

  • La distance de Hamming entre LOUP et coup vaut 1

1# Écrivez le programme ici

Option: demandez à l'utilisateur si il faut prendre en compte la casse (minuscules/majuscules). L'utilisateur devra répondre par O ou N, et le programme effectuera le calcul de la distance de Hamming en conséquence.

Exercice 8#

Ecrire un programme qui demande un mot à l’utilisateur, puis qui affiche ce mot, en insérant une étoile entre chaque caractère (mais pas au début ni à la fin du mot !).

Exemple : si l’utilisateur écrit Bonjour, le programme affichera : B*o*n*j*o*u*r

1# Écrivez le programme ici

Exercice 9#

Ecrire une fonction verlan(mot) qui reçoit un mot en argument et renvoie ce mot à l'envers.

Exemple : si l’utilisateur écrit verlan("Wagon"), la fonction va retourner le mot nogaW.

1# Écrivez le programme ici

Exercice 10#

Ecrire un programme qui demande un mot à l’utilisateur, puis vérifie si ce mot est un palindrome ou non. Un palindrome est un mot (ou un texte) dont l'ordre des lettres reste le même qu'on le lise de gauche à droite ou de droite à gauche.

Exemples de palindromes : Bob, kayak, radar, selles, ressasser…

1# Écrivez le programme ici