====== Chaînes des caractères ======
===== Le type str =====
On crée une chaîne de caractères en utilisant ''%%"%%'' ou ''%%'%%'' indifféremment.
>>> texte = "bonjour"
>>> autre_texte = 'au revoir'
>>> type(texte)
< class:str >
===== Itérable et indexable ======
Le type d'une chaîne est ''str''. Nous avons déjà rencontré la syntaxe de la manipulation d'une chaîne, elle est identique à celle des p-uplets. Juste un exemple pour mémoire :
>>> texte = "bonjour"
>>> texte[2]
'n'
>>> texte[-1]
'r'
>>> for car in texte:
print(car)
b
o
n
j
o
u
r
* Pouvoir faire ''for ... in ...'' correspond au caractère itérable d'une séquence,
* Pourvoir écrire ''texte[2]'' correspond au caractère indexable
===== Immuable =====
En Python les chaînes de caractères sont **immuables**. On on essaie de modifier le contenu d'un ''str'', on aura donc une erreur :
>>> texte = "bonjour"
>>> texte[2] = 'a'
TypeError: 'str' object does not support item assignment
Toutes les fonctions qui modifient une chaîne créent une copie de la chaîne d'origine avec la modification faite.
===== Quelques fonctions spécifiques =====
Les fonctions pouvant être utilisées sur les chaînes de caractères sont très nombreuses et on ne va pas toutes les apprendre. Dites vous que pour toutes les manipulations ordinaires auxquelles vous pourriez penser, il existe probablement une fonction déjà faite.
>>> texte = " Éléphant "
>>> texte.upper()
' ÉLÉPHANT '
>>> texte.lower()
' éléphant '
>>> texte.lstrip()
'Éléphant '
>>> "ananas".replace('a', 'x')
'xnxnxs'
>>> "452".isnumeric()
True
Vous noterez la syntaxe particulière : on veut agir sur la chaîne ''texte'' et au lieu d'écrire quelque chose comme ''upper(texte)'', on écrit ''texte.upper()''. Ce serait trop long de l'expliquer ici. Le type ''str'' est une **classe** -- au sens donné à ce mot en programmation -- et vous l'étudierez si vous poursuivre en Terminale.
La commande ''help(str)'' affiche les nombreuses fonctions disponibles. Bien sûr, internet est aussi une source précieuse d'information.
==== Le formatage ====
Il est fréquent que l'on ait besoin d'écrire un résultat et que l'on souhaite respecter un certain affichage.
**Exemple :** On dispose du nombre ''a'' et on voudrait afficher un message disant "La valeur de a est " suivi de la valeur de ''a''.
Il existe diverses méthodes mais la meilleur consiste à utiliser un formatage.
=== Méthode 1, en utilisant print ===
On peut écrire ''%%print("La valeur de a est",a)%%'' ce qui fait ce que l'on demande. Mais cette méthode est très limitée : On ne pourra pas régler finement l'affichage -- voire les cas suivants.
=== Méthode 2, avec une concaténation ===
Disons le tout de suite, c'est **une mauvaise méthode**. L'idée est de construire la chaîne de caractères en concaténant le début du message avec la valeur de ''a'' convertie en ''str''.
''%%"La valeur de a est " + str(a)%%''
=== Méthode 3, format ===
Les chaînes de caractères disposent d'une méthode ''format'' permettant de contrôler finement l'affichage.
>>> a = 1/7
>>> "La valeur de a est {}".format(a)
'La valeur de a est 0.14285714285714285'
>>> "La valeur de a est {:0.4f}".format(a)
'La valeur de a est 0.1429'
Voici le principe :
* on prévoit des "trous" dans la chaîne de texte, marqués par ''%%{}%%'',
* l'ajout de ''.format(a)'' indique par quoi il faudra compléter les trous,
* on peut ajouter des informations de formatage comme '':0.4f'' qui permet d'indiquer que l'on souhaite un affichage à 4 chiffres après la virgule.
Les options d'affichage sont très nombreuses. Par exemple un affichage direct en hexadécimal :
>>> n = 218
>>> "{} en hexadécimal s'écrit {:03X}".format(n,n)
'0DA'
'':03X'' indique que l'on veut un affichage à 3 chiffres, complété à gauche par des 0 si besoin, en hexadécimal, en majuscules.
=== Méthode 4, à partir de Python 3.6 ===
À partir de Python 3.6 on dispose des //fstrings// -- formated strings.
Le principe est le même qu'avec ''format'' mais avec une notation plus légère et plus lisible.
>>> n = 218
>>> f"{n} en hexadécimal s'écrit {n:03X}"
'0DA'
Vous pouvez noter le ''f'' en tête de la chaîne et les variables qui sont placées directement dans les ''{ }''.