<jupyter_start><jupyter_text>Texte (string)Un texte est une **chaine** de caractères.![typewriter](https://media.giphy.com/media/3o84sqlBujhGoXvTyM/giphy-downsized.gif)Le texte standard (ASCII code) consiste en- 26 lettres minuscules (`a-z`)- 26 lettres majuscules (`A-Z`)- 10 chiffres (`0-9`)ainsi que de caractères spéciaux:- ponctuation (`.,;:?!`)- délimiteurs (`(){}[]"'`)- symboles (`$%&`)- opérateurs (`+-*/`)  ConceptsLes concepts présentés dans ce chapitre sont- création de string `s = 'hello'`- délimitation par un guillemet simple `'` ou double `"`- caractère d'échappement `\`Les indexages- index simple `s[i]` pour accéder à un seul caractère- tranche `s[m:n]` pour accéder à une sous-chaine- tranche `s[::i]` avec incrément (2) et chaine inversée (-1)Les fonctions- `len()` pour retourner la longueur- `str()` pour transformer nombre en chaine- `int()` pour transformer chaine en nombreLes opérateurs- `+` de concaténation- `*` de répétition   DélimitationUne chaine de caractères est délimitée par des guillemets anglais simples `'`.<jupyter_code>'hello'<jupyter_output><empty_output><jupyter_text>ou des guillemets anglais doubles  `"`.  **Attention**: il ne faut pas confondre le guillemet double `"` (1 caractère) avec deux guillemets simples `''` (2 caractères).<jupyter_code>"world"<jupyter_output><empty_output><jupyter_text>Si le texte contient déjà un guillemet simple (apostrophe), on entoure le texte avec des guillemets doubles.<jupyter_code>"c'est bien"<jupyter_output><empty_output><jupyter_text>Si une chaine contient les deux sortes de guillemets, on les précède avec une barre oblique inverse `\` (backslash) qui est le caractère d'échappement.<jupyter_code>s = 'c\'est "très" bien'
print(s)<jupyter_output>c'est "très" bien<jupyter_text>LongueurUne chaine s'appelle **string** en anglais.  C'est pour cela que nous utilisons souvent ``s`` comme variable pour désigner une chaine.  Par exemple:<jupyter_code>s = 'Python'<jupyter_output><empty_output><jupyter_text>La fonction `len()` retourne la longueur de la chaine.<jupyter_code>len(s)<jupyter_output><empty_output><jupyter_text>IndexChaque caractère d'une chaine peut être accédé par son index (sa position).  Un index est un nombre entier, commençant avec 0 pour le premier caractère.Voici la première et deuxième lettre du texte `s`<jupyter_code>s[0], s[1]<jupyter_output><empty_output><jupyter_text>Un index négatif permet d'accéder à une chaine depuis sa fin.Voici la dernière et avant-dernière lettre du string `s`.<jupyter_code>s[-1], s[-2]<jupyter_output><empty_output><jupyter_text>TrancheUne tranche est un sous-ensemble d'une chaine indiqué par indice de la forme `[m:n]`.  Elle retourne la sous-chaine avec les caractères qui ont un indice m à n-1.Voici la sous-chaine avec les indices 0, 1, et 2.<jupyter_code>s[:3]<jupyter_output><empty_output><jupyter_text>Voici la sous-chaine avec les indices 2 et 3.<jupyter_code>s[2:4]<jupyter_output><empty_output><jupyter_text>Voici la sous-chaine avec les indices 3, 4 et 5.<jupyter_code>s[3:]<jupyter_output><empty_output><jupyter_text>Un troisième paramètre peut donner l'**incrément**.  Voici la chaine avec les lettres 0, 2, et 4 (à cause de l'incrément 2).<jupyter_code>s[::2]<jupyter_output><empty_output><jupyter_text>Un incrément négatif (-1) **inverse** la chaine.<jupyter_code>s[::-1]<jupyter_output><empty_output><jupyter_text>Une chaine est immuableContrairement à une liste, une chaine est **immuable**.  Essayer de réaffecter une lettre, donne une erreur.    s[0] = 'J'    TypeError: 'str' object does not support item assignment    Par contre c'est possible de créer une nouvelle chaine.  Nous pouvons concaténer une lettre et une tranche d'une chaine existante, pour en former une nouvelle chaine.<jupyter_code>'J' + s[1:]<jupyter_output><empty_output><jupyter_text>Opérateur de concaténationL'opérateur `+` permet de concaténer (enchaîner) deux textes.<jupyter_code>a = 'hello'
b = 'world'<jupyter_output><empty_output><jupyter_text>La concaténation donne<jupyter_code>a + b<jupyter_output><empty_output><jupyter_text>Nous pouvons ajouter une espace au milieu.<jupyter_code>a + ' ' + b<jupyter_output><empty_output><jupyter_text>Nous pouvons ajouter un retour à la ligne (`\n`) au milieu.<jupyter_code>print(a + '\n' + b)<jupyter_output>hello
world<jupyter_text>Opérateur de répétitionL'opérateur `*` permet de répéter un texte.<jupyter_code>'hi' * 20
a * 5<jupyter_output><empty_output><jupyter_text>Maintenant, l'opérateur `*` signifie la multiplication<jupyter_code>12 * 12<jupyter_output><empty_output><jupyter_text>Nous pouvons utiliser des parenthèses pour fixer la priorité.<jupyter_code>(a + ' ') * 5<jupyter_output><empty_output><jupyter_text>Caractère d'échappementEn informatique et en télécommunication, un caractère d'échappement est un caractère qui déclenche une interprétation alternative du ou des caractères qui le suivent. En Python nous avons la **barre oblique inversée** comme caractère d'échappement.- `\n` pour un retour à la ligne (=newline)- `\t` pour un tabulateur- `\\` pour échapper le caractère d'échappement.- `\'` pour un guillemet simple- `\"` pour un guillemet doubleLe tabulateur aligne un texte à des multiples de 8.<jupyter_code>print('hello\tworld')
print('1\t2')<jupyter_output>hello	world
1	2<jupyter_text>Le `\n` (newline) insère un retour à la ligne.<jupyter_code>print('hello\nworld')<jupyter_output>hello
world<jupyter_text>La première et la troisième barre oblique sont échappées.<jupyter_code>print('tab=\\t \tnewline=\\n\n1\t2')<jupyter_output>tab=\t 	newline=\n
1	2<jupyter_text>UnicodeLes chaines de caractères utilisent Unicode. Le format **Unicode** permet de créer des caractères et alphabets de presque toutes les langues du monde.Voici une chaine en japonais avec une sous-tranche.<jupyter_code>jap = 'これは日本語です'  # kore wa nihongo desu
jap[3:6]               # nihongo<jupyter_output><empty_output><jupyter_text>Voici une chaine qui utilise des émojis.<jupyter_code>emoji = '🍏🍎🍐🍊🍋🍌🍉🍇🍓'<jupyter_output><empty_output><jupyter_text>Voici deux émojis répétés 10 fois.<jupyter_code>'🍎🍏' * 10<jupyter_output><empty_output><jupyter_text>Type d'un objet La fonction `type()` retourne le type d'un objet.  Le type d'une chaine est `str` (=string).<jupyter_code>type('abc')<jupyter_output><empty_output><jupyter_text>Voici trois autres types:- `int` (entier)- `float` (virgule flottante- `bool` (booléen)<jupyter_code>type(1), type(1.2), type(True)<jupyter_output><empty_output><jupyter_text>Conversion Un nombre peut être présenté comme chaine.  L'opérateur `*` signifie alors la répétition.<jupyter_code>'12' * 12<jupyter_output><empty_output><jupyter_text>Maintenant, l'opérateur `*` signifie la multiplication<jupyter_code>12 * 12<jupyter_output><empty_output><jupyter_text>La fonction `int()` transforme une chaine (qui représente un entier) en entier.<jupyter_code>int('12')<jupyter_output><empty_output><jupyter_text>L'opérateur inverse `str()` transforme un nombre en string.<jupyter_code>str(123)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11911869225302062, 'fraction_numerical': 0.011513859275053304, 'mean_word_length': 7.022805017103763, 'pattern_counts': {'":': 0, '<': 128, '<?xml version=': 0, '>': 128, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '33', 'dir': 'jupyter-structured-clean-dedup', 'id': '281700', 'license': 'MIT', 'n_tokens_mistral': 2729, 'n_tokens_neox': 2700, 'n_words': 663, 'path': 'doc/python/1_text.ipynb', 'repo_name': 'LeilaBHC/edunum', 'size': '7035'}