%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/05_boucle_while\|← Boucle `while`]] | [[Code et Développement/Programmation/Lecture de Code - Python/07_listes\|Listes →]] | > |:---|---:| %% nav-fin %% # Chaînes de caractères ## Bases ```python s = "bonjour" len(s) # vaut 7 (nombre de caractères) s[0] # vaut 'b' (premier caractère) s[-1] # vaut 'r' (dernier caractère) s[1:4] # vaut 'onj' (indices 1, 2, 3) ``` Les indices commencent à **0**. Pour les tranches complètes (pas, indices négatifs, sous-séquences), voir [[Code et Développement/Programmation/Lecture de Code - Python/08_tranches_sequences|Tranches et séquences]]. --- ## Parcours ```python s = input() # entrée : abc for c in s: # parcours direct print(c) # affiche a, puis b, puis c for i in range(len(s)): # parcours par indice print(i, s[i]) # affiche 0 a, puis 1 b, puis 2 c ``` --- ## Méthodes utiles | Méthode | Résultat | Exemple | |---|---|---| | `s.upper()` | tout en majuscules | `"abc".upper()` → `"ABC"` | | `s.lower()` | tout en minuscules | `"ABC".lower()` → `"abc"` | | `s.strip()` | supprime espaces de bord | `" ab ".strip()` → `"ab"` | | `s.replace(a, b)` | remplace a par b | `"aab".replace("a","x")` → `"xxb"` | | `s.count(sub)` | nombre d'occurrences | `"abab".count("ab")` → `2` | | `s.startswith(p)` | commence par p | `"abc".startswith("ab")` → `True` | --- ## `split()` et `join()` ```python # split : chaîne → liste de mots s = "un deux trois" mots = s.split() # vaut ['un', 'deux', 'trois'] mots = s.split(',') # vaut ['un deux trois'] : aucune virgule, la chaîne reste entière t = "a,b,c" t.split(',') # vaut ['a', 'b', 'c'] # join : liste → chaîne " ".join(["a", "b", "c"]) # vaut 'a b c' "-".join(["a", "b", "c"]) # vaut 'a-b-c' ``` --- ## f-strings (chaînes formatées) ```python h = 2 m = 30 print(f"{h}h{m:02d}") # affiche 2h30 (:02d = au moins 2 chiffres) n = 3.14159 print(f"{n:.2f}") # affiche 3.14 (2 décimales) x = 42 print(f"résultat : {x}") # affiche résultat : 42 ``` --- ## Opérateur `in` ```python "a" in "bonjour" # vaut False "on" in "bonjour" # vaut True "a" not in "bonjour" # vaut True ``` --- ## `chr()` et `ord()` — codes ASCII Chaque caractère a un code entier. `ord()` donne le code, `chr()` donne le caractère. ```python ord('A') # vaut 65 ord('a') # vaut 97 ord('0') # vaut 48 chr(65) # vaut 'A' chr(97) # vaut 'a' ``` Les lettres minuscules sont de 97 (`'a'`) à 122 (`'z'`), les majuscules de 65 (`'A'`) à 90 (`'Z'`). ```python # Décaler une lettre de n positions c = 'A' print(chr(ord(c) + 3)) # affiche D # Parcourir l'alphabet for i in range(26): print(chr(ord('a') + i), end=' ') # affiche a b c d e f g h i j k l m n o p q r s t u v w x y z ``` --- ## Pièges fréquents - **Les chaînes sont immuables** : `s[0] = 'x'` provoque une `TypeError`. On crée une nouvelle chaîne : `s = 'x' + s[1:]`. - **Une méthode ne modifie pas la chaîne** : `s.upper()` seul ne change pas `s`. La méthode renvoie une nouvelle chaîne, qu'il faut ranger : `s = s.upper()`. - **Indices** : `s[len(s)]` provoque une `IndexError`. Le dernier indice valide est `len(s) - 1`, ou `-1`. - **`split()` sur une chaîne vide** : `"".split()` vaut `[]`, et non `[""]`. - **`print(x, end=' ')`** : supprime le retour à la ligne. Les `print` suivants s'affichent sur la même ligne. --- ## Exemple — compter les voyelles ```python s = input() # entrée : bonjour count = 0 for c in s: if c in "aeiouAEIOU": count += 1 print(count) ``` **Trace avec bonjour** : les voyelles sont o, o et u. **Sortie : `3`** ## À vous **À manipuler :** prédisez la sortie, ligne par ligne. ```sq-affiche s = "Python" print(len(s)) print(s[1] + s[-1]) print(s.upper()) print(s.count("o")) --- saisie: lignes réponse: 6\nyn\nPYTHON\n1 explication: s[1] vaut 'y' et s[-1] vaut 'n'. print affiche les chaînes sans guillemets. ``` ```sq-affiche mots = "le chat dort".split() print(len(mots)) print("-".join(mots)) print(f"{mots[1]}:{len(mots[1]):03d}") --- saisie: lignes réponse: 3\nle-chat-dort\nchat:004 explication: split() découpe sur les espaces. :03d écrit l'entier sur 3 chiffres, complété par des zéros. ``` ```sq-affiche s = "abc" s.upper() print(s) s = s.upper() print(s) --- saisie: lignes réponse: abc\nABC explication: s.upper() seul ne modifie pas s. La nouvelle chaîne n'est rangée dans s qu'à la ligne 4. ``` %% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %% > [!nav] > ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]] > > | [[Code et Développement/Programmation/Lecture de Code - Python/05_boucle_while\|← Boucle `while`]] | [[Code et Développement/Programmation/Lecture de Code - Python/07_listes\|Listes →]] | > |:---|---:| %% nav-fin %%